samba概述
Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。
在此之前我們已經瞭解了NFS,NFS與samba一樣,也是在網絡中實現文件共享的一種實現,但不幸的是,其不支持windows平臺,而本章要提到的samba是能夠在任何支持SMB協議的主機之間共享文件的一種實現,當然也包括windows。
SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它爲局域網內的不同計算機之間提供文件及打印機等資源的共享服務。
SMB協議是C/S型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。
Samba監聽端口有:
TCP | UDP |
---|---|
139 445 |
137 138 |
tcp端口相對應的服務是smbd服務,其作用是提供對服務器中文件、打印資源的共享訪問。
udp端口相對應的服務是nmbd服務,其作用是提供基於NetBIOS主機名稱的解析。
samba進程:
進程 | 對應 |
---|---|
nmbd | 對應netbios |
smbd | 對應cifs協議 |
winbindd + ldap | 對應Windows AD活動目錄 |
samba用戶:
帳號 | 密碼 |
---|---|
都是系統用戶 /etc/passwd |
Samba服務自有密碼文件 通過smbpasswd -a USERNAME命令設置 |
//smbpasswd命令:
-a Sys_User //添加系統用戶爲samba用戶併爲其設置密碼
-d //禁用用戶帳號
-e //啓用用戶帳號
-x //刪除用戶帳號
[root@localhost ~]# yum -y install samba-*
[root@localhost ~]# useradd tom
[root@localhost ~]# smbpasswd -a tom
New SMB password:
Retype new SMB password:
Added user tom.
Samba安全級別:
Samba服務器的安全級別有三個,分別是user,server,domain
安全級別 | 作用 |
---|---|
user | 基於本地的驗證 |
server | 由另一臺指定的服務器對用戶身份進行認證 |
domain | 由域控進行身份驗證 |
以前的samba版本支持的安全級別有四個,分別是share,user,server,domain
share是用來設置匿名訪問的,但現在的版本已經不支持share了,但是還是可以實現匿名訪問的
只是配置方式變了
samba配置文件:
/etc/samba/smb.conf(主配置文件)
samba三大組成 | 作用 |
---|---|
[global] | 全局配置,此處的設置項對整個samba服務器都有效 |
[homes] | 宿主目錄共享設置,此處用來設置Linux用戶的默認共享,對應用戶的宿主目錄。 當用戶訪問服務器中與自己用戶名同名的共享目錄時,通過驗證後將會自動映射到該用戶的宿主目錄中 |
[printers] | 打印機共享設置 |
常用配置文件參數:
參數 | 作用 |
---|---|
workgroup | 表示設置工作組名稱 |
server string |
表示描述samba服務器 |
security | 表示設置安全級別,其值可爲share、user、server、domain |
passdb backend |
表示設置共享帳戶文件的類型,其值可爲tdbsam(tdb數據庫文件)、ldapsam(LDAP目錄認證)、 smbpasswd(兼容舊版本samba密碼文件) |
comment | 表示設置對應共享目錄的註釋,說明信息,即文件共享名 |
browseable | 表示設置共享是否可見 |
writable | 表示設置目錄是否可寫 |
path | 表示共享目錄的路徑 |
guest ok | 表示設置是否所有人均可訪問共享目錄 |
public | 表示設置是否允許匿名用戶訪問 |
write list | 表示設置允許寫的用戶和組,組要用@表示,例如 write list = root,@root |
valid users | 設置可以訪問的用戶和組,例如 valid users = root,@root |
hosts deny | 設置拒絕哪臺主機訪問,例如 hosts deny = 192.168.72.1 |
hosts allow | 設置允許哪臺主機訪問,例如 hosts allow = 192.168.72.2 |
printable | 表示設置是否爲打印機 |
//測試配置文件是否有語法錯誤,以及顯示最終生效的配置:使用testparm命令
[root@localhost ~]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
Server role: ROLE_STANDALONE
[root@node01-linux ~]# systemctl status smb 查看服務狀態
[root@node01-linux ~]# systemctl status nmb
samba訪問
環境說明:
服務端 | 客戶端 |
---|---|
node01 192.168.67.131 |
node02 192.168.67.132 |
[root@node01-linux ~]# yum -y install samba* #安裝所有的包
[root@node01-linux ~]# systemctl stop firewalld
[root@node02-linux ~]# yum -y install samba-client #安裝客戶端包
[root@node01-linux ~]# useradd -r -M -s /sbin/nologin tom #創建一個系統用戶
[root@node01-linux ~]# smbpasswd -a tom #添加tom系統用戶爲samba用戶併爲其設置密碼
[root@node01-linux samba]# useradd zhangshan
[root@node01-linux samba]# smbpasswd -a zhangshan
[root@node01-linux ~]# systemctl enable --now smb nmb #啓動smb,nmb服務
[root@node01-linux samba]# vim smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
[global]
workgroup = SAMBA #表示設置工作組名稱
security = user #表示設置安全級別,其值可爲share、user、server、domain
passdb backend = tdbsam #表示設置共享帳戶文件的類型,其值可爲tdbsam(tdb數據庫文件)、ldapsam(LDAP目錄認證)、smbpasswd(兼容舊版本samba密碼文件)
printing = cups #打印
printcap name = cups #打印名稱
load printers = yes #加載打印機
cups options = raw #選項
[runtime]
comment = runtime #表示設置對應共享目錄的註釋,說明信息,即文件共享名
browseable = yes #表示設置共享是否可見
writable = no #表示設置目錄是否可寫
valid users = jerry,zhangshan #設置可以訪問的用戶和組,例如 valid users = root,@root
write list = zhangshan #表示設置允許寫的用戶和組,組要用@表示,例如 write list = root,@root
path = /opt #表示共享目錄的路徑
hosts deny = 192.168.67.133 #設置拒絕哪臺主機訪問,例如 hosts deny = 192.168.72.1
hosts allow = 192.168.67.132 #設置允許哪臺主機訪問,例如 hosts allow = 192.168.72.2
[root@node01-linux samba]# systemctl restart smb nmb #重啓smb nmb服務
[root@node01-linux samba]# echo 'hello world' > /opt/abc
[root@node01-linux samba]# ls /opt/
abc
[root@node01-linux samba]# setfacl -m u:zhangshan:rwx /opt/ #設置zhangshan用戶對opt目錄有rwx權限
`//查看samba服務器有哪些共享資源`
[root@node02-linux ~]# smbclient -L 192.168.67.131 -U zhangshan
Enter SAMBA\zhangshan's password:
Sharename Type Comment
--------- ---- -------
runtime Disk runtime
IPC$ IPC IPC Service (Samba 4.10.4)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
SAMBA NODE01-LINUX
WORKGROUP LAPTOP-6AKE6Q6L
`//交互式訪問某共享資源`
[root@node02-linux ~]# smbclient //192.168.67.131/runtime -U tom
Enter SAMBA\tom's password:
tree connect failed: NT_STATUS_ACCESS_DENIED
[root@node02-linux ~]# smbclient //192.168.67.131/runtime -U zhangshan
Enter SAMBA\zhangshan's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Fri May 15 11:44:20 2020
.. D 0 Tue May 12 11:46:52 2020
abc N 12 Fri May 15 11:44:20 2020
8374272 blocks of size 1024. 7131200 blocks available
smb: \> exit
[root@node02-linux ~]#
`//基於掛載的方式訪問`
[root@node02-linux ~]# mkdir /opt/smb
[root@node02-linux ~]# mount -t cifs //192.168.67.131/runtime /opt/smb -o username=zhangshan,password=123456
[root@node02-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.2G 6.9G 15% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.6M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
//192.168.67.131/runtime 8.0G 1.2G 6.9G 15% /opt/smb
[root@node02-linux ~]# cd /opt/smb/
[root@node02-linux smb]# ls
abc
[root@node02-linux smb]# rm -f abc
[root@node02-linux smb]# touch 111
[root@node02-linux smb]# ll
total 0
-rw-r--r--. 1 1001 1001 0 May 15 16:10 111
[root@node01-linux opt]# ll
total 0
-rw-r--r-- 1 zhangshan zhangshan 0 May 15 16:10 111
`永久掛載`
[root@node02-linux ~]# umount /opt/smb/
[root@node02-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.2G 6.9G 15% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.6M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
[root@node02-linux ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 12 11:40:49 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=b81f2ae0-a658-4c1f-bd24-90d9c7f28bcc /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
//192.168.67.131/runtime /opt/smb cifs defaults,username=zhangshan,password=123456 0 0
[root@node02-linux ~]# mount -a
[root@node02-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.2G 6.9G 15% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.6M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
//192.168.67.131/runtime 8.0G 1.2G 6.9G 15% /opt/smb
實例
配置用戶認證共享
`//使用yum命令安裝samba服務器`
[root@localhost ~]# yum -y install samba-*
`//映射共享目錄`
`//創建用戶zhang`
[root@node01-linux ~]# useradd -M zhang
`//爲zhang用戶創建smb共享密碼`
[root@node01-linux ~]# smbpasswd -a zhang
New SMB password:
Retype new SMB password:
Added user zhang.
`//假設這裏映射zhang用戶爲share用戶,那麼就要在/etc/samba/smbusers文件中添加如下內容`
[root@node01-linux ~]# echo 'zhang = share' > /etc/samba/smbusers
[root@node01-linux samba]# ls
lmhosts smb.conf smb.conf.example smbusers
[root@node01-linux samba]# mv smbusers .smbusers #隱藏映射映射文件
[root@node01-linux samba]# ls
lmhosts smb.conf smb.conf.example
`//在全局配置中添加如下內容`
[root@node01-linux samba]# vim smb.conf
[global]
workgroup = SAMBA
security = user
username map = /etc/samba/.smbusers #添加此行內容
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[runtime]
comment = runtime
browseable = yes
writable = no
valid users = jerry,zhangshan
write list = zhangshan
path = /opt
`//創建一個共享目錄zhang`
[root@node01-linux samba]# mkdir /opt/runtime
[root@node01-linux samba]# chown -R zhang.zhang /opt/runtime/
[root@node01-linux samba]# ll /opt/
total 0
-rw-r--r-- 1 zhangshan zhangshan 0 May 15 16:10 111
-rw-r--r-- 1 root root 0 May 15 16:07 abc
drwxr-xr-x 2 zhang zhang 6 May 15 16:44 runtime
`//配置共享`
[root@node01-linux samba]# vim smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
[global]
workgroup = SAMBA
security = user
username map = /etc/samba/.smbusers
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[runtime]
comment = runtime
browseable = yes
writable = no
valid users = zhang
write list = zhang
path = /opt/runtime
`//重啓smb nmb服務`
[root@node01-linux samba]# systemctl restart smb nmb
`//啓動smb服務`
[root@node01-linux samba]# systemctl start smb
`//重啓smb服務`
[root@node01-linux samba]# systemctl restart smb
`//重新加載smb服務`
[root@node01-linux samba]# systemctl reload smb
`//設置smb服務隨系統啓動而啓動`
[root@node01-linux samba]# systemctl enable smb
`//客戶端查看samba服務器有哪些共享資源`
[root@node02-linux ~]# smbclient -L 192.168.67.131 -U share
Enter SAMBA\share's password:
Sharename Type Comment
--------- ---- -------
runtime Disk runtime
IPC$ IPC IPC Service (Samba 4.10.4)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
SAMBA NODE01-LINUX
[root@node02-linux ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 12 11:40:49 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=b81f2ae0-a658-4c1f-bd24-90d9c7f28bcc /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
//192.168.67.131/runtime /media cifs defaults,username=share,password=123456 0 0
[root@node02-linux ~]# mount -a
[root@node02-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.2G 6.9G 15% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.6M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
//192.168.67.131/runtime 8.0G 1.2G 6.9G 15% /media
`//驗證`
[root@node02-linux ~]# cd /media/
[root@node02-linux media]# ls
[root@node02-linux media]# touch runtime
[root@node02-linux media]# ll
total 0
-rw-r--r--. 1 1002 1002 0 May 15 17:16 runtime
[root@node01-linux ~]# cd /opt/runtime/
[root@node01-linux runtime]# ls
runtime
[root@node01-linux ~]# id zhang
uid=1002(zhang) gid=1002(zhang) groups=1002(zhang)
配置匿名共享
`//使用yum命令安裝samba服務器`
[root@localhost ~]# yum -y install samba-*
`//在全局配置中添加如下內容`
[root@node01-linux samba]# vim smb.conf
[global]
workgroup = SAMBA
security = user
map to guest = Bad User
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[runtime]
comment = runtime
browseable = yes
path = /opt/anon
public = yes
guest = yes
writable = yes
[root@node01-linux samba]# mkdir /opt/anon #創建匿名共享目錄/opt/anon
[root@node01-linux samba]# chmod 777 /opt/anon/ #權限777 所有人都能寫
[root@node01-linux samba]# systemctl restart smb nmb
[root@node02-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.2G 6.9G 15% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.6M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
//192.168.67.131/runtime 8.0G 1.2G 6.8G 15% /opt/smb
//192.168.67.131/runtime 8.0G 1.2G 6.8G 15% /media
[root@node02-linux ~]# umount /media #先卸載
[root@node02-linux ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 12 11:40:49 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=b81f2ae0-a658-4c1f-bd24-90d9c7f28bcc /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
//192.168.67.131/runtime /media cifs defaults,username=BadUser 0 0
[root@node02-linux ~]# mount -a
Password for BadUser@//192.168.67.131/runtime:
[root@node02-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.2G 6.9G 15% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.6M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
//192.168.67.131/runtime 8.0G 1.2G 6.8G 15% /opt/smb
//192.168.67.131/runtime 8.0G 1.2G 6.8G 15% /media
`//驗證`
[root@node02-linux ~]# cd
[root@node02-linux ~]# cd /media/
[root@node02-linux media]# ls
[root@node02-linux media]# touch abc
[root@node02-linux media]# ll
total 0
-rw-r--r--. 1 nobody nobody 0 May 15 17:40 abc
[root@node01-linux ~]# cd /opt/anon/
[root@node01-linux anon]# ll
total 0
-rw-r--r-- 1 nobody nobody 0 May 15 17:40 abc
[root@node01-linux anon]# id nobody #匿名用戶
uid=99(nobody) gid=99(nobody) groups=99(nobody)