這是我在去年暑假實習時參考samba文檔和一些博文進行整理的一篇文檔。
smb.conf是samba最重要的配置文件,該文件定義了samba服務器的共享服務以及共享屬性選項。下面將對該文件的語法結構及其一些重要配置選項進行簡單說明。
一、語法格式
配置文件smb.conf的語法格式為:
<file> :== { <section> } EOF
<section> :== <section header> { <parameter line> }
<section header> :== ‘[‘ NAME ‘]’
<parameter line> :== NAME ‘=’ VALUE ‘\n’
<section>將配置文件smb.conf划分為不同的部分,每個部分定義了一項共享服務。共享服務名定義在’[‘和’]’內,從某個共享服務名到下一個共享服務名之間定義了該共享服務的屬性選項。
每個屬性選項的定義占據一行,其格式為:
名稱 = 值
以第一個“=”來划分選項名和選項值,可以在某行的末尾使用續行符“\”來在下一行繼續某選項的定義。在smb.conf文件中,以“;”或者“#”開頭的行作為注釋,在語法解析時將忽略這些注釋。
注意:共享服務名和選項名不區分大小寫。
在<section header>中有三個特殊的NAME,分別是global、homes和printers。下面對這三個作簡單的介紹。
[global]:其屬性選項是全局可見的,但是在需要的時候,我們可以在其他<section>中定義某些屬性來覆蓋[global]的對應選項定義。
[homes]:當客戶端發起訪問共享服務請求時,samba服務器就查詢smb.conf文件是否定義了該共享服務,如果沒有指定的共享服務<section>,但smb.conf文件定義了[homes]時,samba服務器會將請求的共享服務名看做是某個用戶的用戶名,並在本地的password文件中查詢該用戶,若用戶名存在並且密碼正確,則samba服務器會將[homes]這個<section>中的選項定義克隆出一個共享服務給客戶端,該共享的名稱是用戶的用戶名。
[printers]:用於提供打印服務。當客戶端發起訪問共享服務請求時,沒有特定的服務與之對應,並且[homes]也沒有找到存在的用戶,則samba服務器將把請求的共享服務名當做一個打印機的名稱來進行處理。
除了global、homes和printers外,我們可以在smb.conf文件中定義自定義的共享服務名。在共享服務的定義中,我們通過一些選項來定義共享服務的屬性。在選項的定義中,我們可以使用一些samba預定義的變量來設置動態的選項值。下面列出幾個常用的預定義變量:
%S:當前服務名
%P:當前服務的根目錄
%u:當前服務的用戶名
%U:當前會話的用戶名
%g:當前服務用戶所在的主工作組
%G:當前會話用戶所在的主工作組
%H:當前服務的用戶的Home目錄
%V:samba的版本號
%h:運行samba服務機器的主機名
%M:客戶端的主機名
%m:客戶端的NetBIOS名稱
%L:服務器的NetBIOS名稱
%R:所采用的協議等級(CORE/COREPLUS/LANMAN1/LANMAN2/NT1)
%d:當前服務進程的ID
%I:客戶端的IP
%T:當前日期和時間
二、重要選項說明
全局選項:
全局選項用於[global]的<section>選項定義中,其用於說明samba服務器的一些基本屬性。其有些選項可以被其他<section>中的選項定義覆蓋。
workgroup = MYGROUP
定義samba服務器所在的工作組或者域(如果設置security = domain的話)。
server string = Samba server
設定samba服務器的描述,通過網絡鄰居訪問時可在備注中查看到該描述信息。
hosts allow = host (subnet)
設定允許訪問該samba服務器的主機IP或網絡,該選項的值為列表類型,不同的項目之間使用空格或逗號隔開,例如hosts allow = 192.168.3.0, 192.168.1.1,該選項設置允許主機192.168.1.1以及子網192.168.3.0/24內的所有主機訪問該samba服務器。
hosts deny = host (subnet)
設定不允許訪問該samba服務器的主機IP或網絡,其格式與hosts allow一樣。
guest account = guest
設定了游客的賬號,在游客訪問guest ok = yes的共享服務時,samba服務器將設置客戶端以該游客賬號來訪問共享。
log file = MYLOGFILE
設定記錄文件的位置。
max log size = size
設定記錄文件的大小,單位為KB,如果設置為0則表示無大小限制。
security =
設定samba服務器的安全級,其有四種安全級別:share、user、server和domain,默認為user。關於這四種安全級別的詳細信息,請查看相關文檔。
password server = ServerIP
設定了用戶賬號認證服務器IP,其在設定security = server時有效。
encrypt passwords = yes | no
設定是否對密碼進行加密。如果不對密碼進行加密的話,在認證會話期間,客戶端與服務器傳遞的是明文密碼。但有些Windows系統默認情況下,不支持明文密碼傳輸。
passdb backend = smbpasswd | tdbsam | ldapsam
設定samba服務器訪問和存儲samba用戶賬號的后端,在samba-3.0。23之前的默認值為smbpasswd,而之后的默認值為tdbsam。
smb passwd file =
設定samba的用戶賬號文件。對於源代碼安裝的samba,在samba-3.0.23之前,其默認值為/user/local/samba/private/smbpasswd;而samba-3.0.23之后,其默認值為/usr/local/samba/private/passwd.tdb。
include = smbconfFile
通過include選項可以包含其他配置文件,通過該選項和一些samba定義的變量可以設定與不同機器相關的配置。
local master = yes | no
設定該samba服務器是否試圖成為本地主瀏覽器,默認值為yes。若設置為no,則該samba服務器永遠不可能成為本地主瀏覽器,而設置為yes不代表其一定能成為本地主瀏覽器,只是讓其能參與本地主瀏覽器的選舉。
os level = N
N是一個整數,設定了該samba服務器參加本地主瀏覽器選舉時的權重,其值越大,權重越大。os level = 0時,該服務器將失去選舉的機會。
domain master = yes | no
設定samba服務器成為域瀏覽器。域瀏覽器從各個本地主瀏覽器處獲取瀏覽列表,並將整個域的瀏覽列表傳遞給各個本地主瀏覽器。
preferred master = yes | no
設定該samba服務器是否為工作組里的首要主瀏覽器,如果設置為yes,則在nmbd啟動時,將強制一個瀏覽選擇。
局部選項:
局部選項為除了global外的各個<section>中的參數。其定義了共享服務的屬性。
comment =
設定共享服務的描述信息。
path =
設定共享服務的路徑,其中可以結合samba預定義的變量來設置。
hosts allow = host(subnet)
hosts deny = host(subnet)
與全局的hosts allow和hosts deny含義相同,其會覆蓋全局的設置。
read only = yes | no
設定該共享服務是否為只讀,該選項有一個同義選項writeable。
user = user(@group)
設定所有可能使用該共享服務的用戶,可以使用@group來設置群組group中的所有用戶賬號。該選項的值為列表,不同的項目之間使用空格或逗號隔開。在設置security = share時,客戶端要訪問某共享服務時提供的密碼會與該選項指定的所有用戶進行一一配對認證,若某用戶認證通過,則以該用戶權限進行共享服務訪問,否則拒絕客戶端的訪問(設置security = share不是允許游客訪問,只有guest ok = yes才是允許游客訪問,切記!!!)。
valid users = user(@group)
設定能夠使用該共享服務的用戶和組,其值的格式與user選項一樣。
invalid users = user(@group)
設定不能夠使用該共享服務的用戶和組,其值的格式與user選項一樣。
read list = user(@group)
設定對該共享服務只有讀取權限的用戶和組,其值的格式與user選項一樣。
write list = user(@group)
設定對該共享服務擁有讀寫權限的用戶和組,其值的格式與user選項一樣。
admin list = user(@group)
設定對該共享服務擁有管理權限的用戶和組,其值的格式與user選項一樣。
public = yes | no
設定該共享服務是否能夠被游客訪問,其同義選項有guest ok。
create mode = mode
mode為八進制值,如0755,其默認值為0744。該選項指定的值用於過濾新建文件的訪問權限,新建文件的默認權限將與create mode指定的值進行按位與操作,將結果再與force create mode指定的值進行按位或操作,得到的結果即為新建文件的訪問權限。
force create mode = mode
mode為八進制值,默認為0000。其作用參考選項create mode。
directory mode = mode
mode為八進制值,默認為0755。該選項指定的值用於過濾新建目錄的訪問權限,新建目錄的默認權限將與directory mode指定的值進行按位與操作,將結果再與force directory mode指定的值進行按位或操作,得到的結果即為新建目錄的訪問權限。
force directory mode = mode
mode為八進制值,默認為0000。該選項的作用參考選項directory mode。
force user = user
強制設定新建文件的屬性onwer。若存在一個目錄,其允許guest可以寫,則guest就可以刪除。但設定force user為其他用戶,並設置create mode = 0755,則gues用戶不能夠刪除其新建文件。
上面只是簡單的介紹了一些重要的選項,並且沒有討論有關[printers]的選項說明,更多選項請man smb.conf進行查閱。
三、兩個簡單配置實例
share安全級:
smb.conf配置文件內容如下:
[global]
workgroup = WORKGROUP
server string = My samba server
security = share
passdb backend = smbpasswd
smb passwd file = /etc/samba/smbpasswd
[public]
comment = public share
path = /home/public
read only = no
user = user1
上述配置文件內容設置了samba服務器工作在share安全級下,當客戶端要訪問public共享時,提交一個訪問密碼,服務器將該密碼與選項user中指定的user1配對,然后到文件/etc/samba/smbpasswd中查詢該用戶user1是否存在,以及客戶端提供的密碼是否正確,若正確,則允許訪問,否則拒絕訪問(注:user1必須是服務器的系統賬號,並通過工具smbpasswd或手工添加到文件/etc/samba/smbpasswd中)。另[public]的選項中path提供的路徑/home/public在服務器必須存在,否則訪問失敗。
user安全級:
smb.conf配置文件的內容如下:
[global]
workgroup = WORKGROUP
server string = My samba server
security = user
passdb back = smbpasswd
smb passwd file = /etc/samba/smbpasswd
[myshare]
comment = This is my share
path = /data/myshare
valid uses = user1
read only = no
samba服務器運行在user安全級下,客戶端若要訪問共享服務myshare,其需要提供用戶名和密碼,只有用戶user1,並且密碼正確方能訪問該服務。