站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

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

前言

在 Microsoft Windows 系統內,我們可以使用 網路上的芳鄰 來查詢進而存取其他電腦分享出來的資源,而在 Unix-Like 系統中則利用 NFS 來分享彼此的資源,那 Windows 與 Unix-Like 系統間要如何分享彼此的資源呢? 可以利用 Samba 來達成這個目的,關於 Samba 檔案分享伺服器內容及更詳細設定參數可以參考官方文件 [RedHat - Deployment Guide - Chapter 17. File and Print Servers]

實作環境

安裝 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 部份資料夾,來檢查先前設定是否正確套用。

使用者 weithenn 登入 無法存取 RD 資料夾

接著使用「net use /delete *」刪除所有的網路連線資源後,並且使用 net use 指令確定目前沒有任何網路連線資源,接著您就可以再次使用 UNC 路徑來存取 Samba 檔案分享服務,使用 jiakai (PM) 帳號來登入及進行相關操作,以驗證 ACL 機制是否成功運作。

使用者 weithenn 登入 可存取所有部門資料夾

Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com