CentOS 6下超實用的samba配置教程

介紹:
samba是在linux/unix上實現SMB協議的免費軟件,通俗來説就是讓linux/unix支持與windows間互相共享文件。
安裝軟件包:

yum install -y samba

samba配置文件介紹
samba配置文件的存放路徑為

/etc/samba/

該目錄下有以下三個文件:

lmhosts文件中記錄着局域網中NetBIOS與IP地址的對應關係
smb.conf是samba的主配置文件,其內容由全局配置部分和共享配置部分組成。
smbusers文件記錄着windowns中用户與linux中用户的對應關係,例如windows中的administrator管理員賬户對應linux下的root用户。
samba的配置:
在開始配置前,首先明確下需求:
1、user11和user12用户可以通過samba共享來訪問自己的家目錄,且此共享僅本人可見。
2、創建三個共享,分別為share1、share2、share3,其共享的本地文件夾分別為/tmp/a1、/tmp/a2、/tmp/a3。
3、group1組的用户user1對share1共享有全部權限,group2組的用户user2對share2有全部權限,group3組的用户user3對share1和share2共享都有全部權限;對於share1和share2共享其他人有隻讀權限;share3為公共存儲,所有人都有存取權。
4、所用用户新建的文件都是本人擁有全部權限,其他人只有只讀權限。
知道了需求,那麼現在就來根據需求來做具體配置吧:

vim /etc/samba/smb.conf                //使用vim文本編輯器打開配置文件

轉到第248行,可以看到如下內容,看開頭一行,[homes],home是家的意思,加s呢,變成複數了,可以理解成所有用户的家,哈哈,感覺我像是在講英語。總之,通過配置此部分就可以滿足需求1了。

comment選項是用來添加一個文本描述的。
browseable選項定義他人是否可以看到此共享,yes為可以,no為不可以(僅自己可見)。
writable選項用來定義共享是否可寫。
valid users選項定義該共享規則對哪些用户啓用。

看顯而易見,我們只要設置valid users選項,讓此共享配置僅對user11和user12用户生效即可滿足需求1。

再來看需求2,新建三個共享,這個怎麼破?其實很簡單啦,配置文件裏已經寫好了現成的,我們只需要複製成三份就好。
轉到配置文件的末尾,可以看到以[public]關鍵字開頭的配置部分,這就是配置共享的模板。

複製前需要注意,這部分配置文件默認被註釋掉了,如果你不想在複製完去一點點的刪除三份註釋符號的話那最好在複製之前把這一份註釋符號刪掉,如下圖:

三個共享有了,但他們的配置文件是一摸一樣的,那共享名和共享的文件夾一定也是一樣的,要如何為每一個共享做定製呢?
先看這部分配置文件的簡單介紹:

開頭的[public]是共享名,可任意起,與實際的共享文件夾可以不同名。
comment是沒用的文本介紹。
path是指定要共享的本地文件夾的路徑。
public是用來指定是否共享的,有yes和no兩個選項,至於這兩個選項分別是啥意思我就不囉嗦了。
writable用於配置此共享是否支持寫入。
printable指定是否支持打印,沒有特殊需求的話這裏都保持註釋狀態。
write list此選項用於決定哪些用户或組對此共享擁有寫入權限,此處一般保持註釋就好,因為linux的權限管理可比samba的好用多了。

以下是按照需求2修改過的配置文件,修改部分已經用紅筆標出來了,對照上方配置選項的解釋就可以輕鬆理解下圖的配置內容了。

權限配置部分:
下面來看需求3,很明顯這裏是需要做權限控制了。但我不得不嘮叨一下,samba自帶的權限管理配置起來那是相當的蛋疼,而且功能弱爆了。所以這裏我們使用linux系統權限管理加ACL來做權限控制。
關於ACL的介紹可以參考:

linux下acl權限詳解


在配置權限前,我們先把所需要的用户與組都創建完,並把他們加入到samba用户數據庫中,再把要共享的文件夾都創建出來。
新建用户:

useradd user11
useradd user12
useradd user1
useradd user2
useradd user3

新建組:

groupadd group1
groupadd group2
groupadd group3

將用户加入組:

usermod -G group1 user1
usermod -G group2 user2
usermod -G group3 user3

將系統用户加入到samba用户數據庫中。

pdbedit -a user11
pdbedit -a user11
pdbedit -a user1
pdbedit -a user2
pdbedit -a user3

使用pebedit命令將系統用户加入samba用户數據庫中時會提示輸入兩次密碼,此密碼可以與linux系統用户密碼不相同,加入成功後會出現類似如下提示:

創建共享的文件夾:

mkdir /tmp/a1
mkdir /tmp/a2
mkdir /tmp/a3

接下來就進入到了最重要的文件夾權限配置階段了。
先來看/tmp/a1目錄的權限配置。
將目錄所屬組改為group1

chown :group1 /tmp/a1

此時目錄/tmp/a1的權限為:

此時group1組的成員對目錄是沒有寫權限的,下面就賦予其讀寫執行的權限:

chmod 775 /tmp/a1


此時group1組已經擁有了應有的權限,但需求3裏面要求grou3組對該共享目錄也擁有全部權限,這個就需要ACL來完成了。
執行如下命令:

setfacl -m g:group3:rwx /tmp/a1       //配置ACL權限使group3組的成員對/tmp/a1目錄擁有全部權限

此時查看權限:

注意權限的最後多了一個+號,這證明ACL權限已經生效了,再執行。

getfacl /tmp/a1         //查看目錄的ACL權限


只要有如上圖畫紅線的部分即是配置成功。
至此/tmp/a1這個目錄的全部權限已經配置完成,而/tmp/a2目錄的權限與/tmp/a1的權限的配置方法雷同,這裏不再贅述。
再來看下/tmp/a3目錄的權限,很簡單,給他777的權限即可。

chmod 777 /tmp/a3

最後的最後,來看看需求4吧,就差這一個了。
這裏依然使用ACL權限來完成需求,而不通過修改samba的配置文件。
那要如何配置ACL呢?沒錯,只需要配置兩條默認ACL權限即可。

setfacl -m d:u::rwx /tmp/a?    //這裏使用通配符為所有以a開頭而第二個字符為任意字符的文件夾配置權限
setfacl -m d:g::rx /tmp/a?

以/tmp/a1文件夾的acl權限為例:

getfacl /tmp/a1


可以看到如上圖中紅色標註的部分即為配置成功。
 
好啦,4個需求已經全部滿足了,盡情測試吧。

linux下acl權限詳解

安裝軟件包

yum install -y acl

配置acl權限
用於acl權限管理的命令主要有兩個:

setfacl          //設置acl權限
getfacl          //查看acl權

首先來看setfacl
常用參數:

-b:刪除所有擴展的acl規則,基本的acl規則(所有者,羣組,其他)將被保留。
-d:設定默認的acl規則
-R:遞歸的對所有文件及目錄進行操作。
-m:修改文件或目錄的acl規則。
-x:刪除指定acl規則。

以上只列出常用參數,詳細命令幫助可參考:http://man.linuxde.net/setfacl
舉個例子:想讓user1這個用户對~/test目錄擁有全部權限,除了修改所有者或所屬組之外還能怎樣呢?
且往下看。

setfacl -Rm u:user1:rwx ~/test             //使user1用户對test目錄擁有全部權限。

執行以上命令後user1用户即可任意操作~/test目錄。
來看一下這條命令,setfacl,設置acl權限、參數R代表遞歸應用,m修改權限、u代表用户,如果想賦予某個組acl權限就用g,:後邊接的要賦予acl權限的用户名或組名(不填則修改所有者或所屬組的acl權限),緊接着下一個冒號後面跟的就是要賦予這個用户的權限了、最後接要操作的目錄或文件名,就這麼簡單。
再來看一個例子:

setfacl -m d:u::rwx ~/test                //為test目錄下新建的文件或目錄設置默認acl權限,對所有用户生效

如果寫成這樣:

setfacl -m d:u:user1:rwx ~/test

這條命令執行後可以達到什麼目的呢?我猜,聰明的讀者一定猜到了:是給user1創建的文件或目錄設置默認acl權限。
如果你是這樣想的,那麼恭喜你,猜錯了。
這條命令實際的意義其實是給所有用户創建的文件或目錄都加上user1這個用户的rwx的acl權限~
最後再來看下如何刪除acl權限

setfacl -x d:u:user1 ~/test              //刪除~/test目錄中關於user1的默認acl權限
setfacl -b ~/test                        //刪除~/test目錄上所有的acl權限

查看acl權限
查看acl權限使用getfacl命令

getfacl ~/test                           //查看~/test目錄的acl權限

會輸入類似如下內容

另外,當我們執行ls -l時會發現,擁有acl權限的文件或文件夾其linux默認權限後面多一個“+”號。

最後需要注意的是:linux默認權限是優於acl權限的,就是説當liux默認權限和acl權限同時存在時,系統會優先考慮linux默認權限。