iT邦幫忙

DAY 29
5

邁向 RHCE 之路系列 第 29

邁向 RHCE 之路 (Day29) - Samba 檔案分享伺服器

在 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 之路系列文章連結


上一篇
邁向 RHCE 之路 (Day28) - NFS 檔案分享伺服器
下一篇
邁向 RHCE 之路 (Day30) - MySQL 資料庫伺服器
系列文
邁向 RHCE 之路30

尚未有邦友留言

立即登入留言