Samba 伺服器(第二版)

原始文章:Samba 伺服器

微軟的網路芳鄰檔案系統為 CIFS(Common Internet File System),若想讓 Unix-Like 主機加入微軟的網路芳鄰並共享資源時,就必須架設 Samba Server,目的就是要讓微軟的使用者在網路芳鄰中看到這台主機的 NetBIOS name,進而存取共享的資源。

以下範例需要認證才能登入共享資料夾
安裝 Samba Server(10.10.10.137)
# yum install -y samba(samba-client cifs-utils) 註:
  • samba-client 套件:smbclient 指令查詢伺服器所分享的資訊,可選擇性安裝,若對自己的伺服器設定有把握的話
  • cifs-utils 套件:網路芳鄰檔案系統格式,沒有安裝就無法掛載,錯誤訊息請看 Troubleshooting
  • 以上兩個套件在客戶端都必須安裝

    開機時啟動
    # chkconfig nmb on ; chkconfig smb on
    開啟防火牆
    # iptables -I INPUT -p udp --dport 137:138 -j ACCEPT
    # iptables -I INPUT -p tcp --dport 139 -j ACCEPT
    # iptables -I INPUT -p tcp --dport 445 -j ACCEPT
    # service iptables save
    # iptables -L -n | grep --color -Ew '13[789]|445'


    設定共享資料及存取權限,組態檔 /etc/samba/smb.conf
    # groupadd -r sambauser
    # mkdir -p /sharedir/santana      // 建立共享資料夾
    # chgrp sambauser /sharedir/santana  // 變更共享資料夾群組
    # chmod 2775 /sharedir/santana    // 變更共享資料夾權限
    # chcon -t samba_share_t /sharedir/santana  // SELinux 設定
    # vim /etc/samba/smb.confg
     [global]
     workgroup = career
     security = usr        // share 不需要認證,user 需要認證
     passdb backend = tdbsam  // 檔案是 passdb.tdb
     ; hosts allow = 127. 192.168.0  // 先用分號註解。

     [santana]  // 共享目錄名稱,使用 smbclient 查詢時所顯示的共享資料夾名稱
     path = /sharedir/santana
     write list = @sambauser
     writeable = yes
     public = no
     browseable = yes
     ; hosts allow = 127. 192.168.0  // 先用分號註解。
    注意:
    hosts allow 放在 global 區段和一般共享資料夾設定區段內,會有不同的訊息
    但相同的是都無法存取
  • global 區段:除了允許的網段外,其餘的主機用 smbclient 也看不到分享資 訊,錯誤訊息請看 Troubleshooting 2
  • 一般共享資料夾設定區段:除了允許的網段外,其餘主機用 smbclient 看得到分享資訊,但不能存取或掛載,錯誤訊息請看 Troubleshooting 3

  • 使用 testparm 測試 /etc/samba/smb.conf 語法是否正確。
    # testparm  // 自動載入 /etc/samba/smb.conf

    新增 3 個 Samba 使用者,待會做測試用。
  • 『sabmauser』,群組為『sabmauser』,密碼為『1』
  • 『sabmauser2』,群組不是『sabmauser』,密碼為『1』
  • 『sabmauser3』,群組為『sabmauser』,密碼為『1』
  • # useradd -s /sbin/nologin sambauser
    # smbpasswd -a sambauser
     New SMB password: 『1』
     Retype new SMB password: 『1』
     Added user sambauser.
    # useradd -s /sbin/nologin sambauser2
    # smbpasswd -a sambauser2
     New SMB password: 『1』
     Retype new SMB password: 『1』
     Added user sambauser2.
    # useradd -s /sbin/nologin -G sambauser sambauser3
    # smbpasswd -a sambauser3
     New SMB password: 『1』
     Retype new SMB password: 『1』
     Added user sambauser3.

    查詢 samba 使用者資料庫
    # pdbedit -L
     sambauser:502:  // 查看 samba 使用者是否已建立
     sambauser2:503:
     sambauser3:504:

    啟動服務
    # service nmb start ; service smb start

    Linux 平台測試(10.10.10.138)

    安裝 Samba Client 套件
    # yum install -y samba-client cifs-utils
    查看 Samba Server 共享資源訊息
    # smbclient -L 10.10.10.137

    存取共享目錄,但無法支援許多常用的指令,故建議掛載以方便進行操作。
    # smbclient //10.10.10.137/santana -U sambauser%1  // santana 是共享資料夾的設定名稱 [santana]

    手動掛載,順便測試 sambauser、sambauser2 及 sambauser3 存取狀態。
    # mkdir /mnt/smb
    # mount //10.10.10.137/santana /mnt/smb -o username=sambauser%1
    # df
    # touch i.am.sambauser.txt
    # mount //10.10.10.137/santana /mnt/smb -o username=sambauser2%1
    # mount //10.10.10.137/santana /mnt/smb -o username=sambauser3%1
    # df
    # touch i.am.sambauser3.txt
    # ll /mnt/smb


    注意!雖然可以用不同帳號同時掛載,但新增檔案所屬為最後掛載的使用者,而為何 sambauser2 會掛載失敗,因為在 smb.conf 的設定,是只有 sambauser 群組,才能存取。

    開機時掛載
    # chkconfig netfs on
    # service netfs start
    # echo '//10.10.10.137/santana /mnt/smb cifs username=sambauser%1 0 0' >> /etc/fstab
    # mount -a

    Troubleshooting

    無法掛載訊息
    # mount //10.10.10.137/share_samba /mnt/samba/ -o username=sambauser%1
     mount: block device //10.10.10.137/share_samba is write-protected, mounting read-only
     mount: cannot mount block device //10.10.10.137/share_samba read-only

    查詢系統記錄
    # tail messages
     Oct 17 22:24:08 sambaserver137 kernel: CIFS VFS: cifs_mount failed w/return code = -13
     Oct 17 22:24:16 sambaserver137 tpvmlpd2[2886]: device type not supported
     Oct 17 22:24:16 sambaserver137 tpvmlpd2[1895]: aborting
     Oct 17 22:24:24 sambaserver137 kernel: CIFS VFS: cifs_mount failed w/return code = -22
     Oct 17 22:24:28 sambaserver137 kernel: Status code returned 0xc000006d NT_STATUS_LOGON_FAILURE
     Oct 17 22:24:28 sambaserver137 kernel: CIFS VFS: Send error in SessSetup = -13
     Oct 17 22:24:28 sambaserver137 kernel: CIFS VFS: cifs_mount failed w/return code = -13
     Oct 17 22:24:28 sambaserver137 kernel: Status code returned 0xc000006d NT_STATUS_LOGON_FAILURE
     Oct 17 22:24:28 sambaserver137 kernel: CIFS VFS: Send error in SessSetup = -13
     Oct 17 22:24:28 sambaserver137 kernel: CIFS VFS: cifs_mount failed w/return code = -13

    安裝 cifs-utils 套件,讓系統能辨視裝置格式
    # yum install -y cifs-utils.x86_64

    Troubleshooting 2

    hosts allow 設定在 global 區段
    # smbclient -L 10.10.10.137
     Enter root's password:
     protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE

    Troubleshooting 3

    hosts allow 設定在一般共享資料夾區段

    沒有留言:

    張貼留言