samba 服務 簡介 1987年,微軟公司和英特爾公司共同制定了SMB(Server Messages Block,伺服器消息塊)協議,旨在解決區域網內的文件或印表機等資源的共用問題,這也使得在多個主機之間共用文件變得越來越簡單。到了1991年,當時還在讀大學的Tridgwell為瞭解決Linux ...
samba 服務 簡介
1987年,微軟公司和英特爾公司共同制定了SMB(Server Messages Block,伺服器消息塊)協議,旨在解決區域網內的文件或印表機等資源的共用問題,這也使得在多個主機之間共用文件變得越來越簡單。到了1991年,當時還在讀大學的Tridgwell為瞭解決Linux系統與Windows系統之間的文件共用問題,基於SMB協議開發出了SMBServer服務程式。這是一款開源的文件共用軟體,經過簡單配置就能夠實現Linux系統與Windows系統之間的文件共用工作。當時,Tridgwell想把這款軟體的名字SMBServer註冊成為商標,但卻被商標局以SMB是沒有意義的字元而拒絕了申請。後來Tridgwell不斷翻看詞典,突然看到一個拉丁舞蹈的名字—Samba,而且這個熱情洋溢的舞蹈名字中又恰好包含了“SMB”,於是Samba服務程式的名字由此誕生(見圖12-1)。Samba服務程式現在已經成為在Linux系統與Windows系統之間共用文件的最佳選擇。
smb(samba):用於linux和windows之間的文件共用,可以實現匿名用戶和本地用戶之間的文件共用
工作原理:
- smb進程 控制發佈共用目錄與許可權 tcp 139 445
- nmb進程 主要用於名稱解析 udp 137 138
軟體包及配置文件瞭解
- 軟體包
[root@centos7-1 ~]# rpm -aq |grep samba //6系統上查看 samba-winbind-clients-3.6.9-164.el6.x86_64 客戶端工具 samba-3.6.9-164.el6.x86_64 服務端 samba-client-3.6.9-164.el6.x86_64 客戶端工具 samba4-libs-4.0.0-58.el6.rc4.x86_64 庫文件 samba-common-3.6.9-164.el6.x86_64 工具包 samba-winbind-3.6.9-164.el6.x86_64 客戶端工具
- 配置文件
[root@courtoap ~]# rpm -ql samba |grep etc // 6系統 /etc/logrotate.d/samba 日誌輪轉文件 /etc/pam.d/samba 驗證機制 /etc/rc.d/init.d/nmb 啟動腳本 /etc/rc.d/init.d/smb /etc/samba/smbusers 用戶別名文件 [root@centos7-1 ~]# rpm -ql samba |grep etc // 7系統 /etc/openldap/schema /etc/openldap/schema/samba.schema /etc/pam.d/samba
- 二進位命令
/usr/sbin/nmbd /usr/sbin/smbd
[root@centos7-1 ~]# rpm -ql samba-common /etc/samba 主目錄 /etc/samba/smb.conf 主配置文件 /usr/bin/pdbedit 查看smb資料庫用戶 /usr/bin/smbpasswd 設置用戶密碼 /usr/bin/testparm 檢測語法
- 瞭解主配置文件
[root@centos7-1 ~]# cat /etc/samba/smb.conf |grep -v ^#|grep -v '^;'|grep [a-z] [global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw [homes] comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes [printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/drivers write list = @printadmin root force group = @printadmin create mask = 0664 directory mask = 0775
cat /etc/samba/smb.conf |grep -v ^#|grep -v '^;'|grep [a-z]
Samba服務程式中的參數以及作用
[global] | #全局參數。 | |
workgroup = MYGROUP | #工作組名稱 | |
server string = Samba Server Version %v | #伺服器介紹信息,參數%v為顯示SMB版本號 | |
log file = /var/log/samba/log.%m | #定義日誌文件的存放位置與名稱,參數%m為來訪的主機名 | |
max log size = 50 | #定義日誌文件的最大容量為50KB | |
security = user | #安全驗證的方式,總共有4種 | |
#share:來訪主機無需驗證口令;比較方便,但安全性很差 | ||
#user:需驗證來訪主機提供的口令後才可以訪問;提升了安全性 | ||
#server:使用獨立的遠程主機驗證來訪主機提供的口令(集中管理賬戶) | ||
#domain:使用域控制器進行身份驗證 | ||
passdb backend = tdbsam | #定義用戶後臺的類型,共有3種 | |
#smbpasswd:使用smbpasswd命令為系統用戶設置Samba服務程式的密碼 | ||
#tdbsam:創建資料庫文件並使用pdbedit命令建立Samba服務程式的用戶 | ||
#ldapsam:基於LDAP服務進行賬戶驗證 | ||
load printers = yes | #設置在Samba服務啟動時是否共用印表機設備 | |
cups options = raw | #印表機的選項 | |
[homes] | #共用參數 | |
comment = Home Directories | #描述信息 | |
browseable = no | #指定共用信息是否在“網上鄰居”中可見 | |
writable = yes | #定義是否可以執行寫入操作,與“read only”相反 | |
[printers] | #印表機共用參數 | |
comment = All Printers | ||
path = /var/spool/samba | #共用文件的實際路徑(重要)。 | |
browseable = no | ||
guest ok = no 等於 public = no | #是否所有人可見,等同於"public"參數。 | |
writable = no 等於 read only = yes | ||
printable = yes |
搭建SMB服務
測試預設情況下的共用文件,也就是安裝完軟體直接啟動。不做任何配置文件的修改
服務端:192.168.122.205
[root@centos7-1 ~]# yum install samba [root@centos7-1 ~]# systemctl start smb # 6的啟動命令 service smb restart service nmb restart
客戶端測試查看服務端共用了哪些文件
客戶端:192.168.122.206
[root@centos7-2 ~]# smbclient -L 192.168.122.205 Enter root's password: //此處不輸密碼,直接回車 Anonymous login successful Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers IPC$ IPC IPC Service (Samba 4.7.1) Anonymous login successful Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] Server Comment --------- ------- CENTOS7-1 Samba 4.7.1 Workgroup Master --------- ------- SAMBA CENTOS7-1
服務端:192.168.122.205
創建一個本地用戶 [root@centos7-1 ~]# useradd smb1 將用戶添加到資料庫並且設置密碼 (server端設置) [root@centos7-1 ~]# smbpasswd -a smb1 New SMB password: Retype new SMB password: Added user smb1.
查看smb資料庫的用戶(查看是否成功添加)
[root@centos7-1 ~]# pdbedit -L smb1
smb1:1001:
客戶端:192.168.122.206
查看共用的目錄 [root@centos7-2 ~]# smbclient -L 192.168.122.205 -U smb1 Enter smb1's password: Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers IPC$ IPC IPC Service (Samba 4.7.1) smb1 Disk Home Directories Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] Server Comment --------- ------- CENTOS7-1 Samba 4.7.1 Workgroup Master --------- ------- SAMBA CENTOS7-1 通過smb1用戶登錄 [root@centos7-2 ~]# smbclient //192.168.122.205/smb1 -U smb1 Enter smb1's password: Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] smb: \> ls . D 0 Thu Nov 15 10:30:04 2018 .. D 0 Thu Nov 15 10:30:04 2018 .mozilla DH 0 Mon Oct 29 12:26:18 2018 .bash_logout H 18 Wed Aug 3 00:00:07 2016 .bash_profile H 193 Wed Aug 3 00:00:07 2016 .bashrc H 231 Wed Aug 3 00:00:07 2016 9447424 blocks of size 1024. 5601668 blocks availabl
實例一
共用本地目錄/samba/share, 並且只允許harry用戶可寫,sysadmin組的成員只讀
服務端:
第1步:創建共用目錄
[root@centos7-1 ~]# mkdir /samba/share -p [root@centos7-1 ~]# echo hello world > /samba/share/t.txt [root@centos7-1 ~]# ls /samba/share/
第2步:創建用戶和組方便後面測試
[root@centos7-1 ~]# useradd harry [root@centos7-1 ~]# groupadd sysadmin [root@centos7-1 ~]# useradd -G sysadmin u1 [root@centos7-1 ~]# useradd -G sysadmin u2
第3步:將創建的用戶添加到smb服務的資料庫並設置密碼
[root@centos7-1 ~]# smbpasswd -a harry New SMB password: Retype new SMB password: Added user harry. [root@centos7-1 ~]# smbpasswd -a u1 New SMB password: Retype new SMB password: Added user u1. [root@centos7-1 ~]# smbpasswd -a u2 New SMB password: Retype new SMB password: Added user u2. [root@centos7-1 ~]# pdbedit -L smb1:1001: u1:1004: harry:1003: u2:1005:
第4步:編輯配置文件進行相應的配置並重啟服務
[root@centos7-1 ~]# vim /etc/samba/smb.conf [share] comment = samba share // 描述 path = /samba/share // 共用的目錄 browseable = yes // 不隱藏標簽 valid users = harry,@sysadmin // 可讀用戶 write list = harry // 可寫用戶 [root@centos7-1 ~]# systemctl restart smb
客戶端測試:
查看共用目錄,可以查看到共用的share目錄
[root@centos7-2 ~]# smbclient -L 192.168.122.205 Enter root's password: Anonymous login successful Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] Sharename Type Comment --------- ---- ------- homes Disk Home Directories print$ Disk Printer Drivers share Disk samba share IPC$ IPC IPC Service (Samba 4.7.1) Anonymous login successful Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] Server Comment --------- ------- CENTOS7-1 Samba 4.7.1 Workgroup Master --------- ------- SAMBA CENTOS7-1
測試harry用戶可讀可寫
[root@centos7-2 ~]# smbclient //192.168.122.205/share -U harry Enter harry's password: Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] smb: \> ls . D 0 Thu Nov 15 11:21:44 2018 .. D 0 Thu Nov 15 11:21:20 2018 t.txt N 12 Thu Nov 15 11:21:44 2018 9447424 blocks of size 1024. 5608576 blocks available smb: \> mkdir 1 NT_STATUS_ACCESS_DENIED making remote directory \1 smb: \>
測試發現harry用戶能夠成功訪問,但是創建文件卻失敗了(原因分析:服務本身已經給定了harry用戶寫的許可權,那麼就應該是目錄沒有寫的許可權)
解決辦法:
服務端給予harry用戶讀寫執行的許可權
[root@centos7-1 ~]# setfacl -m u:harry:rwx /samba/share/
客戶端再次測試:
smb: \> mkdir 1 smb: \> ls . D 0 Thu Nov 15 11:32:35 2018 .. D 0 Thu Nov 15 11:21:20 2018 t.txt N 12 Thu Nov 15 11:21:44 2018 1 D 0 Thu Nov 15 11:32:35 2018 9447424 blocks of size 1024. 5609416 blocks available smb: \> get t.txt getting file \t.txt of size 12 as t.txt (0.1 KiloBytes/sec) (average 0.1 KiloBytes/sec) smb: \> 發現harr用戶可以創建文件,和下載文件
測試u1用戶
[root@centos7-2 ~]# smbclient //192.168.122.205/share -U u1 Enter u1's password: Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] smb: \> ls . D 0 Thu Nov 15 11:32:35 2018 .. D 0 Thu Nov 15 11:21:20 2018 t.txt N 12 Thu Nov 15 11:21:44 2018 1 D 0 Thu Nov 15 11:32:35 2018 9447424 blocks of size 1024. 5609216 blocks available smb: \> mkdir aaa NT_STATUS_MEDIA_WRITE_PROTECTED making remote directory \aaa
測試發現u1用戶能夠成功訪問並且能夠查看,但是創建文件卻失敗了。(原因:配置文件中我們只是允許了harry用戶能夠進行寫,而sysadmin組裡面的成員並沒有給寫的許可權。所以並不能創建文件)
註意:如果不加可用用戶選項,那麼表示當前samba資料庫裡面的用戶都可以訪問
實例二
基於用戶名密碼和acl的綜合訪問:
需求:
公司:uplooking
1、財務部門 /samba/upl_cw cw01財務總監有可讀可寫許可權,財務部門員工可讀,boss01對其有管理許可權。
2、市場部門 /samba/upl_sc 市場部門員工可讀可寫,公司員工可以查詢資料,boss02對其有管理許可權。
3、HR部門 /samba/upl_rs rs01HR總監可讀寫,HR部門員工可以對財務部查詢,vip用戶可以查詢
4、休息區 /samba/upl_pub 自己管理自己的文件
思路:
1、選擇哪個服務做文件共用(samba)
2、需要一臺Linux伺服器(rhel/centos)
3、根據部門創建不同的工作目錄來保存不同部門的文件
4、將目錄發佈出去
5、測試驗證
伺服器:
第1步:在伺服器上創建相應的工作目錄
[root@centos7-1 ~]# mkdir /samba/upl_{cw,sc,rs,pub} -p
第2步:創建相應的用戶和組
[root@centos7-1 ~]# groupadd uplooking [root@centos7-1 ~]# groupadd cw [root@centos7-1 ~]# groupadd rs [root@centos7-1 ~]# groupadd sc [root@centos7-1 ~]# useradd cw01 -g cw -G uplooking [root@centos7-1 ~]# useradd cw02 -g cw -G uplooking [root@centos7-1 ~]# useradd rs01 -g rs -G uplooking [root@centos7-1 ~]# useradd rs02 -g rs -G uplooking [root@centos7-1 ~]# useradd sc01 -g sc -G uplooking [root@centos7-1 ~]# useradd sc02 -g sc -G uplooking [root@centos7-1 ~]# useradd boss01 -g uplooking -G cw [root@centos7-1 ~]# useradd boss02 -g uplooking -G sc [root@centos7-1 ~]# useradd vip
第3步:編輯配置文件進行相應的配置並重啟服務
[root@centos7-1 ~]# vim /etc/samba/smb.conf [cw_share] comment= cw01財務總監有可讀可寫許可權,財務部門員工可讀,boss01對其有管理許可權 path = /samba/upl_cw valid users = @cw,boss01,@rs write list = cw01,boss01 [sc_share] comment= 市場部門員工可讀可寫,公司員工可以查詢資料,boss02對其有管理許可權 path = /samba/upl_sc valid users = @uplooking read only = yes write list = @sc,boss02 [hr_share] comment = rs01HR總監可讀寫,HR部門員工可以對財務部查詢,vip用戶可以讀寫 path = /samba/upl_rs valid users = @rs,vip write list = rs01,vip [pub] comment = 自己管理自己的文件 path = /samba/upl_pub public = yes writable = yes hosts allow = 192.168.122.0/24 [root@centos7-1 ~]# systemctl restart smb
第4步:將用戶加入到samba資料庫里
[root@centos7-1 ~]# smbpasswd -a cw01 New SMB password: Retype new SMB password: Added user cw01. [root@centos7-1 ~]# smbpasswd -a cw02 New SMB password: Retype new SMB password: Added user cw02. [root@centos7-1 ~]# smbpasswd -a rs01 New SMB password: Retype new SMB password: Added user rs01. [root@centos7-1 ~]# smbpasswd -a rs02 New SMB password: Retype new SMB password: Added user rs02. [root@centos7-1 ~]# smbpasswd -a sc01 New SMB password: Retype new SMB password: Added user sc01. [root@centos7-1 ~]# smbpasswd -a sc02 New SMB password: Retype new SMB password: Added user sc02. [root@centos7-1 ~]# smbpasswd -a boss01 New SMB password: Retype new SMB password: Added user boss01. [root@centos7-1 ~]# smbpasswd -a boss02 New SMB password: Retype new SMB password: Added user boss02. [root@centos7-1 ~]# smbpasswd -a vip New SMB password: Retype new SMB password: Added user vip. [root@centos7-1 ~]# pdbedit -L smb1:1001: u1:1004: cw01:1006: harry:1003: u2:1005: cw02:1007: rs01:1008: rs02:1009: sc01:1010: sc02:1011: boss01:1012: boss02:1013: vip:1014:
第5步:相應的acl授權
[root@centos7-1 ~]# setfacl -m u:cw01:rwx /samba/upl_cw/ [root@centos7-1 ~]# setfacl -m u:boss01:rwx /samba/upl_cw/ [root@centos7-1 ~]# setfacl -m g:cw:rx /samba/upl_cw/ [root@centos7-1 ~]# setfacl -m g:sc:rwx /samba/upl_sc/ [root@centos7-1 ~]# setfacl -m g:uplooking:rx /samba/upl_sc/ [root@centos7-1 ~]# setfacl -m u:boss02:rwx /samba/upl_sc/ [root@centos7-1 ~]# setfacl -m u:rs01:rwx /samba/upl_rs/ [root@centos7-1 ~]# setfacl -m g:rs:rx /samba/upl_rs/ [root@centos7-1 ~]# setfacl -m u:vip:rwx /samba/upl_rs/ [root@centos7-1 ~]# setfacl -m g:uplooking:rwx /samba/upl_pub/
客戶端測試驗證:
查看共用目錄
[root@centos7-2 ~]# smbclient -L 192.168.122.205 Enter root's password: Anonymous login successful Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] Sharename Type Comment --------- ---- ------- homes Disk Home Directories print$ Disk Printer Drivers share Disk samba share cw_share Disk cw01財務總監有可讀可寫許可權,財務部門員工可讀,boss01對其有管理許可權 sc_share Disk 市場部門員工可讀可寫,公司員工可以查詢資料,boss02對其有管理許可權 hr_share Disk rs01HR總監可讀寫,HR部門員工可以對財務部查詢,vip用戶可以讀寫 pub Disk 自己管理自己的文件 IPC$ IPC IPC Service (Samba 4.7.1) Anonymous login successful Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1] Server Comment --------- ------- CENTOS7-1 Samba 4.7.1 Workgroup Master --------- ------- SAMBA CENTOS7-1 詳細測試此處就省略了。。。
samba總結
- SAMBA 可以讓 Linux 與 Windows 直接進行文件系統的使用;
- SAMBA 主要架構在 NetBIOS 上發展的,且以 NetBIOS over TCP/IP 剋服NetBIOS 無法跨路由的問題;
- Samba 使用的 daemon 主要有管理分享許可權的 smbd 以及 NetBIOS 解析的nmbd
- Samba 使用的模式主要有單機的 workgroup 方式,以及網域控管的 PDC 模式;
- Samba 的主配置文件之檔名為 smb.conf
- smb.conf 內,主要區分為 [global] 伺服器整體設定與 [share] 分享的資源兩大部分
- Samba 使用者賬號控管主要的設定值為 security = {share,user,domain}等
- Samba 客戶端可使用 smbclient 以及 mount.cifs 進行網路的掛載
- 新版的 Samba 預設使用資料庫記錄帳戶信息,新增賬號用 pdbedit ,修改密碼則用 smbpasswd
- Samba 主要支持 CUPS 的印表機伺服器
- 在許可權控管方面,最容易出錯的為 SELinux 的規則與類型 (SELinux type)
- 預設情況下,服務端會將系統中的所有本地用戶的家目錄共用出去;並且不允許匿名用戶訪問
- 本地用戶都可以通過用戶名和smab資料庫的密碼去訪問當前用戶的家目錄
- samba資料庫裡面的用戶必須是當前操作系統中存在的用戶
配置文件:一般放在/etc/samba/smb.conf裡面,可以通過rpm -qc packagename查詢;編輯完配置文件可以通過testparm來進行samba的確認。
常用命令
將本地用戶加入到smb資料庫里
# smbpasswd -a stu1 // 將用戶添加到資料庫並且設置密碼
查看smb資料庫的用戶
# pdbedit -L //查看smb資料庫的用戶
查看共用目錄:客戶端通過smbclient命令查看伺服器共用出什麼目錄
smbclient -L NetBiosName -U username
linux客戶端訪問
# smbclient //192.168.122.205/homes -U smb1 // 通過smb1用戶訪問homes
清空windows緩存
cmd——>net use * /del
訪問許可權控制
控制讀寫訪問
writable = yes/no // 可寫總開關 read only = yes/no // 可讀總開關 write list = tom,@admin // 可讀 多個用戶用逗號隔開 加個@符號對組的控制 read list = tom,@admin // 可寫
對象的訪問控制
valid users = tom,@admin // 指定可用用戶 invalid users = tom,@admin // 指定不可用用戶 註意:兩個參數不要同時存在
網路訪問控制
hosts allow = 150.203.6.0/255.255.255.0 EXCEPT 150.203.6.66 // 允許哪個網路里的訪問,表示150.203.6.0這個網段除了150.203.6.66這個用戶不能訪問,別的都能訪問 hosts allow = 150.203.15.0/255.255.255.0 hosts allow = *.uplooking.com hosts deny = 192.168.1.3 vm01.example.com // 拒絕哪個網路的訪問 如果deny和allow衝突,allow優先