︿
Top

1、前言

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




文章目錄

1、前言
2、實作環境
、安裝 Samba 檔案分享套件
4、設定 IPTables 防火牆規則
5、修改 Samba 設定檔
6、建立 Samba 相關資料夾及帳號
7、ACL 設定
8、修改 SELinux 設定值
9、啟動 Samba 服務
10、掛載 Samba 分享資源

2、實作環境

  • 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

3、安裝 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
  ...略...


4、設定 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 服務


5、修改 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 群組成員可存取


6、建立 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}   //套用存取權限(僅群組成員能存取)


7、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                           //此帳號可對資料夾 讀取/寫入/執行
   ...略...


8、修改 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 安全機制的布林值


9、啟動 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
  ...略...


10、掛載 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 機制是否成功運作。


文章標籤: