1. 配置說明
1.1> 文件位置
Samba服務的主配置文件是smb.conf,默認在/etc/samba/目錄下。
1 [root@localhost /]# vim etc/samba/smb.conf # 文件路徑 2 [global] 3 workgroup = ... 4 server string = ... 5 netbios name = ... 6 security = ... 7 map to guest = ... 8 dns proxy = ...
1.2> 文件配置格式
smb.conf含有多個段,每個段由段名開始,直到下個段名。每個段名放在方括號中間。
每段的參數的格式是:名稱 = 值。挨着等號的兩側可以留出空格, 解放排版強迫症患者。
配置文件中一行一個段名和參數,除了[global] 段外,段名和參數名不分大小寫。
所有的段都可以看作是一個共享資源。段名是該共享資源的名字,段里的參數是該共享資源的屬性。
1 [global] # 段名, 也將是Windows下訪問共享時的文件名 2 workgroup = ... 3 server string = ... 4 netbios name = ... 5 security = ... 6 map to guest = ... 7 dns proxy = ... 8 9 [data] 10 path = /.../.../ 11 browseable = ... 12 writable = ... 13 guest ok = ... 14 read only = ...
1.3> 三個特殊 <section header>
[global]
[global] 下配置的內容是全局可見的,但是在需要的時候,我們可以在其他 [自定義共享] 中定義某些屬性來覆蓋 [global] 的對應選項定義,比如我們在全局中配置了 deadtime = 10,作用為10分鍾強制斷線,我們在 [自定義共享] 的局部配置了 deadtime = 20,那么用戶訪問這個 [自定義共享] 將會20分鍾強制斷線。如果 [自定義共享] 的局部沒有配置 deadtime 那么他依舊是10分鍾強制斷線。
[homes]
[homes] 下的配置作用為:當客戶端發起訪問共享服務請求時,samba服務器就查詢 smb.conf 文件是否定義了該共享服務,如果沒有指定的 [自定義共享] ,但 smb.conf 文件定義了 [homes] 時,samba 服務器會將請求的共享服務名看做是某個用戶的用戶名,並在本地的 password 文件中查詢該用戶,若用戶名存在並且密碼正確,則 samba 服務器會將 [homes] 中的選項定義克隆出一個共享服務給客戶端,該共享的名稱是用戶的用戶名。
[printers]
[printers] 用於提供打印服務。當客戶端發起訪問共享服務請求時,沒有特定的服務與之對應,並且 [homes] 也沒有找到存在的用戶,則samba服務器將把請求的共享服務名當做一個打印機的名稱來進行處理。
1.4> 其他注意事項
1.4.1 配置中,以“=”來划分選項名和選項值
1.4.2 如果說配置過長,可以在某行的末尾使用續行符“\”來在下一行繼續某選項的定義
1.4.3 共享的服務器名稱,以及配置選項不區分大小寫
1.4.4 配置保存完成后,使用 testparm 命令可以測試 smb.conf 配置是否正確。
1.4.5 使用 testparm -v 命令可以詳細的列出 smb.conf 支持的配置參數。
1.4.6 使用 testparm --show-all-parameters 命令可以列出 samba-4.12.3版本490余項配置的默認參數,如果smb.conf 中沒有對其作出配置,那么都將按照默認值處理。
1.4> 可配置項的含義說明
所有配置的類型,以及常用配置項的說明可以看這篇:samba-4.12.3版本 smb.conf 配置內容解釋
2. 配置舉例
2.1 配置一個不需要賬號密碼便可以訪問的文件夾
進入到root權限操作
進入 smb.conf 配置內容
vim /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = SambaServer
security = user
map to guest = bad user
dns proxy = no
[homes]
comment = this is homes
path = /home/homes/
browseable = yes
guest ok = yes
writable = yes
編輯完成后保存,驗證配置
testparm
出現以下內容
[root@localhost /]# testparm Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] dns proxy = No map to guest = Bad User netbios name = SAMBASERVER security = USER server string = Samba Server %v idmap config * : backend = tdb [homes] comment = this is homes guest ok = Yes path = /home/homes/ read only = No
到此,說明配置完畢,接下來添加共享需要的文件夾。
創建文件夾,我這里放到了home文件夾下,你如果是其他位置,記得改上邊 smb.conf 中的 path = /home/homes/
mkdir -p /home/homes/
修改文件夾權限,由於是公共訪問操作,這里給了777最高權限
chmod -R 0777 /home/homes/
改變文件上下文
chcon -t samba_share_t /home/homes/
修改文件所有者和文件關聯屬組為 nobody
chown -R nobody:nobody /home/homes/
重啟Samba服務
/sbin/service smb restart
windows下 win + R 打開運行,輸入服務器IP地址
Linux 下的查看打印
[root@localhost homes]# touch Linux創建.txt [root@localhost homes]# vim Linux創建.txt [root@localhost homes]# ll 總用量 8 -rw-r--r--. 1 root root 493 1月 17 23:12 Linux創建.txt -rwxr--r--. 1 suozhiyuan suozhiyuan 3 1月 17 23:12 Windows創建.txt
2.2 配置一個指定用戶, 通過賬號密碼訪問的文件夾
進入到root權限操作
創建一個用戶組, 如果你要的組已經有了, 就不用創建了, 這里的 SUOZHIYUAN 是我的組名
groupadd SUOZHIYUAN
創建一個用戶, 並且添加到組中, 如果這個用戶你已經有了, 就不用創建了, 這里的 suozhiyuan 是我的用戶名
useradd -g SUOZHIYUAN suozhiyuan
配置這個用戶的密碼, (密碼要求輸入兩遍) 這里的 suozhiyuan 是我的用戶名
smbpasswd -a suozhiyuan
接下來添加共享需要的文件夾
創建共享文件夾,我這里放到了home文件夾下
mkdir -p /home/suozhiyuan/
修改文件夾權限,由於是私人文件夾,這里給了700
chmod -R 0700 /home/suozhiyuan/
改變文件上下文
chcon -t samba_share_t /home/suozhiyuan/
修改文件所有者和文件關聯屬組
chown -R suozhiyuan:suozhiyuan /home/suozhiyuan/
進入 smb.conf 配置內容
vim /etc/samba/smb.conf
[global] workgroup = WORKGROUP server string = Samba Server %v netbios name = SambaServer security = user map to guest = bad user dns proxy = no [suozhiyuan] comment = this is suozhiyuan path = /home/suozhiyuan/ browseable = yes valid users = suozhiyuan guest ok = no writable = yes
編輯完成后保存,驗證配置
testparm
出現以下內容
[root@localhost homes]# testparm Load smb config files from /etc/samba/smb.conf Global parameter guest account found in service section! Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] dns proxy = No map to guest = Bad User netbios name = SAMBASERVER security = USER server string = Samba Server %v idmap config * : backend = tdb [suozhiyuan] comment = this is suozhiyuan path = /home/suozhiyuan/ read only = No valid users = suozhiyuan
到此,配置完畢。
重啟Samba服務
/sbin/service smb restart
windows下 win + R 打開運行,輸入服務器IP地址
Linux 下查看文件
[root@localhost suozhiyuan]# cd /home/suozhiyuan/ [root@localhost suozhiyuan]# touch Linux創建.txt [root@localhost suozhiyuan]# ls -laF 總用量 28 drwx------. 4 suozhiyuan suozhiyuan 214 1月 17 23:45 ./ drwxr-xr-x. 7 root root 80 1月 17 21:05 ../ -rw-------. 1 suozhiyuan suozhiyuan 270 1月 17 21:07 .bash_history -rw-r--r--. 1 suozhiyuan suozhiyuan 18 7月 21 23:59 .bash_logout -rw-r--r--. 1 suozhiyuan suozhiyuan 141 7月 21 23:59 .bash_profile -rw-r--r--. 1 suozhiyuan suozhiyuan 376 7月 21 23:59 .bashrc drwx------. 3 suozhiyuan suozhiyuan 19 1月 12 07:51 .config/ -rw-------. 1 suozhiyuan suozhiyuan 16 1月 12 07:51 .esd_auth -rw-r--r--. 1 root root 0 1月 17 23:39 Linux創建.txt drwxr-xr-x. 4 suozhiyuan suozhiyuan 39 1月 12 07:10 .mozilla/ -rw-------. 1 suozhiyuan suozhiyuan 1497 1月 17 03:02 .viminfo -rwxr--r--. 1 suozhiyuan suozhiyuan 0 1月 17 23:45 Windows創建.txt* -rw-------. 1 suozhiyuan suozhiyuan 134 1月 17 21:13 .Xauthority
2.4 配置一個指定用戶組用密碼登錄的文件夾
進入到root權限操作
創建一個用戶組, 如果你要的組已經有了, 就不用創建了, 這里的 GroupA 是組名
groupadd GroupA
創建兩個用戶, 並且添加到組中, 如果這個用戶你已經有了, 就不用創建了, 這里的 A1 A2是用戶名
useradd -g GroupA A1
useradd -g GroupA A2
配置用戶的密碼, (密碼要求輸入兩遍) 這里的 A1 A2 是用戶名
smbpasswd -a A1
smbpasswd -a A2
以上三步的打印結果:
[root@localhost suozhiyuan]# groupadd GroupA [root@localhost suozhiyuan]# useradd -g GroupA A1 [root@localhost suozhiyuan]# useradd -g GroupA A2 [root@localhost suozhiyuan]# smbpasswd -a A1 New SMB password: Retype new SMB password: Added user A1. [root@localhost suozhiyuan]# smbpasswd -a A2 New SMB password: Retype new SMB password: Added user A2.
接下來添加共享需要的文件夾
創建共享文件夾,我這里放到了home文件夾下
mkdir -p /home/GroupA/
修改文件夾權限,由於是私人文件夾,這里給了700
chmod -R 0700 /home/GroupA/
改變文件上下文
chcon -t samba_share_t /home/GroupA/
修改文件所有者和文件關聯屬組
chown -R A1:GroupA /home/GroupA/
進入 smb.conf 配置內容
vim /etc/samba/smb.conf
[global] workgroup = WORKGROUP server string = Samba Server %v netbios name = SambaServer security = user map to guest = bad user dns proxy = no [GroupA] comment = this is GroupA path = /home/GroupA browseable = yes valid users = @GroupA guest ok = no writable = yes
編輯完成后保存,驗證配置
testparm
出現以下內容
[root@localhost suozhiyuan]# testparm Load smb config files from /etc/samba/smb.conf Global parameter guest account found in service section! Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] dns proxy = No map to guest = Bad User netbios name = SAMBASERVER security = USER server string = Samba Server %v idmap config * : backend = tdb [GroupA] comment = this is GroupA path = /home/GroupA read only = No valid users = @GroupA
到此,說明配置完畢
重啟Samba服務
/sbin/service smb restart
重啟成功打印
[root@localhost suozhiyuan]# /sbin/service smb restart
Redirecting to /bin/systemctl restart smb.service
windows下 win + R 打開運行,輸入服務器IP地址
Windows查看文件夾
Linux打印查看文件夾
[root@localhost /]# cd home/GroupA/ [root@localhost GroupA]# mkdir Linux創建 [root@localhost GroupA]# ls -laF 總用量 0 drwx------. 4 A1 GroupA 46 1月 18 01:04 ./ drwxr-xr-x. 10 root root 114 1月 18 00:54 ../ drwxr-xr-x. 2 root root 6 1月 18 01:04 Linux創建/ drwxr-xr-x. 2 A1 GroupA 6 1月 18 01:03 Windows創建/
如果用多個用戶登錄過,會出現這個提示:不允許一個用戶使用一個以上用戶與服務器或共享資源的多重連接。中斷與此服務器或共享資源的所有連接,然后再試一次。
有三種解決辦法,可點擊前往查看
提示:不允許一個用戶使用一個以上用戶與服務器或共享資源的多重連接。中斷與此服務器或共享資源的所有連接,然后再試一次。的解決辦法
2.5 配置一個高低權限的文件夾
創建2個用戶組 A B,每個組下有兩個用戶:A1,A2 | B1,B2
A組用戶權限高,可以訪問所有組的文件夾
B組用戶權限低,只可以訪問B組下每個用戶自己對應的文件夾
大同小異,關鍵在於 valid users 的配置
3. Windows無法打開文件——防火牆的處理
此處建議不關閉防火牆,而允許 Samba 穿越防火牆,以便外部用戶可以訪問 Samba 共享。
firewall-cmd --add-service=samba --zone=public --permanent firewall-cmd --reload
操作成功提示:
[root@My-Linux-CentOS-8 samba]# firewall-cmd --add-service=samba --zone=public --permanent success [root@My-Linux-CentOS-8 samba]# firewall-cmd --reload success
如果提示防火牆未開啟可通過以下命令開啟
開啟 firewalld 防火牆
systemctl start firewalld.service # 啟用firewalld服務 systemctl enable firewalld.service # 開機啟用firewalld服務
驗證防火牆開啟狀態
systemctl status firewalld.service # 查看開啟狀態