Samba簡介
- Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟體,由伺服器及客戶端程式構成。SMB(Server Messages Block,資訊服務塊)是一種在區域網上共享檔案和印表機的一種通訊協議,它為區域網內的不同計算機之間提供檔案及印表機等資源的共享服務。SMB協議是客戶機/伺服器型協議,客戶機通過該協議可以訪問伺服器上的共享檔案系統、印表機及其他資源。通過設定“NetBIOS over TCP/IP”使得Samba不但能與區域網路主機分享資源,還能與全世界的電腦分享資源。
- Samba最大的功能就是可以用於Linux與windows系統直接的檔案共享和列印共享,Samba既可以用於windows與Linux之間的檔案共享,也可以用於Linux與Linux之間的資源共享。
- Samba由兩個主要程式組成,它們是smbd和nmbd。這兩個守護程式在伺服器啟動到停止期間持續執行,功能各異。Smbd和nmbd使用的全部配置資訊全都儲存在smb.conf檔案中。Smb.conf向smbd和nmbd兩個守護程式說明輸出什麼以便共享,共享輸出給誰及如何進行輸出。
- nmbd :這個 daemon 是用來管理工作組啦、NetBIOS name 啦等等的解析。主要利用 UDP 協議開啟 port 137, 138 來負責名稱解析的任務;
- smbd :這個 daemon 的主要功能就是用來管理 SAMBA 主機分享的目錄、檔案與印表機等等。 主要利用可靠的 TCP 協議來傳輸資料,開放的埠為 139 及 445(不一定存在) 。
- Samba提供了基於CIFS的四個服務:檔案和列印服務、授權與被授權、名稱解析、瀏覽服務。前兩項服務由smbd提供,後兩項服務則由nmbd提供。 簡單地說,smbd程式的作用是處理到來的SMB軟體包,為使用該軟體包的資源與Linux進行協商,nmbd程式使主機(或工作站)能瀏覽Linux伺服器。
在本教程中,將展示如何在CentOS 7上安裝Samba並將其配置為獨立伺服器,以通過網路在不同作業系統之間提供檔案共享。
環境準備
屬性 | Samba服務端 | Samba客戶端 |
節點 | wencheng-smb | windows10 |
系統 | CentOS Linux release 7.5.1804 (Minimal) | windows10 企業版 |
核心 | 3.10.0-862.el7.x86_64 | windows10 企業版2019 x64 |
IP地址 | 172.16.70.185 | 172.16.70.50 |
SELinux | setenforce 0 | disabled |
檢查安裝Samba。
[root@wencheng-smb ~]# rpm -qa | grep samba [root@wencheng-smb ~]# yum install -y samba [root@wencheng-smb ~]# smbd -V Version 4.10.16
設定防火牆允許Samba策略。
[root@wencheng-smb ~]# firewall-cmd --add-service samba --permanent [root@wencheng-smb ~]# firewall-cmd --zone=public --add-port=137/udp --permanent [root@wencheng-smb ~]# firewall-cmd --zone=public --add-port=138/udpp --permanent [root@wencheng-smb ~]# firewall-cmd --zone=public --add-port=139/tcp --permanent [root@wencheng-smb ~]# firewall-cmd --zone=public --add-port=445/tcp --permanent [root@wencheng-smb ~]# firewall-cmd --reload [root@wencheng-smb ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: ssh dhcpv6-client samba ports: 139/tcp 137/tcp 138/tcp 445/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
情景一:配置匿名訪問, 任何人都可以訪問的共享目錄(允許上傳、刪除、修改檔案)。
- 配置Samba服務檔案/etc/samba/smb.conf,其他配置詳見官方https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html。
[root@wencheng-smb ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf_bak [root@wencheng-smb ~]# vim /etc/samba/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 # 設定Samba Server所要加入的工作組或者域 security = user # 安全性等級share<user<domain map to guest = Bad User # 允許匿名使用者訪問 log file = /var/log/samba/log.%m # 日誌檔案路徑,巨集%m表示客戶端主機的Netbios名 max log size = 50 # 每個log日誌的最大容量為50K ,單位是kb ,0代表不做限制 display charset = UTF8 [public] comment = Share Directories # 共享的描述 path = /data/samba/shares/public # 共享目錄的路徑 public = yes # 開啟共享 writeable = yes # 開啟寫許可權,預設只讀許可權 create mask = 0640 directory mask = 0755 [root@wencheng-smb ~]# testparm # 測試smb.conf語法的正確性 Load smb config files from /etc/samba/smb.conf Unknown parameter encountered: "max log siza" Ignoring unknown parameter "max log siza" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # 直接回車 # Global parameters [global] log file = /var/log/samba/log.%m map to guest = Bad User max log size = 50 security = USER workgroup = SAMBA idmap config * : backend = tdb [public] comment = Public Directories create mask = 0640 writeable = yes path = /data/samba/shares/public read only = No
- 建立共享資料夾,並設定許可權。
[root@wencheng-smb ~]# mkdir -p /data/samba/shares/public [root@wencheng-smb ~]# mkdir /data/samba/shares/public/public{1..3} [root@wencheng-smb ~]# touch /data/samba/shares/public/public{4..6} [root@wencheng-smb ~]# ls /data/samba/shares/public/ public1 public2 public3 public4 public5 public6 [root@wencheng-smb ~]# chown nobody.nobody /data/samba/shares/public/ [root@wencheng-smb ~]# ls -ld /data/samba/shares/public/ drwxr-xr-x. 5 nobody nobody 96 May 25 16:07 /data/samba/shares/public/
- 啟動Samba服務。
[root@wencheng-smb ~]# systemctl start smb.service nmb.service [root@wencheng-smb ~]# systemctl enable smb.service nmb.service [root@wencheng-smb ~]# netstat -nutpl | grep -E 'smbd|nmbd' tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 130587/smbd tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 130587/smbd tcp6 0 0 :::445 :::* LISTEN 130587/smbd tcp6 0 0 :::139 :::* LISTEN 130587/smbd udp 0 0 172.16.70.255:137 0.0.0.0:* 130591/nmbd udp 0 0 172.16.70.185:137 0.0.0.0:* 130591/nmbd udp 0 0 0.0.0.0:137 0.0.0.0:* 130591/nmbd udp 0 0 172.16.70.255:138 0.0.0.0:* 130591/nmbd udp 0 0 172.16.70.185:138 0.0.0.0:* 130591/nmbd udp 0 0 0.0.0.0:138 0.0.0.0:* 130591/nmbd
Win10客戶端測試連線。
- Win + R 組合鍵,調出執行視窗 。
- 輸入Samba伺服器IP。
- 再次按 Win + R 組合鍵,調出執行視窗,並輸入:gpedit.msc 命令,確定或回車,可以快速開啟本地組策略編輯器。
- 本地組策略編輯器視窗中,依次展開到:計算機配置 - 管理模板 - 網路 - Lanman 工作站,找到並雙擊開啟“啟用不安全的來賓登入”選項,並啟用。
- 再次訪問Samba伺服器IP。
- 可執行寫入,刪除操作。
情景二:配置使用者可以訪問多個部門的共享目錄。
- 配置Samba服務檔案/etc/samba/smb.conf,其他配置詳見官方https://www.samba.org/samba/docs/current/man-html/。
[root@wencheng-smb samba]# cat 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 server string = WenCheng Samba Server Version %v netbios name = WenChengSamba security = user log file = /var/log/samba/log.%m max log size = 50 map to guest = Bad User display charset = UTF8 [public] comment = Public Directories path = /data/samba/shares/public public = yes writeable = no # 關閉匿名使用者寫許可權 create mask = 0644 directory mask = 0755 write list = samba # 只允許samba管理員使用者寫 [devops] comment = Devops Directories path = /data/samba/shares/devops public = no writable = yes create mask = 0640 directory mask = 0750 admin users = devops valid users = @devops,samba write list = @devops,samba [market] comment = Market Directories path = /data/samba/shares/market public = no writable = yes create make = 0640 directory mask = 0750 admin users = market valid users = @market,samba write list = @market,samba 共享目錄說明: public :所有匿名使用者只可讀,samba管理員使用者可讀可寫 devops : 只允許@devops,@samba組使用者可讀可寫 market : 只允許@devops,@samba組使用者可讀可寫
- 驗證smb.conf配置檔案,並重啟smb和nmb服務。
[root@wencheng-smb samba]# testparm Load smb config files from /etc/samba/smb.conf Unknown parameter encountered: "display charset" Ignoring unknown parameter "display charset" Unknown parameter encountered: "create make" Ignoring unknown parameter "create make" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] log file = /var/log/samba/log.%m map to guest = Bad User max log size = 50 netbios name = WENCHENGSAMBA security = USER server string = WenCheng Samba Server Version %v workgroup = SAMBA idmap config * : backend = tdb [public] comment = Public Directories create mask = 0640 guest ok = Yes path = /data/samba/shares/public write list = samba [devops] admin users = devops comment = Devops Directories create mask = 0644 path = /data/samba/shares/devops read only = No valid users = @devops @samba write list = @devops @samba [market] admin users = market comment = Market Directories path = /data/samba/shares/market read only = No valid users = @market @samb [root@wencheng-smb ~]# systemctl restart smb nmb
- 建立普通使用者及管理員賬號; 建立共享目錄;並分配給目錄相關許可權。
[root@wencheng-smb ~]# useradd -M -s /sbin/nologin samba # Samba管理員 [root@wencheng-smb ~]# useradd -M -s /sbin/nologin devops # devops部門管理員 [root@wencheng-smb ~]# useradd -M -s /sbin/nologin market # market部門管理員 [root@wencheng-smb ~]# useradd -M -s /sbin/nologin -g devops user1 # devops部門使用者 [root@wencheng-smb ~]# useradd -M -s /sbin/nologin -g market user2 # market部門使用者 [root@wencheng-smb ~]# id samba uid=1000(samba) gid=1000(samba) groups=1000(samba) [root@wencheng-smb ~]# id devops uid=1001(devops) gid=1001(devops) groups=1001(devops) [root@wencheng-smb ~]# id market uid=1002(market) gid=1002(market) groups=1002(market) [root@wencheng-smb ~]# id user1 uid=1003(user1) gid=1001(devops) groups=1001(devops) [root@wencheng-smb ~]# id user2 uid=1004(user2) gid=1002(market) groups=1002(market) [root@wencheng-smb ~]# mkdir -p /data/samba/shares/{public,devops,market} [root@wencheng-smb ~]# mkdir /data/samba/shares/public/public{1..3} [root@wencheng-smb ~]# mkdir /data/samba/shares/devops/devops{1..3} [root@wencheng-smb ~]# mkdir /data/samba/shares/market/market{1..3} [root@wencheng-smb ~]# touch /data/samba/shares/market/market{4..6} [root@wencheng-smb ~]# touch /data/samba/shares/devops/devops{4..6} [root@wencheng-smb ~]# touch /data/samba/shares/public/public{4..6} [root@wencheng-smb ~]# ls /data/samba/shares/* /data/samba/shares/devops: devops1 devops2 devops3 devops4 devops5 devops6 /data/samba/shares/market: market1 market2 market3 market4 market5 market6 /data/samba/shares/public: public1 public2 public3 public4 public5 public6 # 修改屬主屬組幾許可權 [root@wencheng-smb ~]# chown samba.samba /data/samba/shares/ [root@wencheng-smb ~]# chown devops.devops /data/samba/shares/devops/ [root@wencheng-smb ~]# chmod 775 /data/samba/shares/devops/ [root@wencheng-smb ~]# chown market.market /data/samba/shares/market/ [root@wencheng-smb ~]# chmod 775 /data/samba/shares/market/ [root@wencheng-smb ~]# chown nobody.nobody /data/samba/shares/public/ [root@wencheng-smb ~]# chmod 775 /data/samba/shares/public/ [root@wencheng-smb ~]# setfacl -m u:samba:rwx /data/samba/shares/* [[root@wencheng-smb ~]# ls -ld /data/samba/shares/ drwxr-xr-x. 5 samba samba 48 May 28 10:09 /data/samba/shares/ [root@wencheng-smb ~]# ls -ld /data/samba/shares/* drwxrwxr-x+ 5 devops devops 143 May 28 17:02 /data/samba/shares/devops drwxrwxr-x+ 5 market market 143 May 28 17:02 /data/samba/shares/market drwxrwxr-x+ 5 nobody nobody 96 May 28 10:06 /data/samba/shares/public [root@wencheng-smb ~]# getfacl /data/samba/shares/* getfacl: Removing leading '/' from absolute path names # file: data/samba/shares/devops # owner: devops # group: devops user::rwx user:samba:rwx group::rwx mask::rwx other::r-x # file: data/samba/shares/market # owner: market # group: market user::rwx user:samba:rwx group::rwx mask::rwx other::r-x # file: data/samba/shares/public # owner: nobody # group: nobody user::rwx user:samba:rwx group::rwx mask::rwx other::r-x 將現有的使用者新增到組。 usermod [-G] [GroupName] [UserName] 將現有的使用者新增到多個組 usermod [-G] [GroupName1,GroupName2] [UserName] 將現有使用者從組中移除。 gpasswd [-d] [UserName] [GroupName] 將現有多個使用者新增到組。 gpasswd [-M] [UserName1,UserName2] [GroupName]
pdbedit命令解析。
pdbedit 命令用於管理Samba服務的帳戶資訊資料庫,格式為:"pdbedit [選項] 帳戶" 第一次把使用者資訊寫入到資料庫時需要使用-a引數,以後修改使用者密碼、刪除使用者等等操作就不再需要了。 pdbedit -L :檢視samba使用者 pdbedit -a -u user:新增samba使用者 pdbedit -r -u user:修改samba使用者資訊 pdbedit -x -u user:刪除samba使用者 samba服務資料庫的密碼也可以用 smbpasswd 命令 操作 smbpasswd -a user:新增一個samba使用者 smbpasswd -d user:禁用一個samba使用者 smbpasswd -e user:恢復一個samba使用者 smbpasswd -x user:刪除一個samba使用者
- 將使用者新增為Samba使用者,這裡以samba使用者為例,其他使用者類同,不再贅述。
[root@wencheng-smb ~]# pdbedit -a -u samba Unknown parameter encountered: "display charset" Ignoring unknown parameter "display charset" new password: # 登入samba密碼 retype new password: # 再次確認輸入 Unix username: samba NT username: Account Flags: [U ] User SID: S-1-5-21-2219792021-1567261761-1612575661-1000 Primary Group SID: S-1-5-21-2219792021-1567261761-1612575661-513 Full Name: Home Directory: \\wenchengsamba\samba HomeDir Drive: Logon Script: Profile Path: \\wenchengsamba\samba\profile Domain: WENCHENGSAMBA Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: Wed, 06 Feb 2036 23:06:39 CST Kickoff time: Wed, 06 Feb 2036 23:06:39 CST Password last set: Fri, 28 May 2021 12:24:14 CST Password can change: Fri, 28 May 2021 12:24:14 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF [root@wencheng-smb ~]# pdbedit -L # 檢視samba使用者 Unknown parameter encountered: "display charset" Ignoring unknown parameter "display charset" samba:1000: devops:1001: market:1002: user1:1003: user2:1004:
- Win10測試連線Samba共享目錄。
- “public”資料夾允許所有使用者可直接開啟,但無法上傳,刪除操作。
- 訪問“devops”資料夾需賬號密碼。
Win10本機訪問samba時用切換另一個使用者登入。
方法如下: 1)按鍵ctrl+r,開啟"執行",輸入"cmd" 2)輸入命令"net use * /delete",接著輸入"Y",即先取消所有的net 連線
- “devops”資料夾只允許devops使用者及其組的使用者(user1),samba管理員上傳,刪除操作。
- “market”資料夾只允許market使用者及其組的使用者(user2),samba管理員上傳,刪除操作。
- “pbulic”資料夾只允許samba管理員上傳,刪除操作。
至此,已實現Samba + Windows 檔案共享。