CentOS下shell腳本自動配置samba(含iptable、SELinux配置)

首先要感謝三篇文章,沒有這三篇文章,我根本搞不定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. 執行上面的腳本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章