SAMBA文件共享服務
FTP協議的本質是傳輸文件,而非共享文件。
Samba是一款開源的文件共享軟件,經過簡單配置就能夠實現Linux系統與Windows系統之間的文件共享工作。
安裝Samba服務程序:yum install -y samba。
Samba服務的主配置文件:/etc/samba/smb.conf。
實例1:配置Samba服務前,先刪掉Samba服務主配置文件中的注釋和空行。
通過grep命令,添加-v參數(反向選擇),分別去掉所有以井號(#)和分號(;)開頭的注釋信息行,對於剩余的空白行可以使用^$參數來表示並進行反選過濾,最后把過濾后的可用參數信息通過重定向符覆蓋寫入到原始文件名稱中。
cd /etc/samba
cat smb.conf #過濾注釋行和空行前,查看samba主配置文件,有300多行
mv smb.conf smb.conf_bak #將samba主配置文件smb.conf重命名為smb.conf_bak
grep -v "#" smb.conf_bak | grep -v ";" | grep -v "^$" > smb.conf #過濾掉smb.conf_bak文件的注釋行和空行,再把剩余的信息重定向到smb.conf
cat smb.conf #查看過濾注釋行和空行后的smb.conf文件,只有20行。
Samba服務程序中的參數以及作用:
global | #全局參數。 |
---|---|
workgroup = MYGROUP | #工作組名稱 |
server string = Samba Server Version %v | #服務器介紹信息,參數%v為顯示SMB版本號 |
log file = /var/log/samba/log.%m | #定義日志文件的存放位置與名稱,參數%m為來訪的主機名 |
max log size = 50 | #定義日志文件的最大容量為50KB |
security = user | #安全驗證的方式,總共有4種 |
#share:來訪主機無需驗證口令;比較方便,但安全性很差 | |
#user:需驗證來訪主機提供的口令后才可以訪問;提升了安全性 | |
#server:使用獨立的遠程主機驗證來訪主機提供的口令(集中管理賬戶) | |
#domain:使用域控制器進行身份驗證 | |
passdb backend = tdbsam | #定義用戶后台的類型,共有3種 |
#smbpasswd:使用smbpasswd命令為系統用戶設置Samba服務程序的密碼 | |
#tdbsam:創建數據庫文件並使用pdbedit命令建立Samba服務程序的用戶 | |
#ldapsam:基於LDAP服務進行賬戶驗證 | |
load printers = yes | #設置在Samba服務啟動時是否共享打印機設備 |
cups options = raw | #打印機的選項 |
------------------ | ------- |
[homes] | #共享參數 |
comment = Home Directories | #描述信息 |
browseable = no | #指定共享信息是否在“網上鄰居”中可見 |
writable = yes | #定義是否可以執行寫入操作,與“read only”相反 |
------------------ | ------- |
[printers] | #打印機共享參數 |
comment = All Printers | |
path = /var/spool/samba | #共享文件的實際路徑(重要)。 |
browseable = no | |
guest ok = no | #是否所有人可見,等同於"public"參數。 |
writable = no | |
printable = yes |
配置共享資源
Samba服務程序的主配置文件包括全局配置參數和區域配置參數。全局配置參數用於設置整體的資源共享環境,對里面的每一個獨立的共享資源都有效。區域配置參數則用於設置單獨的共享資源,且僅對該資源有效。
用於設置Samba服務程序的參數以及作用
參數 | 作用 |
---|---|
[share_dir] | 共享文件夾的名稱。share_dir |
comment = heheda | 共享文件夾的備注內容。heheda |
path = /home/niubi | 共享文件夾在Linux中的實際目錄。/home/niubi |
public = no | 關閉“所有人可見” |
writable = yes | 允許寫入操作 |
在RHEL 7系統中,Samba服務程序默認使用的是用戶口令認證模式(user)。這種認證模式可以確保僅讓有密碼且受信任的用戶訪問共享資源,而且驗證過程也十分簡單。
要使用用戶口令認證模式,必須建立賬戶信息數據庫,且這些賬戶必須在當前系統中已經存在,不過密碼不一定要與系統對應賬戶的密碼一致(可以為空),否則日后創建文件時將導致文件的權限屬性混亂不堪,由此引發錯誤。
pdbedit命令:用於管理SMB服務程序的賬戶信息數據庫,格式:pdbedit [選項] 賬戶。在第一次把賬戶信息寫入到數據庫時需要使用-a參數,以后在執行修改密碼、刪除賬戶等操作時就不再需要該參數了。
pdbedit命令中使用的參數以及作用:
參數 | 作用 |
---|---|
-a 用戶名 | 建立Samba用戶 |
-x 用戶名 | 刪除Samba用戶 |
-L | 列出用戶列表 |
-Lv | 列出用戶詳細信息的列表 |
實例2:在實例1基礎上,配置samba服務共享文件夾。
#1.創建用於訪問共享資源的賬戶信息。賬戶必須在當前系統已經存在
id linuxprobe #確認用戶linuxprobe是否存在
pdbedit -a -u linuxprobe #生成賬戶信息數據庫,添加一名用戶,以供samba共享文件夾的登錄驗證
new password:此處輸入該賬戶在Samba服務數據庫中的密碼
retype new password:再次輸入密碼進行確認
#2.創建用於共享資源的文件目錄。在創建時,不僅要考慮到文件讀寫權限的問題,還需要考慮應用於該目錄的SELinux安全上下文所帶來的限制。
mkdir /home/niubi chown -Rf linuxprobe:linuxprobe /home/niubi
semanage fcontext -a -t samba_share_t /home/niubi
restorecon -Rv /home/niubi
#3。設置SELinux服務與策略,使其允許通過Samba服務程序訪問普通用戶家目錄。
getsebool -a | grep samba
setsebool -P samba_enable_home_dirs on
#4.在Samba服務程序的主配置文件中,追加共享文件夾配置參數信息。
vim /etc/samba/smb.conf
...
[share_dir]
comment = heheda
path = /home/niubi
public = no
writable = yes
#5.重啟Samba服務並加入開機啟動項。為避免防火牆妨礙,清空iptables防火牆。
systemctl restart smb
systemctl enable smb
iptables -F
service iptables save
Windows掛載共享
要在Windows系統中訪問共享資源,只需在Windows的“運行”命令框中輸入兩個反斜杠,然后再加服務器的IP地址即可。輸入上面實例用於samba驗證的帳號密碼,登錄進去后的共享文件夾的效果:
在RHEL 7系統中,Samba服務程序使用的是獨立的賬戶信息數據庫。所以,即便Samba服務程序使用的賬戶名字必須是Linux系統中已存在的用戶,但兩者的帳號密碼是獨立的,要分清楚各自所對應的密碼。
Linux掛載共享
Samba服務程序還可以實現Linux系統之間的文件共享。
Linux客戶端需要安裝支持文件共享服務的軟件包:yum install -y cifs-utils
實例3:在實例2基礎上,實現Linux客戶端掛載Samba服務的共享文件夾。
#1.按照Samba服務的用戶名、密碼、共享域的順序將相關信息寫入到一個認證文件中,降低文件權限提高安全性。
vim /root/auth.smb
username=linuxprobe #samba賬戶
password=redhat #samba賬戶密碼
domain=MYGROUP #與samba主配置文件中的對應參數要一致
chmod -Rf 600 auth.smb
#2.創建一個用於掛載Samba服務共享資源的目錄,並把掛載信息寫入到/etc/fstab文件中以永久掛載。
mkdir /liwh
vim /etc/fstab
...
//192.168.10.10/share_dir /liwh cifs credentials=/root/auth.smb 0 0 #把服務端的共享文件夾掛載到客戶端的/liwh目錄里,共享文件夾格式為cifs,權限設置為以認證文件進行驗證
mount -a
客戶端進入到掛載目錄/liwh后就可以對目錄里的文件進行增刪改操作了。
NFS網絡文件系統
凡是Linux之間的文件共享都涉及到掛載步驟。
NFS(網絡文件系統)服務專用於Linux系統主機之間的文件共享,它可以將遠程Linux系統上的文件共享資源掛載到本地主機的目錄上,從而使得本地主機(Linux客戶端)基於TCP/IP協議,像使用本地主機上的資源那樣讀寫遠程Linux系統上的共享文件。
RHEL 7系統中默認已經安裝了NFS服務,安裝nfs:yum install -y nfs-utils。
NFS服務程序的配置文件為/etc/exports,默認情況下里面沒有任何內容。可以按照“共享目錄的路徑 允許訪問的NFS客戶端(共享權限參數)”的格式,定義要共享的目錄與相應的權限。
用於配置NFS服務程序配置文件的參數:
參數 | 作用 |
---|---|
ro | 只讀 |
rw | 讀寫 |
root_squash | 當NFS客戶端以root管理員訪問時,映射為NFS服務器的匿名用戶 |
no_root_squash | 當NFS客戶端以root管理員訪問時,映射為NFS服務器的root管理員 |
all_squash | 無論NFS客戶端使用什么賬戶訪問,均映射為NFS服務器的匿名用戶 |
sync | 同時將數據寫入到內存與硬盤中,保證不丟失數據 |
async | 優先將數據保存到內存,然后再寫入硬盤;這樣效率更高,但可能會丟失數據 |
服務端192.168.10.10配置:
#1.清空iptables防火牆策略,永久保存。
iptables -F
service iptables save
#2.建立用於NFS文件共享的目錄,並設置足夠的權限確保其他人也有寫入權限。
mkdir /nfsfile
chmod -Rf 777 /nfsfile
echo "welcome to linuxprobe.com" > /nfsfile/test.txt
#3.編輯NFS服務程序的配置文件/etc/exports,把/nfsfile目錄共享給192.168.10.0/24網段內的所有主機,讓這些主機都擁有讀寫權限。
vim /etc/exports
/nfsfile 192.168.10.*(rw,sync,root_squash) #NFS客戶端地址與權限之間沒有空格
#4.重啟rpcbind和nfs服務程序,並將它們加入開機啟動項。(在使用NFS服務進行文件共享之前,需要使用RPC服務將NFS服務器的IP地址和端口號等信息發送給客戶端)
systemctl restart rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server
客戶端192.168.10.20配置:
showmount -e 192.168.10.10 #使用showmount命令查詢NFS服務器的遠程共享信息,輸出結果:/nfsfile 192.168.10.*
mkdir /liwh
vim /etc/fstab
...
192.168.10.10:/nfsfile /liwh nfs defaults 0 0 #留意共享文件夾目錄的書寫格式和Samba是不同的,目錄格式也不同。
...
mount -a
showmount命令:用於查詢NFS服務器的遠程共享信息。格式:showmount [選項] [ip地址]輸出格式為“共享的目錄名稱 允許使用客戶端地址”。
showmount命令中可用的參數以及作用
參數 | 作用 |
---|---|
-e | 顯示NFS服務器的共享列表 |
-a | 顯示本機掛載的文件資源的情況NFS資源的情況 |
-v | 顯示版本號 |
AutoFs自動掛載服務
無論是Samba服務還是NFS服務,都要把掛載信息寫入到/etc/fstab中,這樣遠程共享資源就會自動隨服務器開機而進行掛載。雖然方便,但是如果掛載的遠程資源太多,則會給網絡帶寬和服務器的硬件資源帶來很大負載。如果在資源掛載后長期不使用,也會造成服務器硬件資源的浪費。
autofs自動掛載服務與mount命令不同,autofs服務程序是一種Linux系統守護進程,當檢測到用戶試圖訪問一個尚未掛載的文件系統時,將自動掛載該文件系統。
mount命令與autofs服務的區別:
將掛載信息填入/etc/fstab文件后,系統在每次開機時都自動將其掛載;
autofs服務程序在用戶需要使用該文件系統時才去動態掛載,從而節約網絡資源和服務器的硬件資源。
安裝autofs自動掛載服務:yum install -y autofs。
autofs服務的主配置文件:/etc/auto.master。記錄要自動掛載的目錄和對應的子配置文件。更加詳細具體的掛載目錄內的掛載設備信息則記錄在用戶自定義的子配置文件中。子配置文件后綴必須為.misc。
autofs服務的子配置文件應按照“掛載目錄 掛載文件類型及權限 主機ip地址:設備名稱”的格式進行填寫。
例如:iso -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
把本機光盤設備掛載到/media/iso目錄中,可將掛載目錄寫為iso(上級目錄寫在主配置文件中),而-fstype為文件系統格式參數,iso9660為光盤設備格式,ro、nosuid及nodev為光盤設備具體的權限參數,/dev/cdrom則是定義要掛載的設備名稱。
實例4:在實例3基礎上,在客戶端安裝autofs服務,實現對服務端的nfs共享目錄的自動掛載。
#1.編輯autofs主配置文件,指定設備掛載位置的上一級目錄和對應的子配置文件。
vim /etc/auto.master
...
/nice /etc/test.misc
...
#2.編輯自定義的autofs子配置文件test.misc。
vim /etc/test.misc
nice -fstype=nfs,rw,nosuid,nodev 192.168.10.10:/nfsfile
#3.重啟autofs服務並加入開機啟動項
systemctl restart autofs
systemctl enable autofs
當用df -h查看設備掛載情況時,確認共享目錄沒有被掛載上,而且/nice目錄里根本不存在test目錄,但卻可以使用cd命令進入test目錄中,說明autofs服務配置成功。