文件擴展權限限制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::--- |
]# 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-- |
# 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-- |