使用Samba或NFS實現文件共享

學習總結所用《 Linux就該這麼學 》

Samba文件共享服務

  • Samba服務程序是由Tridgwell基於SMB(Server Messages Block,服務器消息塊)協議開發的

安裝

# yum install samba

配置文件去掉多餘註釋

# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
# cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf
# cat /etc/samba/smb.conf
[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

配置共享資源

  1. 創建用於訪問共享資源的賬戶信息
# id yanji
uid=1000(yanji) gid=1000(yanji) groups=1000(yanji)
# pdbedit -a -u yanji
new password:  (輸入該賬戶在Samba服務數據庫中的密碼)
retype new password:  (再次確認密碼)
Unix username:        yanji
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-464225859-96889490-2454274357-1000
Primary Group SID:    S-1-5-21-464225859-96889490-2454274357-513
Full Name:            yanji
Home Directory:       \\localhost\yanji
HomeDir Drive:        
Logon Script:         
Profile Path:         \\localhost\yanji\profile
Domain:               LOCALHOST
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          Wed, 06 Feb 2036 23:06:39 CST
Kickoff time:         Wed, 06 Feb 2036 23:06:39 CST
Password last set:    Wed, 25 Sep 2019 21:56:52 CST
Password can change:  Wed, 25 Sep 2019 21:56:52 CST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

pdbedit命令用於管理SMB服務程序的賬戶信息數據庫,其參數以及作用:

參數 作用
-a 用戶名 建立Samba用戶
-x 用戶名 刪除Samba用戶
-L 列出用戶列表
-Lv 列出用戶詳細信息的列表
  1. 創建用於共享資源的文件目錄
# mkdir /home/database
# chown -Rf yanji:yanji /home/database
# semanage fcontext -a -t samba_share_t /home/database
# 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
  1. 設置SELinux服務與策略,使其允許通過Samba服務程序訪問普通用戶家目錄
# 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
# setsebool -P samba_enable_home_dirs on
  1. 在Samba服務程序的主配置文件中寫入共享信息
# 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
[homes]
        comment = Home Directories
        path = /home/database
        browseable = no
        writable = yes
  1. 重啓smb服務並加入開機啓動項,清空iptables防火牆
# vim /etc/samba/smb.conf
# vim /etc/samba/smb.conf
# systemctl restart smb
# systemctl enable smb
ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user.target.wants/smb.service'
# iptables -F

Window掛載共享

  1. 在Windows系統中訪問共享資源
    在運行命令框中輸入 兩個反斜槓+Samba共享服務器的IP地址
    在Windows系統中訪問共享資源
    訪問Samba共享服務時,提示出錯
    訪問Samba共享服務時,提示出錯
    成功訪問Samba共享服務:
    成功訪問Samba共享服務

Linux掛載共享

  1. 在Linux客戶端RedHat6.8安裝支持文件共享服務的軟件包(cifs-utils)
# yum install cifs-utils
  1. 在Linux客戶端編寫認證文件auth.smb(Samba服務的用戶名、密碼、共享域),並修改權限爲:僅root管理員讀寫
# vim auth.smb
username=yanji
password=yanji123 
domain=MYGROUP
  1. 在Linux客戶端創建用於掛載Samba服務共享資源的目錄,並把掛載信息寫入到/etc/fstab文件,確保共享掛載信息在服務器重啓後依然生效
# echo "//192.168.40.131/yanji /database cifs credentials=/root/auth.smb 0 0" >> /etc/fstab 
# mount -a
  1. 進入到掛載目錄/database可看到Windows系統訪問Samba服務程序時留下來的文件
# ll /database/
總用量 4
-rwxr--r-- 1 1000 1000 10 925 23:08 test.txt
# cat /database/test.txt 
test
test

NFS網絡文件系統

  • 共享文件的主機都是Linux系統時,推薦在客戶端部署NFS服務來共享文件
  • NFS(網絡文件系統)服務可以將遠程Linux系統上的文件共享資源掛載到本地主機的目錄上,從而使得本地主機(Linux客戶端)基於TCP/IP協議,像使用本地主機上的資源那樣讀寫遠程Linux系統上的共享文件
  • NFS服務程序的配置文件爲/etc/exports,默認情況下里面沒有任何內容

用於配置NFS服務程序配置文件的參數:

參數 作用
ro 只讀
rw 讀寫
root_squash 當NFS客戶端以root管理員訪問時,映射爲NFS服務器的匿名用戶
no_root_squash 當NFS客戶端以root管理員訪問時,映射爲NFS服務器的root管理員
all_squash 無論NFS客戶端使用什麼賬戶訪問,均映射爲NFS服務器的匿名用戶
sync 同時將數據寫入到內存與硬盤中,保證不丟失數據
async 優先將數據保存到內存,然後再寫入硬盤;這樣效率更高,但可能會丟失數據
  1. 安裝NFS服務
# yum install nfs-utils
  1. 在NFS服務器上建立用於NFS文件共享的目錄,並設置足夠的權限確保其他人也有寫入權限
# mkdir /nfsfile
# chmod -Rf 777 /nfsfile
# echo "This is NFS" > /nfsfile/readme
  1. /nfsfile目錄共享給192.168.40.0/24網段內的所有主機NFS客戶端地址與權限之間沒有空格
# vim /etc/exports
/nfsfile 192.168.40.*(rw,sync,root_squash)
  1. 啓動和啓用NFS服務程序
    使用NFS服務進行文件共享之前,需要使用RPC(Remote Procedure Call,遠程過程調用)服務將NFS服務器的IP地址和端口號等信息發送給客戶端
# systemctl restart rpcbind
# systemctl enable rpcbind
# systemctl start nfs-server
# systemctl enable nfs-server
ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'
  1. NFS客戶端查詢NFS服務器的遠程共享信息
# showmount -e 192.168.40.131
Export list for 192.168.40.131:
/nfsfile 192.168.40.*

showmount命令中可用的參數以及作用:

參數 作用
-e 顯示NFS服務器的共享列表
-a 顯示本機掛載的文件資源的情況NFS資源的情況
-v 顯示版本號
  1. 在NFS客戶端創建一個掛載目錄
    -t:指定掛載的文件系統的類型,後面是服務器的IP地址服務器上的共享目錄要掛載到本地系統(即客戶端)的目錄
# mkdir  /nfsfile
# mount -t nfs 192.168.40.131:/nfsfile /nfsfile
  1. 查看NFS共享文件,爲使服務一直有效,將其寫入到fstab文件中
# cat /nfsfile/readme 
This is NFS
# echo "192.168.40.131:/nfsfile /nfsfile nfs defaults 0 0" >> /etc/fstab

AutoFs自動掛載服務

  • 掛載的遠程資源太多,會給網絡帶寬和服務器的硬件資源帶來很大負載
  • 資源掛載後長期不使用,也會造成服務器硬件資源的浪費
  • autofs服務程序是一種Linux系統守護進程,當檢測到用戶試圖訪問一個尚未掛載的文件系統時,將自動掛載該文件系統
  1. 安裝autofs服務
# yum install -y autofs
  1. 在autofs服務的主配置文件中寫入掛載目錄,後綴建議以.misc結束
# vim /etc/auto.master
...
/media /etc/iso.misc
/misc /etc/auto.misc
...
  1. 編輯子配置文件
    -fstype:文件系統格式參數,iso9660爲光盤設備格式
    ro、nosuid及nodev:光盤設備具體的權限參數
    /dev/cdrom:定義要掛載的設備名稱
# vim /etc/auto.master
iso   -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
  1. 驗證autofs服務
    先查看當前的光盤設備掛載情況,確認光盤設備沒有被掛載上,/media目錄中也沒有iso子目錄,cdiso子目錄時,光盤設備被立即自動掛載,順利查看到了光盤的內容
# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   18G  3.1G   15G  18% /
devtmpfs               985M     0  985M   0% /dev
tmpfs                  994M   84K  994M   1% /dev/shm
tmpfs                  994M  8.9M  986M   1% /run
tmpfs                  994M     0  994M   0% /sys/fs/cgroup
/dev/sda1              497M  119M  379M  24% /boot

# cd /media/
# ls
# cd iso
# ls
addons  EULA  images    LiveOS      Packages       repodata                 RPM-GPG-KEY-redhat-release
EFI     GPL   isolinux  media.repo  release-notes  RPM-GPG-KEY-redhat-beta  TRANS.TBL
# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   18G  3.1G   15G  18% /
devtmpfs               985M     0  985M   0% /dev
tmpfs                  994M   84K  994M   1% /dev/shm
tmpfs                  994M  8.9M  986M   1% /run
tmpfs                  994M     0  994M   0% /sys/fs/cgroup
/dev/sda1              497M  119M  379M  24% /boot
/dev/sr0               3.5G  3.5G     0 100% /media/iso
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章