2.前期準備
3.ACL的基本操作:添加和修改
4.ACL的其他功能:刪除和覆蓋
5.目錄的默認ACL
6.備份和恢復ACL
7.結束語
1.ACL簡介
2.前期準備
支持ACL需要內核和文件系統的支持?,F在2.6內核以上版本配合EXT3/EXT4, JFS, XFS, ReiserFS等文件系統都是可以支持ACL。下面我們使用CentOS6.8和Ext4文件系統開始對Linux的ACL的體驗。
首先創建一個1M的空白文件:
[root@anonymous mnt]#dd if=/dev/zero of=testacl bs=1024 count=1000
1000+0 records in
1000+0 records out
1024000 bytes (1.0 MB) copied, 0.00832275 s, 123 MB/s
[root@anonymous mnt]#du -sh testacl
1000K testacl
和一個loop設備聯系在一起:
[root@anonymous mnt]#losetup /dev/loop1 testacl
[root@anonymous mnt]#mkfs.ext4 /dev/loop1
mke2fs 1.41.12 (17-May-2010)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
128 inodes, 1000 blocks
50 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=1048576
1 block group
8192 blocks per group, 8192 fragments per group
128 inodes per group
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
掛載新建的文件系統:
[root@anonymous mnt]#mount -o rw,acl /dev/loop1 /mnt/testdir
[root@anonymous mnt]#cd testdir/
[root@anonymous testdir]#ls
lost+found
3.ACL的基本操作:添加和修改
首先新建一個文件作為實施ACL的對象:
[root@anonymous testdir]#touch file1
[root@anonymous testdir]#ll
total 13
-rw-r–r–. 1 root root 0 Mar 11 15:48 file1
drwx——. 2 root root 12288 Mar 11 15:42 lost+found
然后看一下這個文件缺省的ACL,這時這個文件除了通常的UGO的權限之外,并沒有ACL:
[root@anonymous testdir]#getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r–
other::r–
下面添加幾個用戶和組,待會兒我將使用ACL賦予它們不同的權限:
[root@anonymous testdir]#groupadd grp1
[root@anonymous testdir]#useradd user1
[root@anonymous testdir]#useradd user2
[root@anonymous testdir]#usermod -G grp1 user1
我們將用戶切換到user1,發現并不能在此目錄下創建文件:
[root@anonymous testdir]#su user1
[user1@anonymous testdir]$echo “test” >> file1
bash: file1: Permission denied
失敗了,由于file1并不允許除了root以外的用戶寫,現在我們通過修改file1的ACL賦予user1足夠的權限:
[root@anonymous testdir]#setfacl -m u:user1:rw file1
[root@anonymous testdir]#su user1
[user1@anonymous testdir]$echo “test” >> file1
[user1@anonymous testdir]$cat file1
test
修改成功了,用戶user1可以對file1做讀寫操作了。再次查看file1的ACL:
[user1@anonymous testdir]$getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:user1:rw-
group::r–
mask::rw-
other::r–
ls一下:
[root@anonymous testdir]#ls -l file1
-rw-rw-r–+ 1 root root 5 Mar 11 15:59 file1
可以看到一個”+”,就在通常我們看到的權限位的旁邊。這說明了file1設置了ACL, 接下來我們修改一下grp1的權限,同時給tgrp1這個組以讀的權限:
[root@anonymous testdir]#setfacl -m u:user1:rwx,g:grp1:r file1
[root@anonymous testdir]#getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:user1:rwx
group::r–
group:grp1:r–
mask::rwx
other::r–
[root@anonymous testdir]#setfacl -m mask::r file1
[root@anonymous testdir]#getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:user1:rwx #effective:r–
group::r–
group:grp1:r–
mask::r–
other::r–
[root@anonymous testdir]#ls -l file1
-rw-r–r–+ 1 root root 5 Mar 11 15:59 file1
4.ACL的其他功能:刪除和覆蓋
如何刪除已有的ACL項呢?
[root@anonymous testdir]#setfacl -x g:grp1 file1
[root@anonymous testdir]#getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:user1:rwx
group::r–
mask::rwx
other::r–
我們看到grp1的權限已經被去掉了。如果需要去掉所有的ACL可以用-b選項。所有的ACL項都會被去掉。
[root@anonymous testdir]#setfacl -b file1
[root@anonymous testdir]#getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r–
other::r–
我們可以用–set 設置一些新的ACL項,并把原有的ACL項全部都覆蓋掉。和-m不同,-m選項只是修改已有的配置或是新增加一些。–set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的設置,不能象-m一樣只是添加ACL就可以了。比如下邊這一段:
[root@anonymous testdir]#setfacl –set u::rw,u:user1:rw,g::r,o::- file1
[root@anonymous testdir]#getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:user1:rw-
group::r–
mask::rw-
other::—
5.目錄的默認ACL
如果我們希望在一個目錄中新建的文件和目錄都使用同一個預定的ACL,那么我們可以使用默認(Default) ACL。在對一個目錄設置了默認的ACL以后,每個在目錄中創建的文件都會自動繼承目錄的默認ACL作為自己的ACL。用setfacl的-d選項就可以做到這一點:
[root@anonymous mnt]#setfacl -d –set g:grp1:rwx testdir
[root@anonymous mnt]#getfacl testdir
# file: testdir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:grp1:rwx
default:mask::rwx
default:other::r-x
[root@anonymous mnt]#touch testdir/file2
[root@anonymous mnt]#getfacl testdir/file2
# file: testdir/file2
# owner: root
# group: root
user::rw-
group::r-x #effective:r–
group:grp1:rwx #effective:rw-
mask::rw-
other::r–
6.備份和恢復ACL
[root@anonymous mnt]#getfacl -R testdir > test.acl
[root@anonymous mnt]#ls -l test.acl
-rw-r–r–. 1 root root 649 Mar 11 16:29 test.acl
[root@anonymous mnt]#setfacl -R -b testdir
[root@anonymous mnt]#getfacl -R testdir
# file: testdir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: testdir/file1
# owner: root
# group: root
user::rw-
group::r–
other::—
[root@anonymous mnt]#setfacl –restore test.acl
[root@anonymous mnt]#getfacl -R testdir
# file: testdir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:grp1:rwx
default:mask::rwx
default:other::r-x
# owner: root
# group: root
user::rw-
group::r-x #effective:r–
group:grp1:rwx #effective:rw-
mask::rw-
other::r–
7.結束語
8.參考資料
http://www.bestbits.at/richacl/?cm_mc_uid=29552251466514872527098&cm_mc_sid_50200000=1489219374
http://www.cnblogs.com/dkblog/archive/2011/10/21/2219765.html
原創文章,作者:mrlapulga,如若轉載,請注明出處:http://www.www58058.com/70972
咱,建議命令行換個顏色,看起來聽吃力的,太花了