Linux 服務器搭建之Samba服務
一、Samba服務基礎
Samba是著名的開源軟件項目之一,它在Linux/UNIX系統中實現了微軟的SMB/CIFS網絡協議,從而使得跨平臺的文件共享變得更加容易。在部署Windows、linux/UNIX混合平臺的企業環境時,選用Samba可以很好地解決不同系統之間的文件互訪問題。
1、Samba軟件的組成
1.1)、Samba軟件包的構成
在RHEL6.5系統的DVD安裝光盤中可以找到與Samba相關的幾個軟件包,主要包括服務端軟件Samba、客戶端軟件samba-client,用於提供服務端和客戶端程序的公共組件samba-common。
大部分軟件包已經隨RHEL6.5
[root@twgdh ~]# rpm -qa | grep "^samba" samba-client-3.6.9-164.el6.x86_64 ……//samba服務器軟件包 samba-common-3.6.9-164.el6.x86_64 ……//samba通用工具和庫文件 samba-3.6.9-164.el6.x86_64 ……//samba提供服務器程序文件 samba-winbind-3.6.9-164.el6.x86_64 ……//它允許Linux/UNIX系統利用Windows NT的用戶帳號信息。 samba4-libs-4.0.0-58.el6.rc4.x86_64 ……//samba相關依賴包 samba-winbind-clients-3.6.9-164.el6.x86_64
只需要從RHEL6.5光盤中找到安裝包文件samba-3.6.9-164.elb.x86_64.rpm並進行安裝即可。
1.2)、Samba服務的程序組件
Samba服務器提供smbd、nmbd兩個服務程序,分別完成不同的功能。其中,smbd負責為客戶機提供服務器中共享資源(目錄和文件等)的訪問;nmbd負責提供基於NetBIOS協議的主機名稱解析,以便為Windows網絡中的主機進行查詢服務。
安裝好samba軟件包以後,在RHEL6.5系統中會添加名為smb和nmb的標準系統服務,管理員可以通過service工具來控制Samba服務的啟動與終止。
[root@twgdh ~]# service smb start 啟動 SMB 服務: [確定] [root@twgdh ~]# service nmb start 啟動 NMB 服務: [確定]
使用netstat命令可以驗證服務進程狀態,其中smbd程序負責監聽TCP協議的139端口(SMB協議)、445端口(CIFS協議),而nmbd服務程序負責監聽UDP協議的137~138端口(NetBIOS協議)。
2、主配置文件smb.conf
Samba服務的配置文件位於/etc/samba/目錄中,其中smb.conf是主配置文件。在smb.conf文件中,以“#”號開始的行表示註釋性的文件,以“;”開始的行表示是位置樣例。在配置共享文件夾時,用戶可以參考文件中提供的樣例行進行設置。刪除註釋行、樣例行及空行以外的內容,才是Samba服務器的有效配置。例如,使用grep命令可以過濾出smb.conf文件中的有效配置。
[root@twgdh ~]# grep -v "#" /etc/samba/smb.conf | grep -v "^;" | grep -v "^$" [global] workgroup = MYGROUP server string = Samba Server Version %v log file = /var/log/samba/log.%m max log size = 50 security = user passdb backend = tdbsam load printers = yes cups options = raw [homes] comment = Home Directories browseable = no writable = yes [printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = no writable = no printable = yes
從以上內容可以看出,smb.conf文件中的配置內容默認包括以下三部分。
■ [global] 全局設置:這部分配置項的內容對整個Samba服務器都有效。
■ [homes] 宿主目錄共享設置:設置Linux用戶的默認共享,對應用戶的宿主目錄。當用戶訪問服務器中與自己同名的共享目錄時,通過驗證後將會自動映射到該用戶的宿主文件夾中。
■ [printers] 打印機共享位置:如果需要共享打印機設備,可以在這部分進行配置。
若需要在smb.conf文件中設置新的共享文件夾,只需要增加一段如“[myshare]”開始的共享設置即可,其中“myshare”為用戶自定義的共享名。新的共享文件夾設置可以參考“[homes]”和“[printers]”部分內容。
Samba服務器的常見配置項及含義說明
配置項 | 設置服務器所在的工作組名稱。 |
server string | 設置服務器的說明文字 |
security | 設置服務器的安全級別,可設為以下四個值中的一個:share(可匿名訪問)、user(需由本服務器驗證用戶名及密碼)、server(需指定另一臺服務器來驗證用戶名及密碼)、domain(由Windows域控制器驗證用戶名及密碼) |
log file | 設置Samba服務器的日誌文件,默認設置為“/var/log/samba/log.%m”,表示將日誌文件保存到/var/log/samba/目錄中,按每個客戶機建立一個日誌文件,其中“%m”變量表示客戶端主機名或IP地址 |
comment | 設置對應共享目錄的註釋、說明信息 |
path | 設置對應共享目錄在服務器中的文件夾路徑 |
browseable | 設置該共享目錄在“網上鄰居”中是否可見,設置為no時相當於影藏共享目錄 |
guest ok | 設置是否所有人都可以訪問共享目錄,與“public”配置項的作用相同 |
writable | 設置該共享目錄是否可寫,與“read only”配置項的作用相反 |
passwd backend | 設置共享賬戶文件的類型,默認使用tdbsam(TDB數據庫文件)。若網絡內擁有LDAP目錄認證,這裏可以改用ldapsam數據庫文件;另外,若要兼容舊版的Samba密碼文件,也可以將類型設為smbpasswd |
Samba服務器提供了一個配置文件檢查工具—testparm程序,使用testparm工具可以對smb.conf配置文件的真確性進行檢查。
二、構建文件共享服務
1、構建可匿名的共享
可匿名訪問的共享使用於公開的資源分享,一般只建議提供只讀訪問。由於匿名共享不需要驗證用戶名和密碼(或允許提供任意用戶名、密碼)就可訪問,在安全性要求不高的情況下,可以非常方便、快捷地與其他主機共享資源。
設置匿名共享文件夾時,在主配置文件smb.conf中主要調整兩個地方即可:其一,可以將默認的安全級別修改為share;其二,添加一段共享目錄配置。其他配置項根據實際需要進行更改。
例如,若要將本地掛載的光盤目錄/media/發布為共享文件夾,共享名為rhel6,可以參照以下步驟進行設置。
[root@twgdh ~]# mount /dev/cdrom /media/ ……//掛載rhel6.5的dvd光盤 [root@twgdh ~]# vim /etc/samba/smb.conf [global] workgroup = MYGROUP ……//使用Windows主機的默認工作組 security = share ……//默認允許匿名訪問 ……//省略部分內容 [rhel6] ……//用戶訪問共享時顯示的文件名 comment = RHEL 6.5 DVD directory ……//註釋內容,隨便寫 path = /media/ ……//指定真實共享目錄存儲的位置 public = yes ……//是否為公共的 read only = yes ……//只讀 [root@twgdh ~]# service smb reload 重新載入 smb.conf 文件: [確定]
配置完畢後,就可以從Windows客戶機或Linux客戶機中瀏覽並匿名訪問此共享了。
註意需要關閉iptables和Selinux!
2、構建需要用戶驗證的共享
匿名共享雖然用起來非常方便,但因為任何人都可以訪問到共享的文件數據,在某些時候可能會導致信息的泄露。
設置用戶驗證的共享文件夾時,在主配置文件smbl.conf中同樣需要調整兩個地方:其一,將默認的安全級別修改為share;其二,添加共享目錄配置,指定用戶權限。在此之前,還需要先創建授權的共享賬戶。
2.1)、建立Samba用戶數據庫
為了區別於Linux主機中的系統用戶,通常將用於訪問Samba共享資源的用戶成為共享用戶。Samba服務器使用獨立的共享賬號數據庫文件,其中的賬號名稱必須有與它同名的系統用戶相對應,以便主機對共享訪問的讀寫權限進行控制;但共享用戶的密碼時額外設置的,可以與系統用戶的密碼不一樣。
Samba共享用戶的賬號數據庫文件默認位於/var/lib/samba/private/passdb.tdb,是一個經過加密的文件,其中保存了Samba用戶的賬號名稱、登錄密碼、賬號可用狀態等信息。使用pdbedit工具可以對共享用戶進行管理。
[root@twgdh ~]# useradd vina ……//先添加系統用戶vina [root@twgdh ~]# pdbedit -a -u vina ……//再添加共享用戶vina new password: ……//設置共享用戶vina的密碼 retype new password: ……//重復輸入密碼進行確認 Unix username: vina NT username: Account Flags: [U ] User SID: S-1-5-21-3721989042-1553083320-1330393282-1000 Primary Group SID: S-1-5-21-3721989042-1553083320-1330393282-513 ……//省略部分內容
當指定的Samba用戶不再需要使用時,可以通過pdbedit工具進行刪除,只要結合“-x”選項並指定Samba用戶的名稱即可,“-L”選項用來列出所有Samba用戶,“-v”選項可以輸出更詳細的內容。
2.2)、設置用戶訪問授權
若要使用用戶驗證的Samba共享,應將security安全級別提升為“user”。共享目錄的用戶授權設置主要由“valid users”、“write list”配置項指定。當需要授權多個共享用戶時,以逗號或空格進行分隔。如果需要授權一個用戶組,可以使用“@組名”的形式,但需要為組內的每個系統用戶都創建對應的Samba共享用戶。
例如,若要將本地目錄/opt/mytools/發布為共享文件夾,共享名為tools,要求只有共享用戶vanko、hunter能夠訪問,其中hunter用戶具有寫入權限,可以參照以下步驟。
■ 創建共享用戶vanko、hunter,確認共享目錄。
[root@twgdh ~]# useradd vanko [root@twgdh ~]# useradd hunter [root@twgdh ~]# pdbedit -a -u vanko [root@twgdh ~]# pdbedit -a -u hunter [root@twgdh ~]# mkdir /opt/mytools
■ 修改smb.conf配置文件,添加名為tools的共享目錄配置段。
[root@twgdh ~]# vim /etc/samba/smb.conf [global] security = user ……//提升默認的安全級別 [tools] comment = zhe shi bei zhu!! ……//備註 path = /opt/mytools ……//文件路徑 public = no ……//是否為公共的 read only = yes ……//是否為只讀的 valid users = vanko,hunter ……//設置指定用戶可以進行訪問 write list = hunter ……//指定可以寫入的用戶
■ 重新加載smb.conf文件中的配置,或重啟smb服務。
[root@twgdh ~]# service smb reload 重新載入 smb.conf 文件: [確定]
2.3)、確定目錄訪問授權
通過Samba服務器共享本地的文件夾時,用戶最終是否擁有讀取、寫入權限,除了需要設置用戶授權以外,還要滿足一個前提條件—在服務器本集中,與共享用戶同名的系統用戶對發布為共享的本地文件夾(如/opt/mytools)必須要有相應的讀取、寫入權限。
因此,在上一步驟的例子中,還需要調整/opt/mytools目錄的權限,使vanko用戶能夠讀取,hunter用戶能夠寫入。這裏為了做實驗方便,將/opt/mytools文件夾的權限設置為777。
[root@twgdh ~]# chmod 777 /opt/mytools/
另外,當通過共享目錄上傳文檔時,對於共享用戶所上傳的文件,創建子目錄的默認權限可以分別使用配置項“directory mask”、“create mask”進行指定。例如,若要使用戶訪問tools共享時,所上傳的目錄的默認權限為755,文件的默認全向為644,可以參考以下步驟在[tools]配置段添加相關內容。
[toools] directory mask = 0755 ……//創建目錄默認權限 create mask = 0644 ……//創建文件默認權限 [root@twgdh ~]# service smb reload 重新載入 smb.conf 文件: [確定]
重載服務之後即可使用,在客戶機上登錄使用!
Linux 服務器搭建之Samba服務