Samba簡介與配置(匿名&本地用戶驗證)


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

實例

需求:

  1. 在server上配置SAMBA服務
  2. SAMBA服務器必須是STAFF工作組的一個成員
  3. 共享/common目錄,共享名為common
  4. 只有192.168.26.0/24域內的客戶端可以訪問common共享
  5. common共享必須是可以瀏覽的
  6. 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
  1. 在server通過samba共享目錄/storage
  2. 共享名為share
  3. 共享目錄只能被192.168.26.0/24內的用戶使用
  4. 共享目錄share可以瀏覽
  5. 用戶sarah能以讀的方式訪問此共享,密碼為tangkai
  6. 用戶kitty能以讀寫的方式訪問此共享,密碼為tangkai
  7. 此共享永久掛載在客戶機的/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: 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM