在Windows構建的網絡生態里,各主機間的文件及打印資源共享,主要依賴微軟專有的SMB/CIFS網絡協議來達成。SMB(即Server Message Block,服務消息塊)與CIFS(全稱Common Internet File System,通用互聯網文件系統),作為微軟自研的私有協議,它們在促進系統間高效數據交換方面扮演著關鍵角色。
換言之,在基于Windows的網絡體系中,主機間的文件和打印機資源分享,是通過微軟特制的SMB/CIFS網絡協議來實現的。SMB協議(服務消息塊)與CIFS協議(通用互聯網文件系統)均為微軟的私有技術,它們在確保不同主機間順暢的信息流通中發揮著核心作用。
在Samba項目誕生前,實現Linux/UNIX系統與Windows系統的直接通信頗具挑戰。
Samba作為開源界備受推崇的項目之一,其核心貢獻在于于Linux/UNIX環境中成功復現了微軟的SMB/CIFS網絡協議。這一壯舉極大地簡化了跨平臺文件共享的流程。對于那些采用Windows、Linux/UNIX混合架構的企業而言,Samba的引入無異于一場及時雨,它巧妙地消除了不同操作系統間文件訪問的障礙,促進了多平臺環境下的高效協作。
換句話說,在Samba問世之前,Linux/UNIX系統與Windows系統間的直接溝通存在較大難度。而Samba通過在非Windows系統上實現SMB/CIFS協議,使得跨平臺文件共享變得輕而易舉。對于運行著Windows和Linux/UNIX混合環境的企業來說,Samba的使用能夠有效解決文件互通的問題,大大提升了多系統共存場景下的工作便利性。
Samba主要由以下幾個部分組成:
-
smbd:處理所有SMB/CIFS網絡連接,它監聽TCP端口139和445,接收并響應來自客戶端的請求。
(負責為客戶?機提供服務器中共享資源(目錄和文件等)的訪問。)
-
nmbd:處理NetBIOS名稱解析,它監聽UDP端口137和138。
(負責提供基于NetBIOS協議的主機名稱解析 以便為Windows?網絡中的主機提供查詢服務。)
-
winbindd:提供額外的功能,如用戶和組管理,以及將NTLM或Kerberos身份驗證轉發到遠程系統。
安裝samba服務
對于Debian、Ubuntu和類似的基于APT的系統:
apt update
apt install samba samba-common-bin
對于RHEL、CentOS、Fedora和類似的基于YUM或DNF的系統:
sudo yum install samba samba-client samba-common
或者,在較新的系統上使用DNF:
sudo dnf install samba samba-client samba-common
安裝后檢查Samba版本:
smbd -V
配置Samba:
配置文件smb.conf
通常位于/etc/samba/
目錄下。你可以編輯這個文件來定義共享目錄、安全設置等。例如,要創建一個名為“shared”的共享目錄,你可以在smb.conf
中添加以下內容:
[public]comment = Public Documentspath = /home/publicbrowseable = yesread only = noguest ok = yes
這將創建一個名為"public"的共享目錄,路徑為"/home/public",任何人都可以瀏覽和讀寫這個目錄。
然后,你需要重啟Samba服務以使更改生效。
啟動和管理Samba服務:
sudo systemctl start smbd
sudo systemctl enable smbd
檢查Samba服務狀態:
sudo systemctl status smbd
配置段 [global]、[homes]、[printers]
在smb.conf 文件中存在三個特殊的配置段。
>[global]?全局設置:這部分配置項的內容對整個?Samba?服務器都有效。
>[homes] ??宿主目錄共享設置:設置Linux用戶的默認共享,對應用戶的宿主目錄。當用戶訪?問服務器中與自己用戶名同名的共享目錄時,通過驗證后將自動映射到該用戶的宿主文件?夾中。
[printers]打印機共享設置:如果需要共享打印機設備,可以在這部分進行配置。
若需要在 smb.conf 文件中設置新的共享文件夾,只需要增加一段如“[myshare]” 開始的共享設?置即可,其中“myshare”為用戶自定義的共享名。新的共享文件夾設置可以參考“[homes]”和“[printers]”?部分的內容。
Smb.conf?文件中常見的配置項及含義說明
配置項?? | 說明 |
workgroup | 設置服務器所在的工作組名稱. |
server string | 設置服務器的說明文字,用于描述Samba服務器. |
security | 設置服務器的安全級別,可設為以下三個值中的一個:user(需由本服務器驗證用戶名及密?碼)、server(需指定另一臺服務器來驗證用戶名及密碼)、ads(由Windows域控制器驗證用 戶名及密碼)。 |
log file | 設置Samba服務器的日志文件,默認存放在/var/log/samba/目錄下,表示將日志文件保存到 /var/log/samba/目錄中,按每個客戶機建立一個日志文件,其中“%m”變量表示客戶端主機?名或IP地址。 |
passwd backup | 設置共享賬戶文件的類型,默認使用tdbsam(TDB數據庫文件)。若網絡內擁有LDAP目錄 認證,這里可以改用ldapsam數據庫文件;另外,若要兼容舊版的Samba密碼文件,也可以 將類型設為smbpasswd。 |
comment | 設置對應共享目錄的注釋、說明信息.。 |
path | 設置對應共享目錄在服務器中的文件夾路徑。 |
browseable | 設置該共享目錄在“網上鄰居”中是否可見,設置為no時相當于隱藏共享目錄。 |
guest ok | 設置是否所有人都可以訪問共享目錄,與“public”配置項的作用相同。 |
writable | 設置該共享目錄是否可寫,與“read only”配置項的作用相反。 |
smbpasswd工具
smbpasswd
的基本語法如下:
smbpasswd [選項] [用戶名]
用戶賬戶及其權限主要存儲在 smbpasswd
數據庫中。
?
列出所有的samba共享用戶
smbpasswd -L
?如果 -L
選項不可用,你可能需要使用 pdbedit -L
來達到同樣的目的。
需要管理員權限(root) ??
但是,-L
選項并不是所有版本的 smbpasswd
都支持的。如果在你的系統上運行上述命令時遇到問題,可能是因為你的 Samba 版本不支持該選項。在這種情況下,你可以通過查詢 Samba 的用戶數據庫(通常是 /etc/samba/smbpasswd
)來獲取用戶列表,但這通常需要更復雜的操作,如使用 awk
, cut
或其他文本處理工具來解析數據庫文件。
另一個替代方法是查看 Samba 的配置文件 smb.conf
,看是否在其中定義了特定的用戶。但是,通常 smb.conf
并不會直接列出所有用戶,它更多地用于定義共享目錄、權限和其他設置。
如果 smbpasswd -L
不可用或沒有返回你期望的結果,你可以嘗試查看 Samba 的日志文件,或者使用 Samba 提供的其他管理工具,比如 smbclient
,但這些方法通常不會直接列出用戶列表。
添加新用戶:
smbpasswd -a 用戶名
這個命令會添加一個新用戶到 Samba 的密碼數據庫中,并要求你輸入兩次密碼以確認。?
修改用戶密碼:
smbpasswd -c 用戶名
刪除用戶:
smbpasswd -x 用戶名
顯示用戶狀態:
smbpasswd -e 用戶名
這個命令會顯示指定用戶的詳細信息,包括是否被禁用、密碼過期日期等。
smbpasswd參數
Username: 用戶名,這是你在 Samba 中識別用戶的唯一標識。
NT-Password: 這個字段通常會被星號 (*) 替代,表示有設置密碼,但實際的密碼不會顯示出來,以保護安全性。
LAN-Manager Password: 類似 NT-Password,如果設置了密碼,這里也會顯示為星號 (*)。
Last password change: 上次更改密碼的日期和時間。
Account expires: 賬戶過期的日期和時間。如果設置為 "never",則表示賬戶永遠不會過期。
Last login: 最近一次成功登錄的日期和時間。
Login count: 自從賬戶創建以來的登錄次數。
Min. password age: 更改密碼前必須等待的最短時間(天數)。如果設置為 "0",則表示沒有最小密碼年齡限制。
Max. password age: 密碼有效期的最大時間(天數)。如果設置為 "0" 或 "never",則表示密碼永不過期。
Password can change: 密碼可以更改的時間范圍。如果顯示 "now",則表示密碼可以立即更改。
UID: 用戶的 Unix UID(用戶ID)。
GID: 用戶的 Unix GID(組ID)。
Home directory: 用戶的主目錄。
Shell: 用戶的默認 shell。
Account disabled: 如果賬戶被禁用,這里會顯示 "Yes",否則為 "No"。
Account locked: 如果賬戶被鎖定,這里會顯示 "Yes",否則為 "No"。
Temporary account: 如果賬戶是臨時賬戶,這里會顯示 "Yes",否則為 "No"。
Workstation trust account: 如果賬戶是工作站信任賬戶,這里會顯示 "Yes",否則為 "No"。
Interdomain trust account: 如果賬戶是跨域信任賬戶,這里會顯示 "Yes",否則為 "No"。
pdbedit工具
pdbedit
是 Samba 套件中的一個命令行工具,用于管理和查詢 Samba 的用戶數據庫(PassDB)。這個工具允許你添加、刪除、修改和列出 Samba 用戶賬戶,以及查看和設置賬戶的密碼策略和屬性。
pdbedit
的基本語法如下:
pdbedit [選項]...
常見的 pdbedit
選項包括:
-
-L
或--list
:列出所有 Samba 用戶賬戶。這是最常用的選項之一,可以用來查看當前系統中有多少 Samba 用戶,以及他們的用戶名、SID(安全標識符)、UID 和 GID 等信息。 -
-v
或--verbose
:詳細模式,提供更多輸出信息。 -
-W
或--domain=DOM
:指定操作的域,默認為本地機器的域。 -
-a
或--add=USER
:添加一個新的 Samba 用戶賬戶。 -
-u
或--username=USER
:操作指定的 Samba 用戶賬戶。 -
-x
或--delete=USER
:刪除一個 Samba 用戶賬戶。 -
-t
或--trust-account
:標記用戶賬戶為信任賬戶,通常用于域控制器。 -
-m
或--max-login-timeout=SECONDS
:設置最大登錄超時時間(秒)。 -
-r
或--remove-max-login-timeout
:移除最大登錄超時時間。
列出所有samba共享用戶
pdbedit -L
?要添加一個新的 Samba 用戶 john
,你可以運行:
sudo pdbedit -a -u john
查看某一個用戶的信息
pdbedit -vL 用戶名
刪除samba用戶
pdbedit -x -u 用戶名
testparm工具
Samba服務器提供了一個配置文件檢查工具——testparm程序,使用?testparm工具可以對smb.conf配置文件的正確性進行檢查,如果發現有錯誤將會進行提醒。
testparm
命令的語法
testparm [選項] [配置文件]
常見的選項包括:
-s
:這個選項強制?testparm
?從標準輸入讀取配置數據,而不是從文件中讀取。這對于調試和測試動態生成的配置文件很有用。-h
:顯示幫助信息。-L servername
:設置 Samba 服務器的名字。-v
:詳細模式,提供更多的輸出信息。-D
:調試模式,提供調試級別的輸出信息。
如果沒有指定配置文件,testparm
將默認查找 /etc/samba/smb.conf
或者其他默認位置的配置文件。
例如:
sudo testparm
這將檢查默認的 smb.conf
文件,并輸出關于配置的信息,包括任何語法錯誤或警告。
如果配置文件不在默認位置,你可以指定配置文件的完整路徑:
sudo testparm /path/to/your/smb.conf
testparm
的輸出會包含 Samba 服務器的全局參數、共享設置、安全選項、用戶和密碼策略等信息,有助于確保 Samba 服務能夠按照預期工作。
在修改了 smb.conf
文件后,使用 testparm
是一個良好的實踐,可以避免不必要的服務啟動失敗或功能問題。如果 testparm
報告了錯誤,你應該根據輸出的信息來修正配置文件,然后再嘗試重啟 Samba 服務。