Samba文件共享服務
- Linux系統中一種文件共享程序
- 在Windows網絡環境中,主機之間進行文件和打印機共享是通過微軟公司自己的SMB/CIFS網絡協議實現的。SMB(Server Message Block,服務消息塊)和CIFS(Common Internet File System,通過互聯網文件系統)協議是微軟的私有協議,在Samba項目出現之前,並不能直接與linux/UNIX系統進行通信。
- Samba是著名的開源軟件項目之一,它在linux/UNIX系統中實現了微軟的SMB/CIFS網絡協議,從而使得跨平台文件共享變得更加容易。在部署Windows、linux/UNIX混合平台的企業環境時,選用Samba可以很好地解決不同系統之間的文件互訪問題。
Samba軟件包的構成:
- Samba服務的程序組件
- smbd負責為客戶機提供服務器中共享資源(目錄和文件等)的訪問
- nmbd負責提供基於NetBIOS協議的主機名稱解析,以便為Windows網絡中的主機進行查詢服務
- 使用netstat命令可以驗證服務進程狀態,其中smbd程序負責監聽TCP協議的139端口(SMB協議)、445端口(CIFS協議),而nmbd服務程序負責監聽UDP協議的137-138端口(NetBIOS協議)
- netstat -anptu | grep "mbd" 查看Samba運行狀態
- 主配置文件smb.conf
- Samba服務idea服務的文件位於/etc/samba/目錄中,其中smb.conf是主配置文件
- 在smb.conf文件中,以"#"號開始的行表示注釋性的文字,以";"開始的行表示是配置樣例
- grep -v "#" /etc/samba/smb.conf | grep -v ";" | grep -v "$" -->過濾標識符
/etc/samba/smb.conf 文件概述
- 主配置文件smb.conf
- [global]全局設置:對整個Samba服務器都有效
- [homes]宿主目錄共享設置:設置Linux用戶默認共享,對應用戶的宿主目錄
- [printers]打印機共享設置
Samba服務器的常見配置項及含義說明
security = user //安全級別,可用值如下:
share、user、server、domain。
[global]
workgroup = MYGROUP //所在工作組名稱
server string = Samba Server Version %v //服務器描述信息
; netbios name = WORKGROUP //網絡主機名
; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 //接口地址
; hosts allow = 127. 192.168.12. 192.168.13. //允許主機地址
# logs split per machine
log file = /var/log/samba/log.%m //日志文件位置,//"%m" 變量表示客戶機地址
# max 50KB per log file, then rotate
max log size = 50 //日志文件的最大容量,單位為KB
[homes]
comment = Home Directories //對共享在服務器中對應的實際路徑
browseable = no //該共享目錄在"網上鄰居"中是否可見
writable = yes //是否可寫,與read only的作用相反
; valid users = %S
; valid users = MYDOMAIN\%S
[printers]
comment = All Printers
path = /var/spool/samba //共享目錄在服務器中對應的真實路徑
browseable = no
guest ok = no //是否允許所有人訪問,等效於"public"
writable = no
printable = yes //是否允許打印機
testparm程序
Samba服務器提供了一個配置文件檢查工具---testparm程序,使用testparm工具可以對smb.conf配置文件的正確性個進行檢查,如果發現有錯誤將會進行提醒。
可匿名訪問的共享
- 可匿名訪問的共享適用於公開的資源分享,一般只建議提供只讀訪問
- 設置匿名共享文件夾時,在主配置文件smb.conf中主要調整兩個地方即可
- 可以將默認的安全級別修改為share
- 添加一段共享目錄配置
需用戶驗證的共享
- 匿名共享雖然用起來非常方便,但因為任何人都可以訪問到共享的文件數據,在某些時候可能會導致信息的泄露
- 實現步驟:
- 建立Samba用戶數據庫,使用pdbedit工具可以對共享用戶進行管理
- 設置用戶訪問授權,將security安全級別提升為"user"
- 確定目錄訪問授權
通過Samba服務器共享本地的文件夾時,用戶最終是否擁有讀取、寫入權限,除了需要設置用戶授權以外,還需要滿足一個前提條件---在服務器本機中,與共享用戶同名的系統用戶對發布為共享的本地文件夾(如/opt/mytools/)必須有相應的讀取、寫入權限。//另外,當通過共享目錄上傳文檔時,對於共享用戶所上傳的文件,創建子目錄的默認權限,可以分別使用配置項"directory mask"、"create mask"進行指定
命令
- pdbedit -a -u 添加一個Samba用戶
- pdbedit -x -u 刪除一個Samba用戶
- pdbedit -L 列表查看Samba用戶
- pdbedit -Lv 詳細查看Samba用戶
- smbpasswd -a 用戶名: 是指給現有用戶設置密碼。而非建立用戶
- 創建用戶是:useradd 用戶名
- 搜索/etc/samba/smbpasswd里面存放了SAMBA所有的用戶。
使用命令
- cat /etc/samba/smbpasswd
- vim /etc/samba/smbpasswd
- /etc/samba/ 下沒有smbpasswd
如果沒有的話你就使用SMB用戶創建命令來創建,這樣SMBpasswd文件會自動生成。
需要注意的是,在/etc/samba/smb.conf文件對權限的設置,優先級低於Linux系統中的文件系統權限,也就是說,想要實現共享目錄或者文件具有某種權限,首先必須保證該目錄或者文件在文件系統中具有該權限。
共享賬號映射(別名)
- 為了進一步提高Samba共享服務的安全性,除了可以對指定的共享目錄設置用戶授權以外,還可以采取用戶映射、訪問地址限制等措施
- 在使用Samba共享賬號時,通常情況下,一個共享用戶賬號都有一個同名的系統用戶賬號。
- Samba服務器提供了"用戶名稱映射"(Username Map)機制,可以將一個共享用戶映射為多個不同的名稱(別名)
- Samba共享賬號的映射文件默認位於/etc/samba/smbusers
- 設置好共享用戶的別名記錄以后,若要正常啟用賬號映射功能,需要修改主配置文件/etc/samba/smb.conf,添加全局配置項"username map=/etc/samba/smbusers",然后重新加載配置即可生效
訪問地址限制
- 針對訪問Samba服務器的客戶機,可以通過"hosts allow"、"host deny"配置項進行訪問限制,前者英語指定僅允許訪問共享的客戶機地址,后者用於指定僅拒絕訪問共享的客戶機地址,兩種方式任選其一即可
- 訪問地址限制一般應用於[global]全局配置部分,也可以應用於某個具體的共享配置段部分。限制的對象可以是主機名、IP地址或者網絡段地址(省去主機部分),多個地址之間以逗號或空格進行隔離
使用smbclient訪問共享文件夾
- WINDOWS: \SAMBA服務器地址
- LINUX : smbclient 命令,查看及登陸使用共享
- smbclient -U sunboy //192.168.4.11/tools
- smbclient //192.168.1.108/public -N 【匿名訪問】
- 改配置文件之后就檢查語法,重啟服務。
使用mount 掛載共享目錄
mkdir /media/smbdir
mount -o username=hunter //192.168.4.11/tools /media/smbdir/
Passwd:
mount | tail -n 1
【知識補充】
- Windows中登錄過共享服務器輸入的用戶名和密碼會有記錄,實驗時可以在dos界面輸如下命令以清除記錄
- net use * /del
- 若window客戶機正常訪問,但linux客戶機訪問不了samba服務器時,查看客戶機是否安裝samba4-libs包
- 若linux客戶機出現:mount: block device //192.168.1.108/share is write-protected, mounting read-only
- mount: cannot mount block device //192.168.1.108/share read-only 的報錯信息,則要安裝cifs-utils包
網絡鄰居是個網站還是問題出現了錯誤?!
- 如果是網上鄰居的話,清除方式是:
- 依次點擊“開始”——“運行”;
- 在打開的窗口中鍵入“control keymgr.dll”,回車。