天天看點

主機的具體權限規劃:ACL的使用

主機的具體權限規劃:ACL的使用

什麼是ACL 

ACL 是Access Control List 的縮寫,主要的目的是在提供傳統的owner,group,others 的 

read,write,execute 權限之外的細部權限設定。ACL 可以針對單一使用者,單一檔案或目錄來進行 r,w,x 的權限規範,對與需要特殊權限的使用狀況非常有幫助。

那ACL 主要可以針對哪些方面來控制權限呢?他主要可以針對幾個項目: 

   · 使用者 (user) :可以針對使用者來設定權限; 

   · 群組 (group) :針對群組為對象來設定其權限; 

   · 默訃屬性 (mask) :還可以針對在該目錄下在建立新檔案/ 目錄時,規範新資料的預設權限;

好了,再來看看如何讓你的檔案系統可以支援ACL 吧! 

如何啟動ACL 

由與ACL 是傳統的 Unix-like 作業系統權限的額外支援項目,是以要使用ACL 必須要有檔案系統的支 持才行。目前绛大部分的檔案系統都有支援ACL 的功能,包括 ReiserFS, EXT2/EXT3, JFS, XFS 等等。 在我們的 CentOS 5.x 當中,預設使用 Ext3 是啟動ACL 支援的!至與察看你的檔案系統是否支援ACL 

可以這樣看: 

[root@localhost ~]# mount

如果看不到acl再用一下指令

[root@localhost ~]# dumpe2fs -h /dev/sda1

------------------略----------------

Default mount options:    user_xattr acl

由mount 單純去查閱不見得可以看到實際的項目,由與目前新的distributions 常常會主動加入某些預設功能,如上表所示,其實CentOS 5.x 在預設的情況下 (Default mount options:) 就幫你加入acl 的 支援了!那如果你的系統預設不會幫你加上acl 癿支援, 你可以這樣做:

 [root@localhost /]# vi /etc/fstab 在default後加,acl

<a href="http://blog.51cto.com/attachment/201209/132523592.png" target="_blank"></a>

[root@localhost /]# umount /dev/sda3

[root@localhost /]# mount -a

<a href="http://blog.51cto.com/attachment/201209/132533418.png" target="_blank"></a>

ACL 的設定技巧:getfacl, setfacl 

好了,讓你的filesystem 啟動ACL 支援後,接下來該如何設定與觀察ACL 呢?

利用一下兩個就可以了: 

   · getfacl :取得某個檔案/ 目錄的ACL 設定項目; 

   · setfacl :設定某個目錄/檔案的ACL 規範。 

setfacl 指令用法 

 [root@www ~]# setfacl [-bkRd] [{-m|-x} acl 參數] 目标檔案名 

 選項與參數: 

 -m :設定後續的acl 參數給檔案使用,不可與 -x 合用; 

 -x :初除後續的acl 參數,不可與 -m 合用; 

 -b :移除所有的ACL 設定參數; 

 -k :移除預設的ACL 參數; 

 -R :遞歸設定acl    ,亦即包括次目錄都會被設定起來; 

 -d :設定『預訓acl 參數』的意思!叧對目路有效,在該目路建立的資料會引用 

 此預設值 

1. 針對特定使用者的方式: 

 設定規範:『 u:[使用者賬号清單]:[rwx] 』,例如針對wsm的權限規範 

  rx : 

<a href="http://blog.51cto.com/attachment/201209/132546126.png" target="_blank"></a>

[root@localhost ~]# setfacl -m u:wsm:rx acl_test

<a href="http://blog.51cto.com/attachment/201209/132612589.png" target="_blank"></a>

如果一個檔案設定了ACL 參數後,他的權限部分就會多出一個 + 号了!但是此時你看到的權限不 實際權限可能就會有點誤差!那要如何觀察呢?就透過getfacl 吧!

getfacl 指令用法 

 [root@www ~]# getfacl filename 

getfacl 的選項幾乎與setfacl 相同!是以這裡就免去了選項的說明啊! 

列出我們設定acl_test的權限内容

[root@localhost ~]# getfacl acl_test 

# file: acl_test

# owner: root

# group: root

user::rw-

user:wsm:r-x

group::r--

mask::r-x

other::r--

以上面的結果來看,我們剛剛訓定的wsm 對與這個檔案具有 r 不x 的權限啦!

group類型的 setfacl 設定!

[root@localhost ~]# setfacl -m g:mygroup:rx acl_test 

<a href="http://blog.51cto.com/attachment/201209/132635564.png" target="_blank"></a>

3. 針對有效權限 mask 的設定方式: 

 # 設定規範:『 m:[rwx] 』,例如針對剛剛癿檔案規範為僅有r 

[root@localhost ~]# setfacl -m m:r acl_test

<a href="http://blog.51cto.com/attachment/201209/132647185.png" target="_blank"></a>

Wsm群組mygroup僅具有r的權限,,不存在有x權限了

任務 在/srv/acl 這個目錄,讓 wsm 可以進入查閱,但 myuser1 不具有修改的權力。 由與wsm 是獨立的使用者不群組,而/srv 是附屬與/ 之下的,是以/srv 已經具有acl 功能。

若沒有可以用[root@localhost home]# mount -o remount  / 指令

透過如下的設定即可搞定

1. 先測試看看,使用 wsm 能否進入該目錄?

<a href="http://blog.51cto.com/attachment/201209/132656623.png" target="_blank"></a>

2. 開始用 root 的身份來設定一下該目錄的權限吧! 

[root@localhost ~]# setfacl -m u:wsm:rx /srv/acl

<a href="http://blog.51cto.com/attachment/201209/132708228.png" target="_blank"></a>

3. 再使用wsm去測試看看結果

<a href="http://blog.51cto.com/attachment/201209/132720581.png" target="_blank"></a>

可以檢視,但不能寫入

ACL 的權限設定是否能夠被次目錄所『繼承?』先試看看:

[root@localhost ~]# cd /srv/acl/

<a href="http://blog.51cto.com/attachment/201209/132733548.png" target="_blank"></a>

你可以明顯的發現,權限後面都沒有 +  ,代表這個acl 屬性并沒有繼承喔!如果你想要讓acl 在目路底 下的資料都有繼承的功能,那就得如下這樣做了!

讓 wsm 在/s rv/acl 底下一直具有 rx 的預設權限! 

[root@localhost acl]# setfacl -m d:u:wsm:rx /srv/acl/

<a href="http://blog.51cto.com/attachment/201209/132747978.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201209/132756564.png" target="_blank"></a>

看吧!确實有繼承喔!然後我們使用getfacl 再次确認看看! 

<a href="http://blog.51cto.com/attachment/201209/132816760.png" target="_blank"></a>

那如果想要讓ACL 的屬性全部消失又要如何處理?透過『setfacl -b 檔名 』就可 

啦!太簡單了

本文轉自 abc16810 51CTO部落格,原文連結:http://blog.51cto.com/abc16810/1003669