服務(wù)部署-Samba服務(wù)器
目錄

1 基礎(chǔ)知識(shí)
1.1 Samba 服務(wù)介紹
1987年,微軟公司和英特爾公司共同制定了SMB(Server Messages Block,服務(wù)器消息塊)協(xié)議,旨在解決局域網(wǎng)內(nèi)的文件或打印機(jī)等資源的共享問題,這也使得在多個(gè)主機(jī)之間共享文件變得越來越簡(jiǎn)單。到了1991年,當(dāng)時(shí)還在讀大學(xué)的Tridgwell為了解決Linux系統(tǒng)與Windows系統(tǒng)之間的文件共享問題,基于SMB協(xié)議開發(fā)出了SMBServer服務(wù)程序。這是一款開源的文件共享軟件,經(jīng)過簡(jiǎn)單配置就能夠?qū)崿F(xiàn)Linux系統(tǒng)與Windows系統(tǒng)之間的文件共享工作。
所需的軟件包括:
Samba服務(wù)端軟件包Samba-client客戶端軟件包Samba-common公共文件軟件包
Samba由smbd和nmbd兩個(gè)守護(hù)進(jìn)程組成,兩個(gè)進(jìn)程的啟動(dòng)腳本相互獨(dú)立。
nmbd
nmb啟動(dòng)腳本: /etc/rc.d/init.d/nmbnmbd服務(wù)進(jìn)程提供 NetBIOS名稱服務(wù),以滿足基于通過網(wǎng)絡(luò)文件系統(tǒng)(CIFS)協(xié)議的共享訪問環(huán)境NetBIOS名稱服務(wù)是Windows基于主機(jī)實(shí)現(xiàn)互相通信的機(jī)制,性能差,一般使用CIFSsmbd服務(wù)默認(rèn)監(jiān)聽的端口是 UCP協(xié)議的137,通過nmb服務(wù)啟動(dòng)nmbd進(jìn)程
smbd
smb啟動(dòng)腳本: /etc/rc.d/init.d/smbsmbd服務(wù)進(jìn)程為客戶端提供文件共享與打印機(jī)服務(wù),還負(fù)責(zé)用戶權(quán)限驗(yàn)證以及鎖功能 smbd服務(wù)默認(rèn)監(jiān)聽的端口是 TCP協(xié)議的139與445,通過smb服務(wù)啟動(dòng)smbd進(jìn)程
1.2 安裝 Samba 服務(wù)程序
[root@localhost ~ ]# yum install samba
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分輸出信息………………
Installing:
samba x86_64 4.1.1-31.el7 rhel 527 k
Transaction Summary
================================================================================
Install 1 Package
samba.x86_64 0:4.1.1-31.el7
Complete!
2 Samba 服務(wù)主配置文件
Samba服務(wù)程序的主配置文件與前面學(xué)習(xí)過的Apache服務(wù)很相似,包括全局配置參數(shù)和區(qū)域配置參數(shù)。全局配置參數(shù)用于設(shè)置整體的資源共享環(huán)境,對(duì)里面的每一個(gè)獨(dú)立的共享資源都有效。區(qū)域配置參數(shù)則用于設(shè)置單獨(dú)的共享資源,且僅對(duì)該資源有效。創(chuàng)建共享資源的方法很簡(jiǎn)單,如下表自定義共享配置。
主配置文件/etc/samba/smb.conf
2.1 全局設(shè)定
全局設(shè)定:可以共享的設(shè)置

2.2 私有家目錄
私有家目錄:不能共享的設(shè)置

2.3 打印機(jī)共享
打印機(jī)共享:可以共享的設(shè)置

2.4 自定義共享
自定義共享:不能共享的設(shè)置

3 Samba 服務(wù)命令工具
smbclient命令用于交互式的數(shù)據(jù)訪問smbpasswd命令為Samba賬號(hào)系統(tǒng)獨(dú)立密碼pdbedit命令用于管理SMB服務(wù)程序的賬戶信息數(shù)據(jù)庫(kù)testparm命令,用于測(cè)試配置文件是否有語法錯(cuò)誤,以及顯示最終生效的配置
3.1 smbclient 命令
注意事項(xiàng)
smbclient命令可以直接指定用戶名和密碼,也可以交互式給定查看指定主機(jī)上用戶的所有共享的資源
使用方式
查看指定主機(jī)上用戶的所有共享的資源: smbclient -L HOST -U USERNAME獲取到共享信息: smbclint //SERVER/shared_name -U USERNAME
# 1、列出某個(gè)IP地址所提供的共享文件夾
smbclient -L 198.168.0.1 -U username%password
# 2、像FTP客戶端一樣使用smbclient
# 有許多命令和ftp命令相似,如cd 、lcd、get、megt、put、mput等
smbclient //192.168.0.1/tmp -U username%password
# 3、直接一次性使用smbclient命令
smbclient -c "ls" //192.168.0.1/tmp -U username%password
smbclient //192.168.0.1/tmp -U username%password
smb:/>ls
# 4、除了使用smbclient,還可以通過mount和smbcount掛載遠(yuǎn)程共享文件夾
# 掛載
mount -t cifs -o username=escape,password=123456 //192.168.0.1/tmp /mnt/tmp
# 取消掛載
umount /mnt/tmp
3.2 smbpasswd 命令
客戶端訪問Samba共享服務(wù)所使用的賬號(hào)名稱就是服務(wù)器端系統(tǒng)中真實(shí)存在的系統(tǒng)賬號(hào)名稱,但是不同于微軟的共享設(shè)置,訪問Samba共享的密碼必須是獨(dú)立的Samba密碼,而不能使系統(tǒng)密碼。即使有人獲取了Samba的賬號(hào)和密碼,也難以控制系統(tǒng)。
注意事項(xiàng):
smbpasswd命令為系統(tǒng)用戶添加Samba登錄密碼
命令參數(shù):

[root@localhost ~ ]# smbpasswd -a escape
3.3 pdbedit 命令
注意事項(xiàng):
pdbedit命令用于管理SMB服務(wù)程序的賬戶信息數(shù)據(jù)庫(kù),格式為“pdbedit [選項(xiàng)] 賬戶” 在第一次把賬戶信息寫入到數(shù)據(jù)庫(kù)時(shí)需要使用-a參數(shù),以后在執(zhí)行修改密碼、刪除賬戶等操作時(shí)就不再需要該參數(shù)了
命令參數(shù):

[root@localhost ~ ]# pdbedit -a escape
4 實(shí)戰(zhàn)演示
4.1 服務(wù)端配置
第 1 步:創(chuàng)建用于訪問共享資源的賬戶信息
CentOS系統(tǒng)中,Samba服務(wù)程序默認(rèn)使用的是用戶口令認(rèn)證,即user模式只有建立賬戶信息數(shù)據(jù)庫(kù)之后,才能使用用戶口令認(rèn)證模式,確保僅讓有密碼且受信任的用戶訪問共享資源 Samba服務(wù)的數(shù)據(jù)庫(kù)要求賬戶必須在當(dāng)前系統(tǒng)中已經(jīng)存在,否則日后創(chuàng)建文件時(shí)將導(dǎo)致文件的權(quán)限屬性混亂不堪
[root@localhost ~]# id escape
uid=1000(escape) gid=1000(escape) groups=1000(escape)
[root@localhost ~]# pdbedit -a -u escape
new password:此處輸入該賬戶在Samba服務(wù)數(shù)據(jù)庫(kù)中的密碼
retype new password:再次輸入密碼進(jìn)行確認(rèn)
Unix username: escape
NT username:
Account Flags: [U ]
User SID: S-1-5-21-507407404-3243012849-3065158664-1000
Primary Group SID: S-1-5-21-507407404-3243012849-3065158664-513
Full Name: escape
Home Directory: \\\\localhost\escape
HomeDir Drive:
Logon Script:
Profile Path: \\localhost\escape\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: Mon, 13 Mar 2017 04:22:25 EDT
Password can change: Mon, 13 Mar 2017 04:22:25 EDT
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
第 2 步:創(chuàng)建用于共享資源的文件目錄
在創(chuàng)建時(shí),不僅要考慮到文件讀寫權(quán)限的問題,還需要考慮應(yīng)用于該目錄的 SELinux安全上下文所帶來的限制Samba配置文件中就有關(guān)于SELinux安全上下文策略的說明,只需按照說明中給的值進(jìn)行修改即可修改完畢后執(zhí)行 restorecon命令,讓應(yīng)用于目錄的新SELinux安全上下文立即生效
[root@localhost ~]# mkdir /home/database
[root@localhost ~]# chown -Rf escape:escape /home/database
[root@localhost ~]# semanage fcontext -a -t samba_share_t /home/database
[root@localhost ~]# restorecon -Rv /home/database
restorecon reset /home/database context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:samba_share_t:s0
第 3 步:設(shè)置 SELinux 服務(wù)與策略
設(shè)置 SELinux服務(wù)與策略,使其允許通過Samba服務(wù)程序訪問普通用戶家目錄執(zhí)行 getsebool命令篩選出所有與Samba相關(guān)的SELinux域策略根據(jù)策略的名稱和經(jīng)驗(yàn),在使用 setsebool命令選擇出正確的策略條目進(jìn)行開啟
[root@localhost ~]# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_sandbox_use_samba --> off
virt_use_samba --> off
[root@localhost ~]# setsebool -P samba_enable_home_dirs on
第 4 步:修改 Samba 服務(wù)的主配置文件
在配置文件中, [homes]參數(shù)為來訪用戶的家目錄共享信息,[printers]參數(shù)為共享的打印機(jī)設(shè)備如果這兩項(xiàng)如果在今后的工作中不需要,可以像手動(dòng)刪除,這沒有任何問題,需要的時(shí)候可以手動(dòng)再次創(chuàng)建
[root@localhost ~]# vim /etc/samba/smb.conf
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
security = user
passdb backend = tdbsam
load printers = yes
cups options = raw
[database]
comment = Do not arbitrarily modify the database file
path = /home/database
public = no
writable = yes
第 5 步:重啟 smb 服務(wù)
[root@localhost ~]# systemctl restart smb
[root@localhost ~]# systemctl enable smb
ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user.target.wants/smb.service'
[root@localhost ~]# iptables -F
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
4.2 Windows 客戶端
Samba服務(wù)程序可以解決Linux系統(tǒng)和Windows系統(tǒng)的資源共享問題
要在Windows系統(tǒng)中訪問共享資源,只需要在命令框中輸入兩個(gè)反斜杠,然后再加服務(wù)器的IP地址即可

如果已經(jīng)清空了Linux系統(tǒng)上iptables防火墻的默認(rèn)策略,應(yīng)該能看到Samba共享服務(wù)的登錄界面

正確輸入escape賬戶名以及使用pdbedit命令設(shè)置的密碼后,就可以登錄到共享界面中了

4.3 Linux 客戶端
Samba服務(wù)程序還可以實(shí)現(xiàn)Linux系統(tǒng)之間的文件共享
客戶端安裝支持文件共享服務(wù)的軟件包c(diǎn)ifs-utils
[root@localhost ~]# yum install cifs-utils
Loaded plugins: langpacks, product-id, subscription-manager
......
Installing:
cifs-utils x86_64 6.2-6.el7 rhel 83 k
Transaction Summary
================================================================================
Install 1 Package
cifs-utils.x86_64 0:6.2-6.el7
Complete!
在 Linux客戶端,按照Samba服務(wù)的用戶名、密碼、共享域的順序?qū)⑾嚓P(guān)信息寫入到一個(gè)認(rèn)證文件中為了保證不被其他人隨意看到,最后把這個(gè)認(rèn)證文件的權(quán)限修改為僅root管理員才能夠讀寫
[root@localhost ~]# vim auth.smb
username=escape
password=redhat
domain=MYGROUP
[root@localhost ~]# chmod -Rf 600 auth.smb
在 Linux客戶端上創(chuàng)建一個(gè)用于掛載Samba服務(wù)共享資源的目錄把掛載信息寫入到 /etc/fstab文件中,以確保共享掛載信息在服務(wù)器重啟后依然生效
[root@localhost ~]# mkdir /database
[root@localhost ~]# vim /etc/fstab
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
//192.168.10.10/database /database cifs credentials=/root/auth.smb 0 0
[root@localhost ~]# mount -a
# 或者自行手動(dòng)掛載
mount -t cifs //SERVER/shared_name /mount_point -o username=USERNAME,password=PASSWORD
進(jìn)入到掛載目錄/database后就可以看到Windows系統(tǒng)訪問Samba服務(wù)程序時(shí)留下來的文件了
[root@localhost ~]# cat /database/Memo.txt
i can edit it .
文章作者: Escape
鏈接: https://escapelife.github.io/posts/f4e4ea9e.html
整理:微信公眾號(hào)【開源Linux】
往期推薦
