基于 Samba 服務(wù)實(shí)現(xiàn)遠(yuǎn)程文件共享
本文參考劉遄老師的 Linux 就該這么學(xué)撰寫.
Samba 服務(wù)
FTP 是一種跨平臺(tái)的文件傳輸解決方案, 還有一種解決方案是通過 Samba 服務(wù)來(lái)實(shí)現(xiàn)跨平臺(tái)的文件共享.
SMB (Server Message Block) 協(xié)議是微軟公司和英特爾公司共同制定的協(xié)議, 可以完成局域網(wǎng)內(nèi)文件或打印機(jī)等資源的共享. Tridgwell 為了解決 Linux 系統(tǒng)的文件共享, 基于 SMB 協(xié)議開發(fā)了 SMBServer 服務(wù)程序, 起名為 Samba, 是一種舞蹈的名字.
安裝 Samba 服務(wù)
yum install samba
配置 Samba 服務(wù)
Samba 的主配置文件位于 /etc/samba/smb.conf 中. 詳細(xì)的配置文件的介紹幫助可以使用 man 5 smb.conf 來(lái)查看. 完整的 Samba 配置參數(shù)非常多, 完整的幫助文檔的下載地址, 我們不一定能夠都用到, 我們可能只會(huì)用到其中的一部分.
Iptables 配置
SMB 協(xié)議需要使用到 139 和 445 端口, 我們需要把這兩個(gè)端口打開:
iptables -I INPUT -p tcp -dport 139 -j ACCEPT
iptables -I INPUT -p tcp -dport 445 -j ACCEPT
service iptables save
SELinux 配置
在配置之前, 我們需要先進(jìn)行 SELinux 的配置:
# 允許 Samba 服務(wù)使用 useradd 和 groupadd
setsebool -P samba_domain_controller on
# 如果想要分享 home 目錄, 需要開啟 samba_enable_home_dirs
setsebool -P samba_enable_home_dirs on
# 如果你新建了一個(gè)目錄, 你需要將其安全上下文設(shè)置為 samba_share_t, 不要對(duì)系統(tǒng)目錄做這個(gè)操作, 因?yàn)橄到y(tǒng)目錄已經(jīng)有了這個(gè)上下文
# 使用 Boolean 值 samba_export_all_ro 或 samba_export_all_rw 來(lái)共享系統(tǒng)目錄.
# 只讀
setsebool -P samba_export_all_ro on
# 可寫
setsebool -P samba_export_all_rw on
配置文件結(jié)構(gòu)
配置文件是分塊的, 每一塊以一個(gè)中括號(hào)包裹的唯一標(biāo)識(shí)符來(lái)確定, 默認(rèn)配置文件包括 [global], [homes] 以及 [printers].
global 配置
網(wǎng)絡(luò)相關(guān)
# Windows 的域名稱或者工作組名稱
# workgroup = MYGROUP
# 描述字段
server string= Samba Server Version %v
# 指定一個(gè)綁定到主機(jī)的服務(wù)器名稱
# netbios name = MYSERVER
# 用于指定 Samba 去監(jiān)聽哪個(gè)網(wǎng)卡, 注意不要忘記寫 localhost interface(lo)
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
日志選項(xiàng)
log file = /var/log/samba/log.%m
# max size of the log file, 50KB
max log size = 50
安全選項(xiàng)
這一部分可能配置選項(xiàng)很多的, Samba 的配置文檔可以寫一本書來(lái)詳細(xì)說明, 這里只介紹我所了解的常用的配置方法.
# Samba 的安全模式, share 和 server 在文檔中說明不再使用, 現(xiàn)在使用 user
security = user
# 存儲(chǔ)用戶信息的方式, 現(xiàn)在使用的主要有 tdbsam 和 ldapsam 兩種.
passdb backend = tdbsam
共享文件夾
接下來(lái)我們創(chuàng)建一個(gè)共享文件夾的配置區(qū)域, 這一部分的參數(shù)都很好理解.
[myshare]
comment = My share
# 共享文件夾的路徑
path = /shared_folder
# 非公開
pubic = no
# 可寫入
writable = yes
創(chuàng)建用戶
首先我們要?jiǎng)?chuàng)建一個(gè)系統(tǒng)用戶, 用于持有 Samba 的文件.
useradd smbuser
然后使用 pdbedit 命令來(lái)設(shè)定 Samba 賬戶
[root@localhost /]# pdbedit -a -u smbuser
new password:
retype new password:
Unix username: smbuser
NT username:
Account Flags: [U ]
User SID: S-1-5-21-2183877677-2742592103-2159681561-1000
Primary Group SID: S-1-5-21-2183877677-2742592103-2159681561-513
Full Name:
Home Directory: \\localhost\smbuser
HomeDir Drive:
Logon Script:
Profile Path: \\localhost\smbuser\profile
Domain: LOCALHOST
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 10:06:39 EST
Kickoff time: Wed, 06 Feb 2036 10:06:39 EST
Password last set: Sat, 27 Oct 2018 08:50:26 EDT
Password can change: Sat, 27 Oct 2018 08:50:26 EDT
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
修改目錄權(quán)限
剛才創(chuàng)建的共享目錄是屬于 root 的, 所以掛載之后是沒有權(quán)限寫的:
[root@localhost /]# ls -ld shared_folder/
drwxr-xr-x. 2 root root 6 Oct 27 08:47 shared_folder/
我們需要修改其所屬:
chown -R smbuser:smbuser /shared_folder
修改 SELinux 設(shè)置:
semanage -a -t samba_share_t /shared_folder
restorecon -Rv /shared_folder
重啟 Samba 服務(wù)
systemctl restart smb
systemctl enable smb
測(cè)試 Samba 服務(wù)
以下是基于 MAC 系統(tǒng)進(jìn)行測(cè)試:
打開 Finder, 快捷鍵 cmd+k, 打開連接服務(wù)器窗口, 按照下面的形式輸入服務(wù)器地址.

點(diǎn)擊連接之后, 會(huì)跳出登錄界面:

輸入正確的用戶名和密碼, 就可以登錄到服務(wù)器中了.
登陸后, 可以測(cè)試一下能否修改文件, 上傳文件等操作, 以檢測(cè)權(quán)限是否配置正確, 如果發(fā)現(xiàn)不能, 可以檢查 SELinux 設(shè)置和文件目錄權(quán)限配置.
總結(jié)
到此, SMB 服務(wù)的簡(jiǎn)單配置就完成了, SMB 是一個(gè)非常方便的文件共享服務(wù), 可以輕松的部署在局域網(wǎng)中, 非常的方便.