Samba簡介
Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。
在此之前我們已經了解了NFS,NFS與samba一樣,也是在網絡中實現文件共享的一種實現,但不幸的是,其不支持windows平台,而本章要提到的samba是能夠在任何支持SMB協議的主機之間共享文件的一種實現,當然也包括windows。
SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它為局域網內的不同計算機之間提供文件及打印機等資源的共享服務。
SMB協議是C/S型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。
Samba監聽端口:
- TCP:相對應的服務是smbd服務,其作用是提供對服務器中文件、打印資源的共享訪問。
- 139
- 445
- UDP:相對應的服務是nmbd服務,其作用是提供基於NetBIOS主機名稱的解析。
- 137
- 138
samba進程:
- nmbd:對應netBIOS
- smbd:對應cifs協議
- winbindd+ldap:對應Windows AD活動目錄
samba用戶:
- 賬戶:都是系統用戶/etc/passwd
- 密碼:Samba服務自有密碼文件,通過smbpasswd -a USERNAME命令設置
#smbpasswd命令:
-a Sys_User #添加系統用戶為samba用戶並為其設置密碼
-d #禁用用戶帳號
-e #啟用用戶帳號
-x #刪除用戶帳號
Samba安全級別:
- user:基於本地的驗證
- server:由另一台指定的服務器對用戶身份進行認證
- domain:由域控進行身份驗證
- share:匿名訪問(現版本已取消這個安全級別,匿名訪問配置方式發生了改變)
Samba配置文件:
- /etc/samba/smb.conf
- [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命令測試配置文件是否有語法錯誤,以及顯示最終生效的配置
配置Samba
配置匿名共享
#安裝Samba
[root@lynkser ~]# yum -y install samba
#編輯配置文件
[root@lynkser ~]# vim /etc/samba/smb.conf
[global]
map to guest = Bad_User
#創建共享目錄
[root@lynkser ~]# mkdir /share
[root@lynkser ~]# chmod 777 /share/
#添加共享配置
[root@lynkser ~]# vim /etc/samba/smb.conf
[lynk]
comment = lynk
path = /opt/share
browseable = yes
guest ok = yes
writable = yes
public = yes
#檢查下配置有沒有問題
[root@lynkser ~]# testparm /etc/samba/smb.conf
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$]"
Processing section "[lynk]"
Loaded services file OK.
Server role: ROLE_STANDALONE
#啟動服務
[root@lynkser ~]# systemctl start smb
[root@lynkser ~]# systemctl enable smb
#添加用戶
[root@Lynkser ~]# useradd Bad_User
[root@Lynkser ~]# smbpasswd -a Bad_User
New SMB password:
Retype new SMB password:
Added user BadUser.
#配置防火牆富規則
[root@lynkser ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.0/24 service name=samba accept' --permanent
success
[root@lynkser ~]# firewall-cmd --reload
success
#配置SElinux
[root@lynkser ~]# setsebool -P samba_enable_home_dirs on
[root@lynkser ~]# chcon -Rt samba_share_t /opt/share
在客戶端驗證服務
#安裝Samba客戶端
[root@lynk ~]# yum install -y samba-client
#配置防火牆富規則
[root@lynk ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.129 service name=samba accept' --permanent
success
[root@lynk ~]# firewall-cmd --reload
success
#查看共享的資源
[root@lynk ~]# smbclient -L 192.168.26.129 -U "Bad User"
Enter SAMBA\Bad User's password:
OS=[Windows 6.1] Server=[Samba 4.6.2]
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
lynk Disk lynk
IPC$ IPC IPC Service (Samba 4.6.2)
OS=[Windows 6.1] Server=[Samba 4.6.2]
Server Comment
--------- -------
Workgroup Master
--------- -------
#掛載Samba服務端共享文件到本地
[root@lynk ~]# mkdir /opt/share
[root@lynk ~]# mount -t cifs //192.168.26.129/lynk /opt/share -o username='Bad User'
[root@lynk ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.4G 17G 8% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.7M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 297M 108M 190M 37% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sr0 3.8G 3.8G 0 100% /cdrom
//192.168.26.129/lynk 18G 1.4G 17G 8% /opt/share
#測試文件權限
[root@lynk ~]# cd /opt/share
[root@lynk share]# touch a
[root@lynk share]# mkdir b
[root@lynk share]# ll
total 0
-rw-r--r--. 1 nobody nobody 0 Jan 14 18:23 a
drwxr-xr-x. 2 nobody nobody 0 Jan 14 18:23 b
配置用戶認證共享
#安裝samba
[root@lynkser ~]# yum -y install samba
#新建samba用戶並設置密碼
[root@lynkser ~]# useradd -M lynksmb
[root@lynkser ~]# smbpasswd -a lynksmb
New SMB password:
Retype new SMB password:
Added user lynksmb.
#將lynksmb映射為share用戶
[root@lynkser ~]# echo 'lynksmb = share' >> /etc/samba/smbusers
#編輯配置文件
[root@lynkser ~]# vim /etc/samba/smb.conf
username map = /etc/samba/smbusers
#創建共享文件並更改屬主
[root@lynkser ~]# mkdir /opt/share
[root@lynkser ~]# chown -R lynk.lynk /opt/share
#添加一個共享配置
[lynk]
comment = lynk
path = /opt/share
browseable = yes
guest ok = yes
writable = yes
write list = share
public = yes
#檢查配置文件
[root@lynkser ~]# testparm /etc/samba/smb.conf
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$]"
Processing section "[lynk]"
Loaded services file OK.
Server role: ROLE_STANDALONE
#啟動服務
[root@lynkser ~]# systemctl start smb
[root@lynkser ~]# systemctl enable smb
#配置防火牆富規則
[root@lynkser ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.0/24 service name=samba accept' --permanent
success
[root@lynkser ~]# firewall-cmd --reload
success
#配置SElinux
[root@lynkser ~]# setsebool -P samba_enable_home_dirs on
[root@lynkser ~]# chcon -Rt samba_share_t /opt/share
在客戶端驗證服務
#安裝Samba客戶端
[root@lynk ~]# yum install -y samba-client
#配置防火牆富規則
[root@lynk ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.129 service name=samba accept' --permanent
success
[root@lynk ~]# firewall-cmd --reload
success
#查看共享資源
[root@lynk ~]# smbclient -L 192.168.26.129 -U share
Enter SAMBA\share's password:
Domain=[LYNKSER] OS=[Windows 6.1] Server=[Samba 4.6.2]
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
lynk Disk lynk
IPC$ IPC IPC Service (Samba 4.6.2)
lynksmb Disk Home Directories
Domain=[LYNKSER] OS=[Windows 6.1] Server=[Samba 4.6.2]
Server Comment
--------- -------
Workgroup Master
--------- -------
#掛載Samba服務端共享文件到本地
[root@lynk ~]# mkdir /opt/share
[root@lynk ~]# mount -t cifs //192.168.26.129/lynk /opt/share/ -o username=share,password=wasdjkl
[root@lynk ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.4G 17G 8% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.7M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 297M 108M 190M 37% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sr0 3.8G 3.8G 0 100% /cdrom
//192.168.26.129/lynk 18G 1.4G 17G 8% /opt/share
#測試文件權限
[root@lynk ~]# cd /opt/share
[root@lynk share]# touch a
[root@lynk share]# mkdir b
實例
需求:
- 在server上配置SAMBA服務
- SAMBA服務器必須是STAFF工作組的一個成員
- 共享/common目錄,共享名為common
- 只有192.168.26.0/24域內的客戶端可以訪問common共享
- common共享必須是可以瀏覽的
- natasha可以瀏覽共享中的內容,驗證密碼為tangkai
[root@lynkser ~]# yum install -y samba-*
[root@lynkser ~]# vim /etc/samba/smb.conf
workgroup = STAFF
[common]
path = /common
browseable = yes
[root@lynkser samba]# mkdir /common
[root@lynkser samba]# systemctl mask iptables.service ebtables.service
Created symlink from /etc/systemd/system/iptables.service to /dev/null.
Created symlink from /etc/systemd/system/ebtables.service to /dev/null.
[root@lynkser samba]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.0/24 service
name=samba accept' --permanent
success
[root@lynkser samba]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.0/24 service name=samba-client accept' --permanent
success
[root@lynkser samba]# firewall-cmd --reload
success
[root@lynkser samba]# useradd natasha
[root@lynkser samba]# smbpasswd -a natasha
New SMB password:
Retype new SMB password:
Added user natasha.
[root@lynkser samba]# setfacl -m u:natasha:r-x /common
[root@lynkser samba]# setsebool -P samba_enable_home_dirs 1
[root@lynkser samba]# chcon -Rt samba_share_t /common
[root@lynkser samba]# systemctl start smb nmb
[root@lynkser samba]# systemctl enable smb nmb
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.
[root@lynk ~]# yum install -y samba-client*
[root@lynk ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.129 service name=samba-client accept' --permanent
success
[root@lynk ~]# firewall-cmd --reload
success
[root@lynk ~]# mount -t cifs -o username=natasha,password=tangkai //192.168.26.129/common /mnt
[root@lynk ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.4G 17G 8% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.7M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 297M 108M 190M 37% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sr0 3.8G 3.8G 0 100% /cdrom
//192.168.26.129/common 18G 1.4G 17G 8% /mnt
[root@lynk ~]# cd /mnt
[root@lynk mnt]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 15 00:04 aa
- 在server通過samba共享目錄/storage
- 共享名為share
- 共享目錄只能被192.168.26.0/24內的用戶使用
- 共享目錄share可以瀏覽
- 用戶sarah能以讀的方式訪問此共享,密碼為tangkai
- 用戶kitty能以讀寫的方式訪問此共享,密碼為tangkai
- 此共享永久掛載在客戶機的/mnt/dev目錄,並使用用戶sarah進行認證,任何用戶可以臨時通過kitty獲得讀寫權限
[root@lynkser common]# mkdir /storage
[root@lynkser common]# chcon -Rt samba_share_t /storage
[root@lynkser common]# adduser sarah
[root@lynkser common]# adduser kitty
[root@lynkser common]# smbpasswd -a sarah
New SMB password:
Retype new SMB password:
Added user sarah.
[root@lynkser common]# smbpasswd -a kitty
New SMB password:
Retype new SMB password:
Added user kitty.
[root@lynkser common]# setfacl -m u:sarah:r-x /storage
[root@lynkser common]# setfacl -m u:kitty:rwx /storage
[root@lynkser common]# vim /etc/samba/smb.conf
[common]
path = /common
browseable = yes
valid user = natasha
[share]
path = /storage
browseable = yes
valid user = sarah,kitty
writable = no
write list = kitty
[root@lynkser common]# systemctl reload smb nmb
[root@lynk /]# umount /mnt
[root@lynk /]# mkdir /mnt/dev
[root@lynk /]# vim /etc/fstab
//192.168.26.129/share /mnt/dev cifs multiuser,username=sarah,password=tangkai,sec=ntlmssp 0 0
[root@lynk /]# vim /etc/fstab
[root@lynk /]# yum -y install cifs-utils*
[root@lynk /]# ls /home
lynk
[root@lynk /]# su - lynk
[lynk@lynk ~]$ cifscreds add -u kitty 192.168.26.129
Password:
