在 Microsoft Windows 系統內,我們可以使用 網路上的芳鄰 來查詢進而存取其他電腦分享出來的資源,而在 Unix-Like 系統中則利用 NFS 來分享彼此的資源,那 Windows 與 Unix-Like 系統間要如何分享彼此的資源呢? 可以利用 Samba 來達成這個目的,關於 Samba 檔案分享伺服器內容及更詳細設定參數可以參考官方文件 RedHat - Deployment Guide - Chapter 17. File and Print Servers。以下為實作環境:
* OS: CentOS 6.0 (32 bit)
* Samba 套件資訊: samba-3.5.4-68.el6_0.2.i686
* Samba 設定檔:/etc/samba/smb.conf
* IPTables 防火牆: TCP/UDP 協定 Port 445
* SELinux 權限: samba_var_t、samba_enable_home_dirs=1、domain_kernel_load_modules=1
----- 安裝 Samba 檔案分享套件 -----
請使用 yum 指令搭配 Samba 套件名稱 samba 即可進行套件安裝。
#yum -y install samba //安裝 Samba 套件
#rpm -qa samba //查詢 Samba 套件版本
samba-3.5.4-68.el6_0.2.i686
#rpm -ql samba //查詢 Samba 設定檔路徑
/etc/logrotate.d/samba
...略...
----- 設定 IPTables 防火牆規則 -----
Samba 檔案分享服務屆時啟動時會 TCP/UDP 協定 Port 445,並且 Samba 分享服務通常為使用於企業內部區域網路分享資料用,因此防火牆規則還必須加上限制來源 IP 網段**「僅允許 10.10.25.0/24」** 的部份,請修改 IPTables 防火牆規則設定檔「/etc/sysconfig/iptables」加上允許 Port 號規則,修改防火牆規則後請重新啟動防火牆服務以便套用生效,並且確定防火牆規則是否有允許相關 Port 號。
#vi /etc/sysconfig/iptables //修改防火牆規則(加入如下二行)
-A INPUT -m state --state NEW -m tcp -p tcp -s 10.10.25.0/24 --dport 445 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp -s 10.10.25.0/24 --dport 445 -j ACCEPT
#service iptables restart //重新啟動防火牆服務
#service iptables status | grep 445 //查看防火牆規則是否套用生效
5 ACCEPT tcp -- 10.10.25.0/24 0.0.0.0/0 state NEW tcp dpt:445
6 ACCEPT udp -- 10.10.25.0/24 0.0.0.0/0 state NEW udp dpt:445
#chkconfig smb on //開機自動啟動 Samba 服務
----- 修改 Samba 設定檔 -----
接著修改 Samba 設定檔**「/etc/samba/smb.conf」**,設定內容中分享 /home/it、/home/rd 資料夾,也就是模擬公司內部有二個部門分別是「IT、RD」,使用者 weithenn 屬於 IT 部門,除了部門資料夾之外使用者還可以將個人資料存放於個人家目錄中,而 jiakai 帳號為公司 PM 雖然並非這二個群組的成員,屆時卻可存取二個部門資料夾,下列為設定檔修改內容:
#vi /etc/samba/smb.conf //修改 Samba 設定檔
[homes] //使用者家目錄設定
comment = Home Directories
browseable = no
writable = yes
[IT] //IT 部門設定
comment = IT Department
path = /home/it //部門資料夾路徑
writable =yes
write list = @it //僅 IT 群組成員可存取
[RD] //RD 部門設定
comment = RD Department
path = /home/rd //部門資料夾路徑
writable =yes
write list = @rd //僅 RD 群組成員可存取
----- 建立 Samba 相關資料夾及帳號 -----
接著建立 IT、RD 群組,並將 weithenn 帳號加入 IT 群組中。
#groupadd it //新增 it 群組
#groupadd rd //新增 rd 群組
it:x:504:weithenn //將 weithenn 加入 it 群組
因為 Samba 中的使用者帳號及密碼與 CentOS 作業系統中是儲存於不同的資料庫檔案,因此接著建立 Samba 檔案分享資源的使用者帳號及密碼,完成後可使用**「pdbedit -L」**指令來查看帳號是否建立成功。
#smbpasswd -a weithenn //建立 weithenn 帳號
New SMB password: //設定密碼
Retype new SMB password: //再次輸入密碼
Added user weithenn. //帳號建立成功
#smbpasswd -a jiakai //建立 jiakai 帳號
#pdbedit -L //查詢 Samba 使用者資料庫內容
weithenn:500:
jiakai:504:
建立相關資料及設定套用權限,例如 建立 IT、Art 部門資料夾、套用部門權限…等。
#mkdir /home/it //建立部門資料夾
#mkdir /home/rd
#chown root:it /home/it //套用使用者及群組權限
#chown root:rd /home/rd
#chmod 770 /home/{it,rd} //套用存取權限(僅群組成員能存取)
----- ACL 設定 ------
預設情況下 CentOS 為採用傳統的方式,也就是 擁有者(Owner)、群組(Group)、其它人(Other)及 讀取(Read)、寫入(Write)、執行(Execute)權限來控制,但有時這樣的設定可能無法符合我們的需求,例如此次實作中部門資料夾的群組為 it、rd,但是 jiakai(PM) 雖然非這二個群組的成員屆時卻需要存取二個部門資料夾,因此我們可以透過設定 ACL(Access Control List)存取控制清單來達成。
#mount -o remount,acl /home //載入 ACL 機制
#mount |grep /home //查看掛載點資訊
/dev/sda5 on /home type ext4(rw,acl) //可使用 ACL 機制
#setfacl -m u:jiakai:rwx /home/it //設定 ACL 機制
#setfacl -m u:jiakai:rwx /home/rd
#getfacl /home/{it,rd} //查看 ACL 權限
# file: home/it
...略...
user:jiakai:rwx //此帳號可對資料夾 讀取/寫入/執行
...略...
----- 修改 SELinux 設定值 -----
因為將 Samba 預設目錄由 「/var/lib/samba」 修改至 「/home/it、/home/rd」,因此新的資料夾權限勢必與原來不同,若不進行修改屆時啟動 Samba 服務時便可能會因為 SELinux 權限問題造成無法啟動 Samba 服務的狀況。
#ls -dZ /var/lib/samba/ /home/{it,rd}
drwxrwx---+ root it unconfined_u:object_r:home_root_t:s0 /home/it
drwxrwx---+ root rd unconfined_u:object_r:home_root_t:s0 /home/rd
drwxr-xr-x. root root system_u:object_r:samba_var_t:s0 /var/lib/samba/
接著透過指令配合 SELinux 權限**「samba_var_t」,指定「/home/it、/home/rd」資料夾設定此權限為「SELinux預設權限」**,之後將相關資料夾還原至剛才設定的 SELinux 預設權限。
#semanage fcontext -a -t samba_var_t "/home(/.*)?" //設定 SELinux 預設權限
#restorecon -Rv /home //還原 SELinux 權限
#ls -dZ /var/lib/samba/ /home/{it,rd} //查看資料夾 SELinux 權限
drwxrwx---+ root it system_u:object_r:samba_var_t:s0 /home/it
drwxrwx---+ root rd system_u:object_r:samba_var_t:s0 /home/rd
drwxr-xr-x. root root system_u:object_r:samba_var_t:s0 /var/lib/samba/
最後則是要將相關的 SELinux 安全機制的布林值打開。
#setsebool -P samba_enable_home_dirs=1 //使用者才可存取家目錄
#setsebool -P domain_kernel_load_modules=1 //開啟 SELinux 安全機制的布林值
----- 啟動 Samba 服務 -----
完成修改 SELinux 安全機制權限設定後,請使用指令「service smb start」啟動 Samba 服務,並且於服務啟動後查看相關 Port 號及執行序是否運作。
#service smb start //啟動 samba 服務
#netstat -tunpl |grep :445 //查看是否開啟 445 Port
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 5857/smbd
#ps aux |grep smbd //查看相關執行序
#smbclient -L localhost -N //查看 Samba 分享資源
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
Sharename Type Comment
--------- ---- -------
IT Disk IT Department
RD Disk RD Department
...略...
----- 掛載 Samba 分享資源 -----
接著便可以在 Windows 主機使用 UNC Path 來嘗試存取 Samba 所分享的資源例如**「\\10.10.25.115」**或搭配 DNS 名稱解析採用 FQDN「\\fileserver」方式存取,此時會彈出使用者帳號密碼驗證視窗,我們先輸入 weithenn 帳號及密碼後按下確定,來登入 Samba 分享服務,登入後您會看到三個資料夾分別是「RD、IT、weithenn」,也就是二個部門資料夾及使用者個人資料夾,您可嘗試相關操作 例如 讀取及寫入使用者個人資料夾及 IT 部份資料夾、試圖存取 Art 部份資料夾,來檢查先前設定是否正確套用。
接著使用「net use /delete *」刪除所有的網路連線資源後,並且使用 net use 指令確定目前沒有任何網路連線資源,接著您就可以再次使用 UNC 路徑來存取 Samba 檔案分享服務,使用 jiakai (PM) 帳號來登入及進行相關操作,以驗證 ACL 機制是否成功運作。
(上一篇)邁向 RHCE 之路 (Day28) - NFS 檔案分享伺服器
(下一篇)邁向 RHCE 之路 (Day30) - MySQL 資料庫伺服器
邁向 RHCE 之路系列文章連結