字體:  

linux新的權限設定指令 - setfacl 與 getfacl 的用法

htctouch 發表於: 2012-6-30 22:54 來源: ADJ網路控股集團


ACL 是傳統的 Unix-like 作業系統權限的額外支援項目,因此要使用 ACL 必須要有檔案系統的支援才行。目前絕大部分的檔案系統都有支援 ACL 的功能,包括 ReiserFS, EXT2/EXT3, JFS, XFS 等等。

在 CentOS 5.x 當中,預設使用 Ext3 是啟動 ACL 支援的!至於察看你的檔案系統是否支援 ACL 可以這樣看:

QUOTE:


[root@www ~]# mount  <==直接查閱掛載參數的功能/dev/hda2 on / type ext3 (rw)
/dev/hda3 on /home type ext3 (rw)
#假設我們只要看這兩個裝置。但沒有看到 acl !


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


QUOTE:


[root@www ~]# mount -o remount,acl /
[root@www ~]# mount
/dev/hda2 on / type ext3 (rw,acl)
# 這樣就加入了!但是如果想要每次開機都生效,那就這樣做:

[root@www ~]# vi /etc/fstab
LABEL=/1   /   ext3    defaults,acl    1 1


用法:
  • 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 參數』的意思!只對目錄有效,在該目錄新建的資料會引用此預設值
如果我現在有個uploads 的目錄...想要設定遞迴且後續新增的目錄都能夠延續目前的設定...那麼可以這樣做
我想要讓原有的 uploads 的目錄不但FTP帳號可以使用...apache 也能同時共用 uploads的資料匣..
要達個這個目地需要執行兩次

(1) 讓目前的檔案目錄權限可以變更

#setfacl -R -m u:apache:rwx uploads/


(2) 讓未來新建的目錄可以引用此設定值
#setfacl -R -d -m u:apache:rwx uploads/


實務經驗: 這個必須設定兩次...因為 -d 參數的關係.要不然會產生之後新建的目錄沒有引用.如果只設定第2步.則會產生檔案沒有延用設定.所以分兩次設定.
才能夠讓目前的設定立刻生效,而且未來新增的目錄也會引用

檢查看看有沒有成功

#getfacl uploads

QUOTE:


user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:apache:rw-
default:group::r-x
default:mask::rwx
default:other::r-x


如果日後不需要了...要移除權限...
#setfacl -b -R uploads/

這樣就可以囉...
詳細使用可以 參考鳥哥文章:http://linux.vbird.org/linux_basic/0410accountmanager.php#setfacl