架設 Samba 伺服器

1、前言

Samba 為啟動 SMB/CIFS (Server Message Block/Common Internet File System) 網路協定使 Microsoft Windows 機器能透過此一網路協定來存取 Samba Server 上所分享的檔案系統資源 (ex. 檔案、印表機...等)。

對於不同作業系統之間如何進行檔案系統資源的分享,簡述如下:
  • 網路上的芳鄰: Microsoft Windows 機器間用來互相分享檔案系統資源 (Windows <-> Windows)。
  • NFS:Unix-Like 間用來互相分享檔案系統資源的協定 (Unix-Like <-> Unix-Like)。
  • Samba:Unix-Like 用來分享檔案系統資源給 Windows 機器存取的協定 ( Windows -> Unix-Like)。






文章目錄

1、前言
2、實作環境
3、安裝及設定
4、Samba Server
          步驟1.安裝 samba 套件
          步驟2.修改 samba 設定檔 (smb.conf)
          步驟3.建立 samba 帳號
          步驟4.啟動 samba 服務
5、Samba Client
          Windows Client
          CentOS Client
6、CentOS 存取 Windows 分享資源
7、參考
8、Me FAQ
          Q1.mount error 112 = Host is down?





2、實作環境

  • CentOS 5.1 (Linux 2.6.18-53.1.4.el5)
  • samba-3.0.33-3.7.el5
  • Windows XP Professional





3、安裝及設定

本次實作將分為二個部份說明分別為 Samba Server 與 Samba Client,及 CentOS 如何存取 Windows 所分享的資源。





4、Samba Server

步驟 1. 安裝 samba 套件

利用 yum 指令來安裝 samba 套件。
yum -y install samba    //安裝 samba 套件



步驟 2. 修改 samba 設定檔 (smb.conf)

修改 samba 設定檔 (smb.conf) 內容如下,其中允許 IP 可設定 IP 網段例如 192.168.1.0/255.255.255.0,或者是單一 IP 位址例如 192.168.1.18。
vi /etc/samba/smb.conf  //修改 samba 設定檔
 global                                 //通用設定
 netbios name = Weithenn-smb            //顯示於 Windows 網路芳鄰的電腦名稱
 workgroup = WORKGROUP                  //顯示於 Windows 網路芳鄰的工作群組名稱
 hosts allow = 127. 192.168.1.18        //允許此來源 IP 位址可存取 Samba 資源
 hosts deny = ALL                       //除了上面允許的IP之外禁止其它IP存取Samba資源
 security = user                        //安全等級user需在Samba主機上擁有帳號者才可登入
 encrypt passwords = yes                //是否對密碼部份進行加密
 display charset = utf8                 //Samba 上所顯示的編碼
 unix charset = utf8                    //Linux 上所顯示的編碼
 dos charset = cp950                    //Windows 用戶端的編碼 (可正確顯示中文)
 home                                   //分享設定,屆時顯示分享資料夾的名稱
 comment = Weithenn Samba Files Shares  //分享資料夾的註解
 path = /home                           //分享路徑
 valid users = weithenn,@smbuser        //允許weithenn使用者及smbuse群組可存取資源
 public = yes                           //允許使用者登入後可看到此分享資料夾
 writable = yes                         //允許寫入
 create mode = 664                      //建立檔案的權限 (該檔案在 Samba 中權限為 664)
 directory mode = 775                   //建立資料夾的權限 (該資料夾在 Samba 中權限為 775)




步驟 3. 建立 samba 帳號

設定完成後我們可利用 smbpasswd 指令來建立 Samba 帳號及設定 samba 密碼,下列指令為建立名稱 weithenn 的 samba 帳號。
smbpasswd -a weithenn  //建立 samba 使用者帳號 weithenn
 New SMB password:        //輸入使用者帳號 weithenn 的 samba 密碼
 Retype new SMB password: //再輸入一次使用者帳號 weithenn 的 samba 密碼
 Added user weithenn.     //新增 samba 使用者帳號 weithenn 成功

新增完成後可查看 samba 的使用者帳號密碼檔案,確定該帳號確實已新增且密碼為加密過
cat /etc/samba/smbpasswd
 weithenn:0:52867A67D9C33529AAD3B435B51404EE:96FAFEDB623AA395895B19578404B070:U          :LCT-41CAF287:




步驟 4. 啟動 samba 服務

在啟動 samba 服務以前我們先將 samba 服務 (smb) 設定為若系統重新開機會自動啟動 smb 服務。
chkconfig smb on
使用 chkconfig 指令來查看 smb 在各 runlevel 下狀態 (也就是 runlevel 在 2、3、4、5 時會啟動 smb 服務)。
chkconfig --list |grep smb
 smb             0:off   1:off   2:on    3:on    4:on    5:on    6:off

完成上述設定後便可以啟動 smb 服務。
/etc/rc.d/init.d/smb start
 Starting SMB services:                        [OK]
 Starting NMB services:                        [OK]  

檢查服務是否啟動成功,其中 Port 139 為 NetBIOS Session Service 服務而 Port 445 為用於 CIFS Protocol。
netstat -tnl
 Active Internet connections (only servers)
 Proto Recv-Q   Send-Q   Local Address    Foreign Address    State
 tcp        0        0     0.0.0.0:139          0.0.0.0:*    LISTEN
 tcp        0        0     0.0.0.0:445          0.0.0.0:*    LISTEN






5、Samba Client

以下為說明 Samba Client (Windows、CentOS) 如何存取 Samba 分享資源。

Windows Client

上述設定步驟完成後 Windows 只要開啟檔案總管在網址欄輸入 \\<samba_server> 即會跳出必須輸入帳號及密碼的驗證視窗,您只要輸入剛才新增的 Samba 使用者帳號及密碼即可存取 Samba 資源,若以剛才上述步驟設定所填入的值如下:
  • 檔案總管網址列輸入: \\weithenn-smb\home,也就是 /etc/samba/smb.conf 中所設定的 netbios name = Weithenn-smb 及 home。
  • 驗證視窗欄位輸入: 使用者帳號: weithenn、使用者密碼: 123456

若使用命令提示字元則輸入如下 (成功後可將內容存成 Batch File 以利快速設定):

方式一、將 Samba 資源連接至 W: 網路磁碟機 (需手動輸入驗證資料)
 net use w: \\Samba_Server_IP\home
方式二、將 Samba 資源連接至 W: 網路磁碟機 (不需手動輸入驗證資料)
 net use w: \\Samba_Server_IP\home /user:weithenn 123456

CentOS Client

若是 CentOS 欲存取資源時可利用如下指令來掛載 Samba 所分享的資源。

方式一、將 Samba 資源掛載至 /mnt/home (需手動輸入驗證資料)
mount.cifs //Samba_Server_IP/home /mnt/home -o
方式二、將 Samba 資源掛載至 /mnt/home (不需手動輸入驗證資料)
mount.cifs //Samba_Server_IP/home /mnt/home -o username=weithenn,password=123456
若存取資源完畢要卸載時可執行如下指令即可 (記得先離開 /mnt 下哦)。
umount.cifs /mnt/home





6、CentOS 存取 Windows 分享資源

Samba Server 是用於 Windows 存取 CentOS (SMB) 機器所分享的資源,若 CentOS 欲存取 Windows 所分享的資源呢? 以下先說明實作時的相關條件:

Windows 電腦名稱: Weithenn-XP
  • 分享資料夾名稱: Shares
  • 可存取 Windows 分享資料夾的使用者帳號: weithenn (請確定該使用者帳號存在於 Windows 機器內)
  • 可存取 Windows 分享資料夾的使用者密碼: 123456

CentOS 掛載至本地端檔案系統: /mnt/shares
  • CentOS 帳號密碼檔: /home/weithenn/secret.txt
  • 安全性權限設定: chmod 600 secret.txt

了解後我們修改檔案系統設定檔 /etc/fstab。
vi /etc/fstab
 LABEL=/1           /        ext3    defaults        1 1
 LABEL=/home1      /home     ext3    defaults        1 2
 LABEL=/tmp1       /tmp      ext3    defaults        1 2
 LABEL=/usr1       /usr      ext3    defaults        1 2
 LABEL=/var1       /var      ext3    defaults        1 2
 tmpfs             /dev/shm  tmpfs   defaults        0 0
 devpts            /dev/pts  devpts  gid=5,mode=620  0 0
 sysfs             /sys      sysfs   defaults        0 0
 proc              /proc     proc    defaults        0 0
 LABEL=SWAP-sda6   swap      swap    defaults        0 0
 //Weithenn-XP/Shares  /mnt/shares cifs user,uid=0,rw,suid,credentials=/home/weithenn/secret.txt 0 0 //加入此行

建立存取 Windows 分享資料夾的帳號密碼檔案,請確定該使用者帳號存在於 Windows 機器內:
vi /home/weithenn/secret.txt
 username=weithenn
 password=123456

設定完成後可使用 mount 指令來更新目前的檔案系統 (也就是讀取 /etc/fstab 更新)。
mount -a     //讀取 /etc/fstab 更新
df -h        //檢查是否成功存取 Windows 資源
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/sda1             9.7G  2.3G  6.9G  25% /
 /dev/sda7             414G  211G  183G  54% /home
 /dev/sda5             4.9G  139M  4.5G   3% /tmp
 /dev/sda3             9.7G  2.3G  6.9G  26% /usr
 /dev/sda2             9.7G  255M  9.0G   3% /var
 tmpfs                 2.0G     0  2.0G   0% /dev/shm
 //Weithenn-XP/Shares  251G  236G   15G  95% /mnt/shares  //存取 Windows 資源成功






7、參考






8、Me FAQ

Q1. mount error 112 = Host is down?

Error Message:
使用 mount.cifs 指令欲存取 Samba Server 資源時卻出現如下錯誤訊息:
 mount.cifs //Samba_Server_IP/home /mnt/home -o username=weithenn,password=123456
 mount error 112 = Host is down
 Refer to the mount.cifs(8) manual page (e.g.man mount.cifs)


Ans:
主因為在 Samba Server 設定檔中忘了將此台 Client IP 加入所導致
vi /etc/samba/smb.conf          //修改 samba 設定檔
 hosts allow = 127. 192.168.1.18    //僅允許此來源 IP 位址可存取 Samba 資源

修改完設定檔之後只要執行 reload 讓 smb 去重新讀取設定檔資料即可 (不用重新啟動 smb 服務)。
/etc/rc.d/init.d/smb reload
 Reloading smb.conf file:                                     [OK]