微軟的網路芳鄰檔案系統為 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)
註:
開機時啟動
# 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 區段和一般共享資料夾設定區段內,會有不同的訊息,但相同的是都無法存取。
使用 testparm 測試 /etc/samba/smb.conf 語法是否正確。
# testparm // 自動載入 /etc/samba/smb.conf
新增 3 個 Samba 使用者,待會做測試用。
# 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
沒有留言:
張貼留言