在 Unix Like 分享檔案資料的 file system 是 NFS,在 Windows 『網路上的芳鄰』所使用的檔案系統為 Common Internet File System, CIFS 。SMBServer (Server Message Block 的簡寫),透過兩支服務來控制,如:
nmbd :管理工作群組、NetBIOS name 等。利用 UDP 協定開啟 port 137, 138 負責名稱解析。
smbd :管理 SAMBA 主機分享的目錄、檔案與印表機。 利用 TCP 協定來傳輸資料,開放的埠口為 139 及 445(不一定存在) 。
所需軟體:
samba: 提供 SMB 伺服器所需的各項服務程式 (smbd 及 nmbd)、 文件檔、以及其他與 SAMBA 相關的 logrotate 設定檔及開機預設選項檔案等。
samba-client: 提供 Linux 做為 SAMBA Client 所需的工具指令,如掛載 SAMBA 檔案格式的 mount.cifs、 取得類似網芳相關樹狀圖的 smbtree。
samba-common: 提供伺服器與用戶端都會使用到的資料,包括 SAMBA 的主要設定檔 (smb.conf)、語法檢驗指令 (testparm)。
網芳的預設限制:
- 伺服器與用戶端之間必須要在同一個網域當中 (否則需要修改 Windows 預設防火牆);
- 最好設定為同一工作群組;
- 主機的名稱不可相同 (NetBIOS name);
- 專業版 Windows XP 最多僅能提供同時 10 個用戶連線到同一台網芳伺服器上。
設定 smb.conf 設定檔
查看語系: cat /etc/sysconfig/i18n
cd /etc/samba
cp smb.conf smb.conf.raw
vim smb.conf
查閱設定正確性: testparm
服務啟動與埠口觀察:
/etc/init.d/smb start
chkconfig smb onnetstat -tlunp | grep mbd
用戶端的檢驗
smbclient -L //127.0.0.1
mount -t cifs //127.0.0.1/temp /mnt
帳號密碼
1. 設定smb.conf vim /etc/samba/smb.conf
[global]
workgroup = meteo
netbios name = janelin
server string = This is janelin's samba server
unix charset = utf8
display charset = utf8
dos charset = cp950
log file = /var/log/samba/%m.log 參考鳥哥 http://linux.vbird.org/linux_server/0370samba.php
在 Unix Like 分享檔案資料的 file system 是 NFS,在 Windows 『網路上的芳鄰』所使用的檔案系統為 Common Internet File System, CIFS 。SMBServer (Server Message Block 的簡寫),透過兩支服務來控制,如:
nmbd :管理工作群組、NetBIOS name 等。利用 UDP 協定開啟 port 137, 138 負責名稱解析。
smbd :管理 SAMBA 主機分享的目錄、檔案與印表機。 利用 TCP 協定來傳輸資料,開放的埠口為 139 及 445(不一定存在) 。
所需軟體:
samba: 提供 SMB 伺服器所需的各項服務程式 (smbd 及 nmbd)、 文件檔、以及其他與 SAMBA 相關的 logrotate 設定檔及開機預設選項檔案等。
samba-client: 提供 Linux 做為 SAMBA Client 所需的工具指令,如掛載 SAMBA 檔案格式的 mount.cifs、 取得類似網芳相關樹狀圖的 smbtree。
samba-common: 提供伺服器與用戶端都會使用到的資料,包括 SAMBA 的主要設定檔 (smb.conf)、語法檢驗指令 (testparm)。
網芳的預設限制:
伺服器與用戶端之間必須要在同一個網域當中 (否則需要修改 Windows 預設防火牆);
最好設定為同一工作群組;
主機的名稱不可相同 (NetBIOS name);
專業版 Windows XP 最多僅能提供同時 10 個用戶連線到同一台網芳伺服器上。
設定 smb.conf 設定檔
查看語系: cat /etc/sysconfig/i18n
cd /etc/samba
cp smb.conf smb.conf.raw
vim smb.conf
查閱設定正確性: testparm
服務啟動與埠口觀察:
/etc/init.d/smb start
chkconfig smb on
netstat -tlunp | grep mbd
用戶端的檢驗
smbclient -L //127.0.0.1
mount -t cifs //127.0.0.1/temp /mnt
帳號密碼
1. 設定smb.conf
vim /etc/samba/smb.conf
[global]
workgroup = meteo
netbios name = janelin
server string = This is janelin's samba server
unix charset = utf8
display charset = utf8
dos charset = cp950
log file = /var/log/samba/%m.log
max log size = 50
load printers = no
#與密碼有關
security = user
passdb backend = tdbsam #密碼檔 /etc/samba/passwd.tdb
#分享設定
[homes]
comment = Home Directories
browseable = no
writable = yes
create mode = 0664 <==建立檔案的權限為 664
directory mode = 0775 <==建立目錄的權限為 775
[project] <==共享資源範例
comment = smbuser's project
path = /home/project
browseable = yes
writable = yes
write list = @users <==寫入者 群組或直接用帳號
#改完 smb.conf 用 testparm檢查語法
關於chmod 0664
4:Set User ID (SUID) 或 Set Group ID (SGID)。表示该档案在执行时会以档案拥有人或群组的身份执行。
2:如果该档案可以被执行(具 x 权限),则在执行时会以拥有者群组的身份执行。如果是不能被执行的档案,在读写时会控制不能让多个程序同时 存取(locked)。
1,sticky。如果将档案设为所有人都可以读写,并设定 sticky,则所有人都可以修改该档案,但是不能删除。如果是目录开放读写权限,但设定 了 sticky,则使用者只能新增档案,不能删除,这个可以应用于 FTP 的上传区。
假设我们要设定档案 myfile 可以被所有人读、写、执行,并设定 sticky:
# chmod 1777 myfile
chmod 2770 dir
这样dir文件夹的权限就是drwxrws—
例題:分享 /home/project 目錄,權限設定。
因為要開放給 users 群組,而共享群組的權限通常是『 2770 』含有 SGID 的特殊旗標功能,故可設定如下:
mkdir /home/project
chgrp users /home/project
chmod 2770 /home/project
ll -d /home/project
drwxrws--- 2 root users 4096 3月 23 14:02 /home/project/
設定可使用 Samba 的用戶帳號與密碼
1. 建立帳號
useradd -G users smb1
echo 1234 | passwd --stdin smb1
2. 新增使用者
pdbedit -a -u smb1
pdbedit -L #察看帳號資訊
smbpasswd smb1 # 管理密碼參數用 pdbedit,修改密碼用 smbpasswd #
pdbedit -x -u smb1
pdbedit -Lw
pdbedit 指令
pdbedit -L [-vw] <==單純的
pdbedit -a|-r|-x -u 帳號 <==新增/修改/刪除帳號
pdbedit -a -m -u 機器帳號 <==與 PDC 有關的機器碼
選項與參數:
-L :列出帳號與 UID 等資訊;
-v :需搭配 -L 執行,包括家目錄;
-w :需搭配 -L 執行,使用舊版的 smbpasswd 格式;
-a :新增 Samba的帳號,帳號需要在 /etc/passwd 內存在;
-r :修改帳號資訊,需搭配很多特殊參數,請 man pdbedit;
-x :刪除 Samba 的帳號,用 -L 找到帳號後再刪除;
-m :後面接的是機器的代碼 (machine account),與 domain model 有關!
啟動 Samba 並測試
/etc/init.d/smb restart
smbclient -L //127.0.0.1 # Password: <==直接按下 [Enter] 即可。
smbclient -L //127.0.0.1 -U smb1
自我掛載測試看看
mount -t cifs //127.0.0.1/smb1 /mnt -o username=smb1 # 缷載 umount /mnt
tail /var/log/samba/127.0.0.1.log
setenforce 0 #關閉 SELinux 1 開啟,cat /var/log/messages 內容克服問題。
安全性的議題與管理
基本的 Samba 規則主要有:
getsebool -a | grep samba
samba_domain_controller --> off <==PDC 時可能會用到
samba_enable_home_dirs --> off <==開放用戶使用家目錄
samba_export_all_ro --> off <==允許唯讀檔案系統的功能
samba_export_all_rw --> off <==允許讀寫檔案系統的功能
samba_share_fusefs --> off
samba_share_nfs --> off
use_samba_home_dirs --> off <==類似使用者家目錄的開放!
virt_use_samba --> off
分享使用者家目錄成為可讀寫
setsebool -P samba_enable_home_dirs=1
getsebool -a | grep samba_enable_home
samba_enable_home_dirs --> on
分享特定目錄,如/home/project
ll -Zd /home/project
drwxrws--- root users root:object_r:user_home_dir_t /home/project/
chcon -t samba_share_t /home/project
ll -Zd /home/project
drwxrws--- root users root:object_r:samba_share_t /home/project/
#分享目錄不只是 Samba ,還包括 FTP 或者是其他的服務時,那可能就得要使用 public_content_t 類型,
任何 SELinux 問題,依照 /var/log/messages 的資訊去修訂。
防火牆議題:利用 iptables 來管理
以 192.168.100.0/24, 192.168.1.0/24 兩個網域開放 SAMBA 使用權時,
應啟用的 port UDP: 137, 138 及 TCP: 139, 445; iptables.allow 應修入這幾項:
vim /usr/local/virus/iptables/iptables.allow # 加入底下這幾行! iptables -A INPUT -i $EXTIF -p tcp -s 192.168.100.0/24 -m multiport \ --dport 139,445 -j ACCEPT iptables -A INPUT -i $EXTIF -p tcp -s 192.168.1.0/24 -m multiport \ --dport 139,445 -j ACCEPT iptables -A INPUT -i $EXTIF -p udp -s 192.168.100.0/24 -m multiport \ --dport 137,138 -j ACCEPT iptables -A INPUT -i $EXTIF -p udp -s 192.168.1.0/24 -m multiport \ --dport 137,138 -j ACCEPT /usr/local/virus/iptables/iptables.rule # smbd 及 nmbd 不支援 TCP Wrappers ,只能透過 iptables 控制。
防火牆議題: 透過內建的 Samba 設定 (smb.conf)
hosts allow 及 hosts deny 這兩個參數。 讓本機、192.168.100.254, 192.168.100.100, 192.168.1.0/24
使用 SAMBA ,可以這樣寫:
vim /etc/samba/smb.conf
[global]
hosts allow = 127. 192.168.100.254 192.168.100.100 192.168.1.
testparm
/etc/init.d/smb restart
在防火牆議題方面,只要使用 iptables 或 hosts allow 其中一項即可,以 hosts allow 為優先,
若針對區網開放, iptables 反而是比較好,因為不需要更動到 smb.conf 設定檔嘛!讓服務的設定變的比較單純些。
檔案系統議題:利用 Quota 限制使用者磁碟使用
分配 smb1, smb2, smb3 在他們自己的家目錄下,各擁有 300MB/400MB (soft/hard) 的磁碟配額限量。 參考鳥哥的 Quota (1.2.2-3) 相關資料處理完成:
1./etc/fstab 加入 /home 掛載點的 usrquota,grpquota 等設定值;
2.重新掛載 /home ,讓 Quota 實際被支援;
3.以 quotacheck -avug 建立 Quota 的資料庫檔案;
4.啟動 Quota ;
然後透過 edquota -u smb1 處理。
edquota -u smb1
Disk quotas for user smb1 (uid 2004):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/server-server 56 300000 400000 7 0 0
edquota -p smb1 smb2
edquota -p smb1 smb3
repquota -ua
待續中‥‥
max log size = 50
load printers = no
#與密碼有關
security = user
passdb backend = tdbsam #密碼檔 /etc/samba/passwd.tdb
#分享設定
[homes]
comment = Home Directories
browseable = no
writable = yes
create mode = 0664 <==建立檔案的權限為 664
directory mode = 0775 <==建立目錄的權限為 775
[project] <==共享資源範例
comment = smbuser's project
path = /home/project
browseable = yes
writable = yes
write list = @users <==寫入者 群組或直接用帳號 #改完 smb.conf 用 testparm檢查語法
- 關於chmod 0664
- 4:Set User ID (SUID) 或 Set Group ID (SGID)。表示该档案在执行时会以档案拥有人或群组的身份执行。
2:如果该档案可以被执行(具 x 权限),则在执行时会以拥有者群组的身份执行。如果是不能被执行的档案,在读写时会控制不能让多个程序同时 存取(locked)。
1,sticky。如果将档案设为所有人都可以读写,并设定 sticky,则所有人都可以修改该档案,但是不能删除。如果是目录开放读写权限,但设定 了 sticky,则使用者只能新增档案,不能删除,这个可以应用于 FTP 的上传区。假设我们要设定档案 myfile 可以被所有人读、写、执行,并设定 sticky:
# chmod 1777 myfile
chmod 2770 dir
这样dir文件夹的权限就是drwxrws—
例題:分享 /home/project 目錄,權限設定。
因為要開放給 users 群組,而共享群組的權限通常是『 2770 』含有 SGID 的特殊旗標功能,故可設定如下:mkdir /home/projectchgrp users /home/project
chmod 2770 /home/project
ll -d /home/project
drwxrws--- 2 root users 4096 3月 23 14:02 /home/project/
設定可使用 Samba 的用戶帳號與密碼
1. 建立帳號
useradd -G users smb1
echo 1234 | passwd --stdin smb1
2. 新增使用者
pdbedit -a -u smb1
pdbedit -L #察看帳號資訊 smbpasswd smb1 # 管理密碼參數用 pdbedit,修改密碼用 smbpasswd #
pdbedit -x -u smb1
pdbedit -Lw
pdbedit 指令
pdbedit -L [-vw] <==單純的
pdbedit -a|-r|-x -u 帳號 <==新增/修改/刪除帳號
pdbedit -a -m -u 機器帳號 <==與 PDC 有關的機器碼
選項與參數:
-L :列出帳號與 UID 等資訊;
-v :需搭配 -L 執行,包括家目錄;
-w :需搭配 -L 執行,使用舊版的 smbpasswd 格式;
-a :新增 Samba的帳號,帳號需要在 /etc/passwd 內存在;
-r :修改帳號資訊,需搭配很多特殊參數,請 man pdbedit;
-x :刪除 Samba 的帳號,用 -L 找到帳號後再刪除;
-m :後面接的是機器的代碼 (machine account),與 domain model 有關!
啟動 Samba 並測試
/etc/init.d/smb restartsmbclient -L //127.0.0.1 # Password: <==直接按下 [Enter] 即可。
smbclient -L //127.0.0.1 -U smb1
自我掛載測試看看
mount -t cifs //127.0.0.1/smb1 /mnt -o username=smb1 # 缷載 umount /mnt
tail /var/log/samba/127.0.0.1.log
setenforce 0 #關閉 SELinux 1 開啟,cat /var/log/messages 內容克服問題。
安全性的議題與管理
基本的 Samba 規則主要有:
getsebool -a | grep samba
samba_domain_controller --> off <==PDC 時可能會用到
samba_enable_home_dirs --> off <==開放用戶使用家目錄
samba_export_all_ro --> off <==允許唯讀檔案系統的功能
samba_export_all_rw --> off <==允許讀寫檔案系統的功能
samba_share_fusefs --> off
samba_share_nfs --> off
use_samba_home_dirs --> off <==類似使用者家目錄的開放!
virt_use_samba --> off
分享使用者家目錄成為可讀寫
setsebool -P samba_enable_home_dirs=1
getsebool -a | grep samba_enable_home
samba_enable_home_dirs --> on
分享特定目錄,如/home/project
ll -Zd /home/project
drwxrws--- root users root:object_r:user_home_dir_t /home/project/
chcon -t samba_share_t /home/project
ll -Zd /home/project
drwxrws--- root users root:object_r:samba_share_t /home/project/
#分享目錄不只是 Samba ,還包括 FTP 或者是其他的服務時,那可能就得要使用 public_content_t 類型,
任何 SELinux 問題,依照 /var/log/messages 的資訊去修訂。
防火牆議題:利用 iptables 來管理
以 192.168.100.0/24, 192.168.1.0/24 兩個網域開放 SAMBA 使用權時,
應啟用的 port UDP: 137, 138 及 TCP: 139, 445; iptables.allow 應修入這幾項:
vim /usr/local/virus/iptables/iptables.allow # 加入底下這幾行! iptables -A INPUT -i $EXTIF -p tcp -s 192.168.100.0/24 -m multiport \ --dport 139,445 -j ACCEPT iptables -A INPUT -i $EXTIF -p tcp -s 192.168.1.0/24 -m multiport \ --dport 139,445 -j ACCEPT iptables -A INPUT -i $EXTIF -p udp -s 192.168.100.0/24 -m multiport \ --dport 137,138 -j ACCEPT iptables -A INPUT -i $EXTIF -p udp -s 192.168.1.0/24 -m multiport \ --dport 137,138 -j ACCEPT /usr/local/virus/iptables/iptables.rule # smbd 及 nmbd 不支援 TCP Wrappers ,只能透過 iptables 控制。
防火牆議題: 透過內建的 Samba 設定 (smb.conf)
hosts allow 及 hosts deny 這兩個參數。 讓本機、192.168.100.254, 192.168.100.100, 192.168.1.0/24
使用 SAMBA ,可以這樣寫:
vim /etc/samba/smb.conf
[global]
hosts allow = 127. 192.168.100.254 192.168.100.100 192.168.1.
testparm
/etc/init.d/smb restart
在防火牆議題方面,只要使用 iptables 或 hosts allow 其中一項即可,以 hosts allow 為優先,
若針對區網開放, iptables 反而是比較好,因為不需要更動到 smb.conf 設定檔嘛!讓服務的設定變的比較單純些。
檔案系統議題:利用 Quota 限制使用者磁碟使用
分配 smb1, smb2, smb3 在他們自己的家目錄下,各擁有 300MB/400MB (soft/hard) 的磁碟配額限量。 參考鳥哥的 Quota (1.2.2-3) 相關資料處理完成:
1./etc/fstab 加入 /home 掛載點的 usrquota,grpquota 等設定值;
2.重新掛載 /home ,讓 Quota 實際被支援;
3.以 quotacheck -avug 建立 Quota 的資料庫檔案;
4.啟動 Quota ;
然後透過 edquota -u smb1 處理。
edquota -u smb1
Disk quotas for user smb1 (uid 2004):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/server-server 56 300000 400000 7 0 0
edquota -p smb1 smb2
edquota -p smb1 smb3
repquota -ua
待續中‥‥