linux下文件擴展權限ACL的設置

文件擴展權限限制ACL

用戶大家對 Linux/Unix 的 UGO 權限管理方式一定不陌生.爲了實現一些比較複雜的權限管理,往往不得不創建很多的組,並加以詳細的記錄和區分這是一件很麻煩的事。爲了能使某一個用戶對某一文件指定一個權限,比如對某一個特定的文件,用戶A可以讀取,用戶B所在的組可以修改,惟獨用戶B不可以……。於是就有了IEEE POSIX 1003.1e這個ACL的標準。ACL的出現專門解決了這個問題。下面我們來探討下ACL在實際生活中的應用。

擴展acl的一些基本語法

getfacl -d 文件的默認權限

setfacl -m 設置擴展權限

|u 針對用戶設置擴展權限

|g 針對組置擴展權限

|d 設置默認權限

|m 設定統一收回麼個選項

-k 移除默認acl條目

-R 權限遞歸

-x 取消特定權限

setfacl -想 取消寬展權限

首先我們要在linux加載硬盤acl功能的支持

#vim /etc/fstab

   /rich    ext3    defaults,acl    1 2

在default後面加入acl然後重新掛載硬盤

#mount –o remount | /home

查看驗證下是否添加成功

#mount(看/etc/fstab中添加的內容是否正常出現)新文件apple

#touch apple

#getfacl apple

#su - aaa

$vim /root/apple

這裏我們發現permission denied無寫權限

$su - root

#setfacl u:aaa:rwx

$vim /root/apple

這裏我們就可以正常寫入了,我們下面添加一個組

$su - root

#getfacl g:nasasha:rw

#su - nasasha

$vim /root/apple

# touch file1

# ls -l file1

-rw-r--r-- 1 root root 7 Dec 11 00:28 file1

查看文件缺省的ACL,這時這個文件除了通常的UGO的權限之外,並沒有ACL:

# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

group::r--

other::r-

下面添加幾個用戶和組,一會我將使用ACL賦予他們不同的權限:

# groupadd testg1

# useradd testu1

# useradd testu2

# usermod -G testg1 testu1

切換到用戶testu1

# su testu1

$ echo "testu1" >> file1

bash: file1: Permission denied

失敗了。因爲file1並不允許除了root以外的用戶寫。我們現在就通過修改file1的ACL賦予testu1足夠的權限:

# setfacl -m u:testu1:rw file1

# su testu1

$ echo "testu1" >> file1

$ cat file1

testu1

修改成功了,用戶testu1可以對file1做讀寫操作了。我們來看一下file1的ACL:

$ getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:testu1:rw-

group::r--

mask::rw-

other::r-

我們ls看一下:

# ls -l file1

-rw-rw-r--+ 1 root root 7 Dec 11 00:28 file1

如果仔細看的話,我們會發現權限末尾有個“+”號,這個說明file1設置了ACL, 接下來我們修改一下testu1的權限,同時給testg1這個組以讀的權限:

# setfacl -m u:testu1:rwx,g:testg1:r file1

# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:testu1:rwx

group::r--

group:testg1:r--

mask::rwx

other::r-

# setfacl -m mask::r file1]# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:testu1:rwx #effective:r--

group::r--

group:testg1:r--

mask::r--

other::r--

# ls -l file1

-rw-r--r--+ 1 root root 7 Dec 11 00:28 file1

刪除已有的ACL項

# setfacl -x g:testg1 file1

# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:testu1:rwx

group::r--

mask::rwx

other::r--

我們看到testg1的權限已經被去掉了。如果需要去掉所有的ACL可以用-b選項。所有的ACL項都會被去掉。

# setfacl -b file1

# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

group::r--

other::r--

# setfacl --set u::rw,u:testu1:rw,g::r,o::- file1

# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:testu1:rw-

group::r--

mask::rw-

other::---

目錄的默認ACL

]# setfacl -d --set g:testg1:rwx dir1

]# getfacl dir1

# file: dir1

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

default:user::rwx

default:group::r-x

default:group:testg1:rwx

default:mask::rwx

default:other::r-x

建立一個文件試試:

# touch dir1/file1

# getfacl dir1/file1

# file: dir1/file1

# owner: root

# group: root

user::rw-

group::r-x #effective:r--

group:testg1:rwx #effective:rw-

mask::rw-

other::r--

備份和恢復ACL

# getfacl -R dir1 > dir1.acl

# ls -l dir1.acl

total 16

-rw-r--r-- 1 root root 310 Dec 12 21:10 dir1.acl

我們用-b選項刪除所有的ACL數據,來模擬從備份中回覆的文件和目錄:

# setfacl --restore dir1.acl

# getfacl -R dir1

# file: dir1

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

default:user::rwx

default:group::r-x

default:group:testg1:rwx

default:mask::rwx

default:other::r-x

# file: dir1/file1

# owner: root

# group: root

user::rw-

group::r-x #effective:r--

group:testg1:rwx #effective:rw-

mask::rw-

other::r--

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章