SAMBA基本介紹
概念
SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它爲局域網內的不同計算機之間提供文件及打印機等資源的共享服務。也是window下所使用的文件共享協議,我們在linux系統或者其類unix系統當中可以通過samba服務來實現SMB功能。
在linux中我們可以使用 FTP NFS這類型文件共享協議,但是對於window上比較簡單的直接打開的服務,在linux中的nfs協議來說是不能在window上使用的,這種直接將文件系統共享出來的協議爲SMB。
功能
- 通過SMB協議進行文件共享
- 通過SMB協議進行打印共享(我們可以通過在linux上通過smb配置打印服務器,爲window提供打印服務)
- 加入一個windows2000/2003/2008域環境
- 通過windows域環境進行認證操作。
SMB協議又稱爲CIFS(Common Internet File System)協議
SAMBA配置
安裝samba
已經配置好了yum倉庫,進行下列操作
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# yum install samba -y
Samba擁有兩個主服務(相關服務),對於一般使用的服務他只有一個主服務
smbd (提供samba核心功能也是使用最多的一種功能) 提供文件及打印共享服務功能,使用139/445端口
nmbd 提供Netbios(解析協議慢慢的被淘汰)支持,使用137/138端口,而對於這種協議使用較少,現在都是dns進行解析
一般作爲文件共享使用samba,則只需要smbd服務
SAMBA配置文件
SAMBA的配置文件爲/etc/samba/smb.conf
配置文件分爲:
[global] 定義全局性配置(配置samba服務的相關參數)
[homes] 定義對用戶家目錄的共享配置(其實在默認情況下不做任何設置,直接啓用服務我們就可以通過smb協議訪問所有用戶的家目錄)
[printers] 定義打印機共享配置
[global] //全局配置
workgroup = MYGROUP //定義該Samba服務器所在的工作組或者域
server string = Samba Server Version %v //設定機器的描述,當我們通過網絡鄰居訪問的時候可以在備註裏面看見這個內容,而且還可以使用%v = Samba服務的版本號。
log file = /var/log/samba/log.%m // 定義記錄文件的位置LogFileName
max log size = 50 //定義記錄文件的大小size(單位是KB,如果是0的話就不限大小)
security = user
/*定義Samba的安全級別,按從低到高分爲四級:share,user,server,domain。它們對應的驗證方式如下:
* share:沒有安全性的級別,任何用戶都可以不要用戶名和口令訪問服務器上的資源。
* user:samba的默認配置,要求用戶在訪問共享資源之前資源必須先提供用戶名和密碼進行驗證。
* server:和user安全級別類似,但用戶名和密碼是遞交到另外一個服務器去驗證,比如遞交給一臺NT服務器。如果遞交失敗,就退到user安全級。
* domain:這個安全級別要求網絡上存在一臺Windows的主域控制器,samba把用戶名和密碼遞交給它去驗證。
後面三種安全級都要求用戶在本Linux機器上也要系統帳戶。否則是不能訪問的。
*/
passdb backend = tdbsam
load printers = yes
cups options = raw
[homes] //在smb.conf文件中一般沒有對這個目錄的設定特定內容比如路徑等。當客戶機發出服務請求時,就在smb.conf文件的其它部分查找友特定內容的服務。如果沒有發現這些服務,並且提供了homes段時,那麼就搜索密碼文件得到用戶的Home目錄。通過Homes段,Samba可以得到用戶的Home目錄並使之共享。
comment = Home Directories
browseable = no
writable = yes
valid users = %S //設置登錄用戶可以訪問
valid users = MYDOMAIN\%S
[printers]
comment = All Printers
path = /var/spool/samba //path指明打印的文件隊列暫時放到/var/spool/samba目錄下。
browseable = no
guest ok = no // guest ok說明遊客也能打印
writable = no
printable = yes //指明該打印機可以打印
write list = +staff // @用來指定可以在該共享下寫入文件的用戶
主配置文件
[root@localhost ~]# vim /etc/samba/smb.conf
[global] //全局控制段
workgroup = workgroup //工作組
server string = Samba Server Version %v
security = user
encrypt passwords = yes //密碼加密
wins support = yes //wins支持
log level = 1 //日誌級別
max log size = 1000 //最大日誌kb
read only = no //可讀寫
[homes] //家目錄
browsable = no //瀏覽
map archive = yes
[printers] //打印機
path = /var/tmp //指定目錄
printable = yes //是個打印機
min print space = 2000 //空間
[test] //共享的目錄
browsable = yes //可瀏覽
read only = yes //只讀
path = /usr/local/samba/tmp //共享的服務器目錄
windows系統訪問:
\\172.24.8.130服務器地址
提示輸入用戶以及密碼
那麼我們便添加samba用戶
添加SAMBA用戶
[root@localhost ~]# useradd aaa //先添加用戶
[root@localhost ~]# useradd bbb
[root@localhost ~]# useradd ccc
[root@localhost ~]# smbpasswd -a aaa //添加samba用戶
New SMB password: //密碼均爲redhat
Retype new SMB password:
Added user aaa.
[root@localhost ~]# smbpasswd -a bbb
New SMB password:
Retype new SMB password:
Added user bbb.
[root@localhost ~]# smbpasswd -a ccc
New SMB password:
Retype new SMB password:
Added user ccc.
[root@localhost ~]# pdbedit -L //查看samba用戶
aaa:1001:
ccc:1003:
bbb:1002:
window系統訪問查看:
使用aaa用戶登陸,訪問到它的家目錄
windows系統中刪除登陸緩存信息
cmd>net use * /delete
SAMBA下的部分常用參數
用戶控制:
public =所有用戶都可以訪問 /guest ok=yes/no
map to guest = Bad User 匿名訪問
browseable = 可瀏覽(設置共享是否可遊覽,如果是no表示隱藏,通過ip+共享名進行訪問)
valid users = username,@組名 設置黑名單
writable = yes 可寫,還要看目錄權限
writable list = maomao,@GROUPNAME,+GROUPNAME
readonly = yes 只讀設置
create mask = 0644 客戶機創建文件權限
directory mask = 0744 客戶機創建目錄的權限
valid user = user1,user2,@group1 禁止登錄用戶,用戶用逗號隔開,組用@
invalid = 允許訪問控制
max connections = 最大連接數目
deadtime = 斷掉連接時間()分鐘,0爲不限制
hosts allow = 允許主機
hosts deny = 拒絕主機(兩個都寫,允許優先)
SAMBA配置案例
案例一
要求:
1、通過samba實現公司的文件交換服務器,
2、實現/public 目錄讓所有人訪問,所有人都可以寫入文件
配置:
[root@localhost ~]# vim /etc/samba/smb.conf
//再此文件最後添加如下命令
[public]
path = /public //指定路徑
public = yes //權限
comment = file //對目錄進行描述
writable =yes //可寫
[root@localhost ~]# systemctl restart smb nmb
windows下訪問:
點擊public目錄出現此種情況
原因是沒有創建public目錄,解決方法就是創建一個public目錄
[root@localhost ~]# mkdir /public
[root@localhost ~]# touch /public/{1,2,3}
windows下訪問
此時,下載文件是可行的,但是上傳仍然沒有權限,這裏滅有權限是/public目錄沒有寫的權限
[root@localhost ~]# touch /public/{1,2,3}
[root@localhost ~]# ll -d /public
drwxr-xr-x. 2 root root 30 Mar 18 04:17 /public
[root@localhost ~]# chmod 757 /public //給public目錄增加寫權限
[root@localhost ~]# ll -d /public
drwxr-xrwx. 2 root root 30 Mar 18 04:17 /public
windows下至此可以對public目錄進行上傳下載操作
案例二
要求:
1、通過samba提供一個公共文件服務器,所有人都可以訪問並寫入,但是不可以刪除和修改他人的文件。
2、技術部需要一個文件服務器,用於存放常用的軟件工具,所有人都可以訪問,但是隻有技術部可以寫入
3、每個人都可以進入自己的獨立家目錄,別人不可以訪問。
配置:
要求一
[root@localhost ~]# vim /etc/samba/smb.conf
//再此文件最後添加如下命令
[share]
path = /share
public = yes //指定共享目錄是否允許guest賬戶訪問
comment = file
writable = yes
[root@localhost ~]# mkdir /share
[root@localhost ~]# ll -d /share
drwxr-xr-x. 2 root root 6 Mar 18 05:18 /share
[root@localhost ~]# chmod 757 /share //爲目錄增加寫入權限
[root@localhost ~]# ll -d /share
drwxr-xrwx. 2 root root 6 Mar 18 05:18 /share
[root@localhost ~]# chmod o+t /share //設置特殊權限,不允許刪除和修改其他人的權限
[root@localhost ~]# ll -d /share
drwxr-xrwt. 2 root root 6 Mar 18 05:18 /share
[root@localhost ~]# touch /share/{a,b,c}
[root@localhost ~]# ll /share
total 0
-rw-r--r--. 1 root root 0 Mar 18 05:52 a
-rw-r--r--. 1 root root 0 Mar 18 05:52 b
-rw-r--r--. 1 root root 0 Mar 18 05:52 c
[root@localhost ~]# su - aaa
[aaa@localhost ~]$ touch /share/111 //aaa用戶創建文件
[aaa@localhost ~]$ exit
logout
[root@localhost ~]# ll /share
total 0
-rw-rw-r--. 1 aaa aaa 0 Mar 18 05:53 111
-rw-r--r--. 1 root root 0 Mar 18 05:52 a
-rw-r--r--. 1 root root 0 Mar 18 05:52 b
-rw-r--r--. 1 root root 0 Mar 18 05:52 c
[root@localhost ~]# su - bbb
[bbb@localhost ~]$ ll /share
total 0
-rw-rw-r--. 1 aaa aaa 0 Mar 18 05:53 111
-rw-r--r--. 1 root root 0 Mar 18 05:52 a
-rw-r--r--. 1 root root 0 Mar 18 05:52 b
-rw-r--r--. 1 root root 0 Mar 18 05:52 c
[bbb@localhost ~]$ rm /share/111 //bbb用戶不能刪除別人的文件,只可以刪除自己的
rm: remove write-protected regular empty file ‘/share/111’? y
rm: cannot remove ‘/share/111’: Operation not permitted
windows下也是不能刪除別人的文件的
要求二
[root@localhost ~]# vim /etc/samba/smb.conf
//再此文件最後添加如下命令
[soft]
path = /soft
public = yes
comment = soft
write list = @jishubu //表示技術部組的人可以寫添加技術部組將用戶加入組,並將用戶改爲samba用戶
[root@localhost ~]# mkdir /soft
[root@localhost ~]# touch /soft/{a,b,c}
[root@localhost ~]# ll /soft
total 0
-rw-r--r--. 1 root root 0 Mar 18 06:14 a
-rw-r--r--. 1 root root 0 Mar 18 06:14 b
-rw-r--r--. 1 root root 0 Mar 18 06:14 c
[root@localhost ~]# groupadd jishubu
[root@localhost ~]# gpasswd -M bbb,ccc jishubu //將bbb,ccc用戶添加至jishubu組
[root@localhost ~]# ll -d /soft
drwxr-xr-x. 2 root root 30 Mar 18 06:14 /soft
[root@localhost ~]# setfacl -m g:jishubu:rwx /soft //只允許技術部的人寫入,設置擴展權限
//也可以將/soft目錄的所屬組更改爲jishubu組,在爲/soft目錄增加寫權限
[root@localhost ~]# ll -d /soft
drwxrwxr-x+ 2 root root 30 Mar 18 06:14 /soft
[root@localhost ~]# systemctl restart smb nmb
通過windows驗證
先登錄aaa用戶,對soft目錄無權限
刪除登錄信息,再登錄bbb,或者ccc用戶上傳文件
要求三
//此要求的配置,主配置文件中已經寫出
以上是從windows主機測試SAMBA
接下來我們從LINUX客戶端測試SAMBA服務
客戶端配置
[root@localhost ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# yum install samba-client -y
[root@localhost ~]# smbclient -L //172.24.8.130 -U aaa //通過用戶aaa登錄,查看共享出去的目錄
Enter aaa's password:
Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]
Sharename Type Comment
--------- ---- -------
public Disk file
share Disk file //共享出去的目錄
soft Disk soft //共享出去的目錄
IPC$ IPC IPC Service (Samba Server Version 4.2.3)
aaa Disk Home Directories //共享出去的目錄
Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]
Server Comment
--------- -------
LOCALHOST Samba Server Version 4.2.3
Workgroup Master
--------- -------
MYGROUP LOCALHOST
WORKGROUP LAPTOP-M6SL5P3I
[root@localhost ~]# smbclient //172.24.8.130/public -U aaa //登錄使用/public目錄裏的東西
Enter aaa's password:
Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]
smb: \>
smb: \>
smb: \> ls
. D 0 Mon Mar 18 16:17:48 2019
.. DR 0 Mon Mar 18 17:18:23 2019
1 N 0 Mon Mar 18 16:17:48 2019
2 N 0 Mon Mar 18 16:17:48 2019
3 N 0 Mon Mar 18 16:17:48 2019
20469760 blocks of size 1024. 16741028 blocks available
smb: \> put /haha //上傳文件
putting file /haha as \/haha (0.0 kb/s) (average 0.0 kb/s)
smb: \> exit
可以掛載使用資源
[root@localhost ~]# mount //172.24.8.130/public /aaa -o username=aaa,password=redhat 手動掛載
[root@localhost ~]# vim /etc/fstab
再最後一行加上
//172.24.8.130/public /aaa cifs defaults,username=aaa,password=redhat 0 0 自動掛載
Multiuser機制(多用戶機制)
Multiuser機制
所需軟件包:cifs-utils
手動掛載:mount //服務器地址/共享名 掛載點
開機掛載配置/etc/fstab://服務器地址/共享名 掛載點 cifs _netdev 0 0
_netdev:網絡設備(請啓動完成網絡服務,再進行掛載此設備)
cifs: samba使用的文件系統是cifs
Samba的multiuser掛載技術
- 管理員只需作一次掛載
- 客戶端在訪問掛載點時,若需不同權限,可以臨時切換爲新的共享用戶(無需重新掛載)。
- 掛載參數需要添加“multiuser,sec=ntlmssp”,客戶機上的普通用戶可以通過cifscreds命令提交新的身份憑據。
- 在客戶端掛載Samba共享目錄,需要軟件包cifs-utils的支持。
- 爲訪問網絡資源配置開機掛載時,注意添加參數“_netdev”,表示等客戶機網絡配置可用以後才掛載對應資源。
/etc/fstab掛載參數:
//服務器地址/共享名 /掛載點 cifs username=用戶名,password=密碼,multiuser,sec=ntlmssp,_netdev 0 0
實現方式
- 掛載smb共享時啓用multiuser支持;
- 使用cifscreds臨時切換身份
掛載參數
- multiuser,提供對客戶端多個用戶身份的區分支持
- sec=ntlmssp,提供NT局域網管理安全支持
多用戶掛載參數:multiuser,sec=ntlmssp,_netdev
客戶機多用戶測試,切換共享用戶身份 - 在客戶端以普通用戶登入 :#su - 普通用戶
- 使用cifscreds提交新的用戶憑據並測試:
cifscreds add|update -u 共享用戶名 服務器地址
多用戶掛載
再服務器上通過SMB共享目錄/devops,並滿足以下要求
1、共享名爲devops
2、共享目錄devops只能被192.168.171.0網段中的客戶端使用
3、共享目錄devops必須可以被瀏覽
4、用戶xixi必須能以讀的方式訪問此共享,訪問密碼是xixi
5、用戶maomao必須能以讀寫的方式訪問此共享,訪問密碼是maomao
此共享永久掛載在192.168.171.144上的/mnt/dev/目錄,並使用用戶xixi作爲認證任何用戶可以通過用戶maomao來臨時獲取寫的權限
服務端:
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# setfacl -m u:maomao:rwx /devops/
[root@localhost ~]# mkdir /devops
[root@localhost ~]# touch /devops/{1,2,3}
[root@localhost ~]# vim /etc/samba/smb.conf
//在本文件最後添上以下內容
[devops]
path = /devops
hosts all =172.24.8.
browseable = yes
writable = no
write list =maomao
[root@localhost ~]# useradd xixi
[root@localhost ~]# useradd maomao
[root@localhost ~]# smbpasswd -a xixi
New SMB password:
Retype new SMB password:
Added user xixi.
[root@localhost ~]# smbpasswd -a maomao
New SMB password:
Retype new SMB password:
Added user maomao.
[root@localhost ~]# systemctl restart smb nmb
客戶端:
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# yum install cifs-* -y
[root@localhost ~]# umount /mnt
[root@localhost ~]# mkdir /mnt/dev
[root@localhost ~]# smbclient -L //172.24.8.130/ -U xixi
Enter xixi's password:
Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]
Sharename Type Comment
--------- ---- -------
public Disk file
share Disk file
soft Disk soft
devops Disk
IPC$ IPC IPC Service (Samba Server Version 4.2.3)
xixi Disk Home Directories
Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]
Server Comment
--------- -------
LOCALHOST Samba Server Version 4.2.3
Workgroup Master
--------- -------
MYGROUP LOCALHOST
WORKGROUP LAPTOP-M6SL5P3I
[root@localhost ~]# vim /etc/fstab
//在此文件最後添加
/ /172.24.8.130/devops /mnt/dev cifs defaults,username=xixi,password=redhat,multiuser,sec=ntlmssp 0 0
[root@localhost ~]# mount -a //掛載
[root@localhost ~]# mount //查看有沒有掛載上
/ /172.24.8.130/devops on /mnt/dev type cifs (rw,relatime,vers=1.0,sec=ntlmssp,cache=strict,multiuser,domain=LOCALHOST,uid=0,noforceuid,gid=0,noforcegid,addr=172.24.8.130,unix,posixpaths,serverino,acl,noperm,rsize=1048576,wsize=65536,actimeo=1) //可以看出,已經掛載上
驗證多用戶掛載
[root@localhost ~]# useradd xixi
[root@localhost ~]# useradd maomao
[root@localhost ~]# su - xixi
[xixi@localhost ~]$ cd /mnt/dev
[xixi@localhost dev]$ ls
ls: reading directory .: Permission denied
[xixi@localhost dev]$ cifscreds add 172.24.8.130 //提權
Password:
[xixi@localhost dev]$ ll
total 0
-rw-r--r--. 1 root root 0 Apr 10 12:02 1
-rw-r--r--. 1 root root 0 Apr 10 12:02 2
-rw-r--r--. 1 root root 0 Apr 10 12:02 3
[xixi@localhost dev]$ touch xixi
touch: cannot touch ‘xixi’: Permission denied
[xixi@localhost dev]$ exit
logout
[root@localhost ~]# su - maomao
[maomao@localhost ~]$ cd /mnt/dev
[maomao@localhost dev]$ ls
ls: reading directory .: Permission denied
[maomao@localhost dev]$ cifscreds add 172.24.8.130 //提權
Password:
[maomao@localhost dev]$ ll
total 0
-rw-r--r--. 1 root root 0 Apr 10 12:02 1
-rw-r--r--. 1 root root 0 Apr 10 12:02 2
-rw-r--r--. 1 root root 0 Apr 10 12:02 3
[maomao@localhost dev]$ touch maomao
[maomao@localhost dev]$ ll
total 0
-rw-r--r--. 1 root root 0 Apr 10 12:02 1
-rw-r--r--. 1 root root 0 Apr 10 12:02 2
-rw-r--r--. 1 root root 0 Apr 10 12:02 3
-rw-r--r--. 1 1005 1006 0 Apr 10 12:04 maomao