1.smb的介紹
Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,提供cifs協議,由服務器及客戶端程序構成。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它爲局域網內的不同計算機之間提供文件及打印機等資源的共享服務。SMB協議是客戶機/服務器型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。通過設置“NetBIOS over TCP/IP”使得Samba不但能與局域網絡主機分享資源,還能與全世界的電腦分享資源。
CIFS (Common Internet File System)是一個新提出的協議,它使程序可以訪問遠程Internet計算機上的文件並要求此計算機提供服務。CIFS 使用客戶/服務器模式。客戶程序請求遠在服務器上的服務器程序爲它提供服務。服務器獲得請求並返回響應。CIFS是公共的或開放的SMB協議版本,並由Microsoft使用。SMB協議在局域網上用於服務器文件訪問和打印的協議。像SMB協議一樣,CIFS在高層運行,而不像TCP/IP協議那樣運行在底層。CIFS可以看做是應用程序協議如文本傳輸協議和超文本傳輸協議的一個實現。
2.samba的安裝與啓用
服務端IP:172.25.254.104;客戶端IP:172.25.254.204
(1)服務端
yum install samba samba-common samba-client -y ##安裝samba服務軟件
systemctl start smb ##開啓samba服務
systemctl stop firewalld.service ##關閉防火牆
(2)samba的基本信息
ss -anltuple | grep smb ##查看smb佔用的端口
端口:139/tcp 139/udp 445/udp 445/tcp
主配置文件: /etc/samba/smb.conf
(3)基本的配置信息
workgroup = westos ##工作組的設定
server string= xiaofeng ##全局共享信息
host deny | allow 172.25.254.204 ##客戶端 黑|白 名單
設置172.25.254.204爲黑名單之後,客戶端就不能查看共享信息
(4)客戶端測試
yum install samba-client -y ###客戶端安裝samba-client服務
smbclient -L //172.25.254.104 ###連接172.25.254.104 共享的目錄
3.本地用戶的建立及訪問
(1)本地用戶建立
服務端:
samba用戶必須是本地用戶
useradd westos
useradd harry
smbpasswd -a westos ###把westos用戶添加到smb服務中
pdbedit -L ##列出samba用戶
pdbedit -x 用戶名 ##刪除samba用戶
(2)客戶端測試
smbclient -L //172.25.254.104 -U harry ###查看harry用戶共享信息
可以看到harry用戶的共享名稱,類型以及說明(默認共享爲家目錄)
在服務端設置的默認共享家目錄的配置文件
smbclient //172.25.254.104/harry -U harry ##進入samba服務的harry用戶
setsebool -P samba_enable_home_dirs on ##在服務端開啓訪問權限
成功訪問harry的家目錄
在服務端查看harry家目錄與客戶端看到的一致
掛載之後可以方便samba用戶使用系統命令,因爲samba命令和系統命令不太一樣;在服務端samba用戶家目錄下建立文件,samba用戶在客戶端也可以查看
(3)mount //172.25.254.104/harry /mnt/ -o username=harry,password=123 ##臨時掛載
(4)vim /etc/fstab ##永久掛載
:
//172.25.254.104/harry /mnt cifs defaults,username=harry,password=123 0 0
mount -a ##激活
在服務端harry用戶家目錄建立文件
在客戶端查看samba用戶harry的共享信息
4.共享目錄設定(服務端)
(1)當共享的目錄是用戶自己建立時
mkdir /sambadir1
semanage fcontext -a -t samba_share_t '/sambadir1(/.*)?' ##永久更改安全上下文
restorecon -RvvF /sambadir1 ##刷新
vim /etc/samba/smb.conf (不用註釋原本的系統家目錄,因爲是以DATA進入,不衝突)
:
[DATA]
comment = xiaofen
path = /sambadir1
測試(客戶端):
smbclient -L //172.25.254.104/ -U harry
smbclient //172.25.254.104/DATA -U harry
一開始不能訪問用戶自己建立的目錄,因爲不符合samba服務的安全上下文,修改安全上下文之後成功訪問
其實在服務端的配置文件中,已經給出了用戶自己建立目錄時不能訪問的解決辦法
(2)當共享的目錄是系統目錄時(系統目錄也就是系統本身擁有的目錄)
vim /etc/samba/smb.conf
:
[SYSTEMDATA]
comment = /mnt
path = /mnt
測試:
smbclient //172.25.254.104/SYSTEMDATA -U harry
可以看到沒有訪問到系統目錄,內容不符
setsebool -P samba_export_all_ro on ##和samba有關的端口全都打開,不用對特定的目錄修改安全上下文
smbclient //172.25.254.104/SYSTEMDATA -U harry 成功訪問
5.權限控制
(1)匿名用戶登陸權限開放
vim /etc/samba/smb.conf
:
guest ok = yes ##匿名用戶可以登陸
map to guest = bad user ##把所有的匿名用戶映射到guest上,以guest名稱掛載
mount //172.25.254.104/DATA /mnt -o username=guest
測試:
smbclient //172.25.254.104/DATA
(2)用戶可寫
chmod 777 /sambadir1 ###/sambadir1只對root可寫,所以給權限777
setsebool -P samba_export_all_rw on ###開啓selinux裏samba服務寫的權限
samba服務沒有給權限,不可寫
vim /etc/samba/smb.conf
:
writable = yes ##開啓寫權力
mount //172.25.254.104/DATA /mnt -o username=westos ##DATA掛載到/mnt
write list = harry ##寫的權力對harry用戶開放,開放write list = harry,設置writable = no
westos用戶不可寫,寫的權力僅對harry開放
write list = +harry ##寫的權力對harry組開放
一開始tom用戶不能寫
usermod -G harry tom ##把tom添加爲harry的從屬組,tom可以有了寫的權力
在這裏設置chmod 755 /sambadir1 ###因爲設置westos用戶爲共享的root,滿權限無法區分
admin users = westos ##設定westos用戶爲當前共享的root
創建file4,共享root爲westos(1002)
valid users = harry ##設定當前共享的有效用戶,不是有效用戶不能掛載
westos用戶不是有效用戶不能掛載
browseable = yes | no ##當前共享目錄是否隱藏(no爲隱藏,共享目錄是/DATA)
6.samba多用戶掛載()
(1)客戶端
yum install cifs-utils -y
vim /root/sambapasswd
:
username=harry
password=123
chmod 600 /root/sambapasswd ###只有超級用戶能看
mount -o credentials=/root/smbpasswd,sec=ntlmssp,multiuser //172.25.254.104/DATA /mnt
credentials=/root/smbpassword ###掛載時的用戶認證
sec=ntlmassp ###其他用戶的認證方式
multiuser ###支持其他用戶的認證方式
(2)測試(要把valid users = harry註釋,否則別的用戶都不是有效的)
ls /mnt
su - student
ls /mnt
ls: reading directory .: Permission denied
在student下
cifscreds add -u westos 172.25.254.104 ###以服務端本地用戶身份去查看
ls /mnt
touch /mnt/file9
可以看見建立file9所用到的用戶身份時samba用戶westos