企業級Linux下Samba(SMB)服務的檔案共享
CIFS協議###
CIFS 是一個新提出的協議,它使程式可以訪問遠端Internet計算機上的檔案並要求此計算機提供服務。CIFS 使用客戶/伺服器模式。客戶程式請求遠在伺服器上的伺服器程式為它提供服務。伺服器獲得請求並返回響應。CIFS是公共的或開放的SMB協議版本,並由Microsoft使用。SMB協議在區域網上用於伺服器檔案訪問和列印的協議。像SMB協議一樣,CIFS在高層執行,而不像TCP/IP協議那樣執行在底層。CIFS可以看做是應用程式協議如檔案傳輸協議和超文字傳輸協議的一個實現。
Samba###
Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟體,由伺服器及客戶端程式構成。SMB(Server Messages Block,資訊服務塊)是一種在區域網上共享檔案和印表機的一種通訊協議,它為區域網內的不同計算機之間提供檔案及印表機等資源的共享服務。SMB協議是客戶機/伺服器型協議,客戶機通過該協議可以訪問伺服器上的共享檔案系統、印表機及其他資源。通過設定"NetBIOS over TCP/IP"使得Samba不但能與區域網絡主機分享資源,還能與全世界的電腦分享資源。
SMB服務的安裝
1.為了試驗我們配置兩臺虛擬機器一個為服務端一個為客戶端
服務端我們起名字為shareserver.westos.com
客戶端我們起名字為client.westos.com
2.服務端配置
所用到的命令:
yum install samba samba-common samba-client 下載sma服務
systemctl start smb
[[email protected] ~]# systemctl stop firewalld.service 關閉防火牆
[[email protected] ~]# smbpasswd -a student 給sam服務新增使用者
New SMB password: 設定student使用者sam服務的密碼
Retype new SMB password:
Added user student.
[email protected] ~]# setenforce 0 將selinux該為警告模式
[email protected] ~]# getenforce
Permissive
[[email protected] student]# smbpasswd -x student 刪除新增的使用者
Deleted user student.
[[email protected] student]# pdbedit -L 檢視sma新增的使用者
#1.下載smb服務
#2.開啟服務
#3.關閉防火牆,共享檔案別人要拿東西,所以一般要輸出東西是火牆一定要關閉
#4.給smb服務新增使用者,此處我們新增使用者student
#5.將selinux改為警告模式,後續我們會研究在強制模式下smb的用法
#6.pdbedit -L 可以看到檢視sma新增的使用者
pdbedit -x 可以刪除sma使用者
此處我們添加了westos使用者並將他刪除,作為實驗
3.客戶端的配置
所用到的命令
[[email protected] ~]# yum install samba-client 下載sam客戶端服務
[[email protected] ~]# smbclient -L //172.25.71.100 檢視匿名使用者可以共享的檔案
[[email protected] ~]# smbclient -L //172.25.71.100 -U student 檢視student使用者共享的檔案
[[email protected] ~]# smbclient //172.25.71.100/student -U student 用student使用者登入
Enter student's password:
[[email protected] ~]# mount -o username=student,password=westos //172.25.254.149/student /mnt/ 掛載共享檔案到本機的/mnt目錄下
儲存分領 實際位置在服務段的/home/student
#1.下載客戶端服務
#2.匿名使用者檢視共享檔案
#3.以student使用者身份檢視共性檔案
#4.以student使用者身份登入,輸入密碼,密碼就是前面服務端smb服務新增的student使用者設定的密碼,進入到服務端/home/student
#5.然後你可以在服務端的/student下寫東西,客戶端就可以看到新建的檔案
#6.也可以在將共享的檔案掛載到本機的目錄下,此處我們掛載到/mnt下,可以寫入東西,在服務端就可以看到
SMB服務配置檔案,以及selinux為強制模式下的設定
服務端配置
所用程式碼:
[[email protected] student]# vim /etc/vimrc
最後一行加 set nu
[[email protected] student]# vim /etc/samba/smb.conf
89 workgroup = WSETOS 修改域名
96 hosts allow = 可加允許登入的ip
97 hosts deny = 不允許登入的ip
[[email protected] student]# setenforce 1 變為強制性
getsebool -a | grep smb smb功能各種許可權的開關
[[email protected] student]# setsebool -P samba_enable_home_dirs on
家目錄分享開啟
#1.為了方便新增配置檔案內容,我們編輯vim /etc/vimrc 最後一行加 set nu 給配置檔案加上行數
#2.編輯smb配置檔案vim /etc/samba/smb.conf 在89行的域名可以修改
#3.在客戶端用匿名使用者登入時會顯示剛才修改的域名
#4.我們將selinux改為強制性,然後再在客戶端修登入時會發現沒有權利登入
#5.我們將smb服務的家目錄可分享許可權開啟,再在客戶端登入發現可以成功
#6.可以編輯smb的配置檔案來限制許可權 vim /etc/samba/smb
hosts allow=允許訪問的ip
hosts deny= 不允許訪問的ip
SMB服務下自定義目錄共享
自建目錄共享
服務端配置
mkdir /westos 建立檔案
[email protected] student]# ls -Zd /westos/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /westos/
[[email protected] student]# semanage fcontext -a -t samba_share_t '/westos(/.*)?'
[[email protected] westos]# restorecon -RvvF /westos/
改變檔案上下文
[email protected] mnt]# vim /etc/samba/smb.conf
[linux] 名字
322 comment = westos dir share 說明
323 path = /westos 路徑
#1.先建立westos的檔案
#2.編輯smb服務的配置檔案,加上我們要分享的檔案
linux為共享出去檔案的名字,/westos為實際的路徑
#3.由於selinux為強制模式,所以在客戶端實驗時會出現許可權不夠的問題
#4.所以應該修改/westos的安全上下文讓其與smb服務匹配,讓其有許可權訪問
可以看到安全上下文改變成功
#5.在客戶端登入可以成功進入分享的檔案
系統目錄共享
在服務端配置
[email protected] westos]# vim /etc/samba/smb.conf
[mnt]
326 comment = mnt directory
327 path = /mnt 實際路徑為/mnt
[[email protected] westos]# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> on
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
[[email protected] westos]# setsebool -P samba_export_all_ro on 忽略安全上下文,共享目錄所有人可讀開啟
#1.配置smb配置檔案,加入系統目錄的路徑
#2.我們在mnt下建立檔案,發現客戶端登入發現不了
#3.由於/mnt為系統目錄所以我們不能改它的安全上下文,改了的話,其他在程式/mnt下執行動作時,會遇到麻煩,所以我們開啟smb的相關許可權
setsebool -P samba_export_all_ro on 忽略安全上下文,共享目錄所有人可讀開啟
#4.在客戶端登入時就可以看到服務端在/mnt建立的檔案了
#5.檔案共享時也可以加入其他的限定條件,如
[email protected] mnt]# vim /etc/samba/smb.conf
321 [linux]
322 comment = westos dir share
323 path = /westos
324 writable = yes 任何使用者可寫 不過要給/westos滿許可權
325 ; write list = @westos 允許westos組可以寫
326 ; valid users = +student 允許student組可以登陸
327 browseable = yes 是否可以被看見
328 admin users = student 給student使用者以root的權力執行動作
329 guest ok = yes 匿名使用者可登陸
125 map to guest = bad user 標明匿名使用者的身份
SMB多使用者認證
1.yum install cifs-utils -y 下載服務
2. vim /root/smbpass 寫入使用者名稱和密碼
username=student
password=westos
chmod 600 /root/smbpass
3. mount -o credentials=/root/smbpass,sec=ntlmssp,multiuser //172.25.71.100/linux /mnt/
credentials=/root/smbpass-本次掛載root使用者認證機制
sec=ntlmssp-多使用者掛載認證機制
multiuser-多使用者
4.[[email protected] mnt]# touch rootfile
[[email protected] mnt]# ls -l
total 1024
-rw-r--r-- 1 student student 0 Nov 24 02:15 rootfile
5.[[email protected] ~]$ cifscreds add -u lee 172.25.71.100 ##
[[email protected] mnt]$ touch studentfile
[[email protected] mnt]$ ls -l
total 1024
-rw-r--r-- 1 student student 0 Nov 24 02:15 rootfile
-rw-r--r-- 1 1001 1001 0 Nov 24 02:20 studentfile
6.cifscreds clearall 清除多使用者認證
#1.在服務端下載cifs-utils服務
為了更好實驗給/westos滿許可權
#2.在客戶端編輯一個存放登入使用者和密碼的檔案 vim /root/smbpass,並給這個檔案600,只有root使用者檢視的權利
將服務端分享的檔案掛載到/mnt下
credentials=/root/smbpass-本次掛載root使用者認證機制
sec=ntlmssp-多使用者掛載認證機制
multiuser-多使用者
在mnt下建立檔案可以看到所有人和所有組都為student使用者
當我們改變使用者進入mnt下建立檔案會顯示許可權不夠,因為客戶端的student沒有服務端smb的認證使用者機制
#3.我們在服務端加再加一個smb服務的使用者
可以看到lee使用者已經新增,他的uid為1002
4.我們再到客戶端的student使用者下
新增服務端使用者lee的smb服務的認證機制
再到/mnt下建立檔案時就會成功,並且uid和gid為1002,對應服務端lee的uid和gid
5.當我們不想需要這些認證機制時,用cifscreds clearall 清除多使用者認證