首先要感謝三篇文章,沒有這三篇文章,我根本搞不定samba。分別是鳥哥私房菜的samba教程、CentOS Wiki中samba的教程、第三方samba教程。廢話少說,下面進入正文。
1. 安裝samba。
yum -y install samba
注意,有的文章會寫成yum -y install samba samba-client,其實後面的samba-client根本不需要,因爲裝samba的時候自動就把samba-client裝上了。2. 配置samba。
也就是修改/etc/samba/smb.conf文件。我這裏是刪除了原來的文件,直接新寫了一份,大家自己記得先備份原始文件,因爲後面還有用。下面是我修改後的文件內容。
[global]
netbios name = sambaserver
server string = samba server
log file = /var/log/samba/log.%m
max log size = 50
load printers = No
security = user
passdb backend = tdbsam
#中括號中的字符串就是將來訪問的虛擬目錄的名稱,如這個[project]將來訪問時就是:\\ip\project
[project]
comment = smb's project
#共享路徑
path = /home/project
#可查看
browseable = yes
#可讀寫
writable = yes
#users用戶組可以訪問
write list = @users
修改完後,不要忘記使用testparm檢查文件是否可用。
3. 創建文件夾
mkdir /home/project
4. 配置用戶。
samba的用戶有兩個特點:1. 首先要是一個Linux用戶,2. samba的用戶可以有自己獨立的密碼,登錄時用這個獨立密碼,而不是Linux密碼。
下面是新建一個叫smbuser,密碼是1234的Linux用戶,並將用戶加入到users組下(因爲在smb.conf中,我是使用的用戶組,即@users來處理權限的),並修改共享目錄的用戶組即權限。
chgrp users /home/project/
chmod 2770 /home/project/
useradd -G users smbuser
echo 1234 | passwd --stdin smbuser
有了Linux用戶,就可以將這個用戶設置爲一個samba的用戶,並且設定一個獨立的密碼:111
pdbedit -a -u smbuser
在彈出提示後,你可以爲該用戶輸入密碼111
5. 配置iptables
對Linux防火牆瞭解很淺,經過試驗,只要放行INPUT就可以上傳下載,放行端口和協議包括tcp的139,445。udp的137、138、445,放行語句如下:
iptables -A INPUT -p tcp -m multiport --dports 139,445 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dports 137,138,445 -j ACCEPT
保存並重啓iptables
/etc/rc.d/init.d/iptables save
service iptables restart
6. 配置SELinux
請找到你之前備份的smb.conf文件,裏面的“SELINUX NOTES”對SELinux有很清晰的描述,home文件夾、自己創建的文件夾、系統創建的文件夾等情況處理方式都不一樣,請自行閱讀。我這裏的文件夾是我自己創建的,因此處理方式如下:
chcon -t samba_share_t /home/project/
7. 重啓samba服務
service smb restart
這裏有一點要注意,默認情況下smb是沒有啓動的,因此這時屏幕會提示smb關閉失敗的錯誤,這很正常。另外,samba有smb和nmb兩個服務,smb是進行共享的,nmb是將地址映射稱計算機名的,如果你只用ip訪問,那麼這個nmb服務不啓動也無所謂。
到此爲止,samba的簡單共享文件夾就完成了、創建/刪除/修改文件或文件夾都是可以的。可以\\192.168.1.2\project來測試一下。
----------------------------------------------------------------分割線----------------------------------------------------------
上面完成了簡單配置,下面講一下前面我參考的文章中的不足。
首先是鳥哥的私房菜。
說真的,這篇文章寫得很好,但是耐不住時間的變遷,軟件發生裏變化,但文章沒有更新。主要問題是匿名用戶訪問時,原文用的“security = SHARE“但是在現在的版本中,SHARE和SERVER都已經被廢棄(deprecated),所以匿名用戶不能用security = SHARE,而要用
security = user
map to guest = Bad User
另外,原文中對SELinux的配置是針對的home文件夾,而我這裏是針對的自己創建的文件夾,此處略有不同
其次是CentOS的wiki。
這篇文章中針對iptables的配置是下面這樣的,直接修改iptables的配置文件:
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state --state NEW -m udp -p udp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
其實端口和協議沒有問題,但是修改方式在我這裏試驗完全不行,會導致iptables無法啓動,因此我用的是iptables的命令。
----------------------------------------------------------------分割線----------------------------------------------------------
由於需要自動配置,因此在第4步中的配置samba用戶時,不能使用”pdbedit -a -u smbuser“,因爲這樣需要你手動輸入密碼,因此爲了在shell腳本中能夠使用,我們改成下面這個樣子:
(echo 111;echo 111) | pdbedit -t -a -u smbuser
最後的腳本文件如下:
mkdir /home/project
chgrp users /home/project/
chmod 2770 /home/project/
useradd -G users smbuser
echo 1234 | passwd --stdin smbuser
(echo 111;echo 111) | pdbedit -t -a -u smbuser
iptables -A INPUT -p tcp -m multiport --dports 139,445 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dports 137,138,445 -j ACCEPT
/etc/rc.d/init.d/iptables save
service iptables restart
chcon -t samba_share_t /home/project/
service smb restart
而你要做的也變得簡單了:
1. 安裝samba
2. 配置smb.conf
3. 執行上面的腳本