Linux ACL

转载自百度文库


ACL 简介

用户权限管理始终是 Unix 系统管理中最重要的环节。大家对 Linux/Unix UGO 权限管理方式一定不陌生,还有最常用的 chmod 命令。为了实现一些比较复杂的权限管理,往往不得不创建很多的组,并加以详细的记录和区分(很多时候就是管理员的噩梦)。可以针对某一个用户对某一文件指定一个权限,恐怕管理员都期待的功能。比如对某一个特定的文件,用户 A 可以读取,用户 B 所在的组可以修改,惟独用户 B 不可以 …… 。于是就有了 IEEE POSIX 1003.1e 这个 ACL 的标准。所谓 ACL ,就是 Access Control List ,一个文件 / 目录的访问控制列表,可以针对任意指定的用户 / 组分配 RWX 权限。现在主流的商业 Unix 系统都支持 ACL FreeBSD 也提供了对 ACL 的支持。 Linux 在这个方面也不会落后,从 2.6 版内核开始支持 ACL

准备工作
支持 ACL 需要内核和文件系统的支持。现在 2.6 内核配合 EXT2/EXT3, JFS, XFS, ReiserFS 等文件系统都是可以支持 ACL 的。用自己工作用的物理分区体验 ACL ,总是不明智的行为。万一误操作导致分区的损坏,造成数据的丢失,损失就大了。作一个 loop 设备是个安全的替代方法。这样不需要一个单独的分区,也不需要很大的硬盘空间,大约有个几百 KB 就足够进行我们的体验了。 OK ,下面我使用 Fedora Core 5 Ext3 文件开始对 Linux ACL 的体验。
首先创建一个 512KB 的空白文件:
[root@FC3-vm opt]# dd if=/dev/zero of=/opt/testptn count=512
512+0 records in
512+0 records out
和一个 loop 设备联系在一起:
[root@FC3-vm opt]# losetup /dev/loop0 /opt/testptn
创建一个 EXT2 的文件系统:
[root@FC3-vm opt]# mke2fs /dev/loop0
mke2fs 1.35 (28-Feb-2004)
max_blocks 262144, rsv_groups = 32, rsv_gdb = 0
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
32 inodes, 256 blocks
12 blocks (4.69%) reserved for the super user
First data block=1
1 block group
8192 blocks per group, 8192 fragments per group
32 inodes per group
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
挂载新建的文件系统(注意 mount 选项里的 acl 标志,我们靠它来通知内核我们需要在这个文件系统中使用 ACL ):
[root@FC3-vm opt]# mount -o rw,acl /dev/loop0 /mnt
[root@FC3-vm opt]# cd /mnt
[root@FC3-vm mnt]# ls
lost+found
现在我已经得到了一个小型的文件系统。而且是支持 ACL 的。并且即使彻底损坏也不会影响硬盘上其他有价值的数据。可以开始我们的 ACL 体验之旅了。

体验 1 ACL 的基本操作:添加和修改
我首先新建一个文件作为实施 ACL 的对象:
[root@FC3-vm mnt]# touch file1
[root@FC3-vm mnt]# ls -l file1
-rw-r--r-- 1 root root 7 Dec 11 00:28 file1
然后看一下这个文件缺省的 ACL ,这时这个文件除了通常的 UGO 的权限之外,并没有 ACL
[root@FC3-vm mnt]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
other::r-
*
注意:即使是不支持 ACL 的情况下, getfacl 仍然能返回一个这样的结果。不过 setfacl 是不能工作的。
下面添加几个用户和组,一会我将使用 ACL 赋予他们不同的权限:
[root@FC3-vm mnt]# groupadd testg1
[root@FC3-vm mnt]# useradd testu1
[root@FC3-vm mnt]# useradd testu2
[root@FC3-vm mnt]# usermod -G testg1 testu1
现在我们看看 testu1 能做什么:
[root@FC3-vm mnt]# su testu1
[testu1@FC3-vm mnt]$ echo "testu1" >> file1
bash: file1: Permission denied
失败了。因为 file1 并不允许除了 root 以外的用户写。我们现在就通过修改 file1 ACL 赋予 testu1 足够的权限:
[root@FC3-vm mnt]# setfacl -m u:testu1:rw file1
[root@FC3-vm mnt]# su testu1
[testu1@FC3-vm mnt]$ echo "testu1" >> file1
[testu1@FC3-vm mnt]$ cat file1
testu1
修改成功了,用户 testu1 可以对 file1 做读写操作了。我们来看一下 file1 ACL
[testu1@FC3-vm mnt]$ getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:testu1:rw-
group::r--
mask::rw-
other::r-
我们 ls 看一下:
[root@FC3-vm mnt]# ls -l file1
-rw-rw-r--+ 1 root root 7 Dec 11 00:28 file1
可以看到那个 "+" 了么?就在通常我们看到的权限位的旁边。这个说明 file1 设置了 ACL 接下来我们修改一下 testu1 的权限,同时给 testg1 这个组以读的权限:
[root@FC3-vm mnt]# setfacl -m u:testu1:rwx,g:testg1:r file1
[root@FC3-vm mnt]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:testu1:rwx
group::r--
group:testg1:r--
mask::rwx
other::r-
可以看到设置后的权限, testu1 已经有了执行的权限,而 testg1 这个组也获得了读取文件内容的权限。也许有人已经注意到了两个问题:首先, file1 的组权限从 r-- 变成了 rw- 。其次, mask 是什么?为什么也变化了呢?我们先从 mask 说起。如果说 acl 的优先级高于 UGO ,那么 mask 就是一个名副其实的最后一道防线。它决定了一个用户 / 组能够得到的最大的权限。这样我们在不破坏已有 ACL 的定义的基础上,可以临时提高或是降低安全级别:
[root@FC3-vm mnt]# setfacl -m mask::r file1
[root@FC3-vm mnt]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:testu1:rwx #effective:r--
group::r--
group:testg1:r--
mask::r--
other::r--
[root@FC3-vm mnt]# ls -l file1
-rw-r--r--+ 1 root root 7 Dec 11 00:28 file1
testu1 对应的 ACL 项的后边出现了 effective 的字样,这是实际 testu1 得到的权限。 Mask 只对其他用户和组的权限有影响,对 owner other 的权限是没有任何影响的。执行 ls 的结果也显示 UGO 的设置也有了对应的变化。因为在使用了 ACL 的情况下, group 的权限显示的就是当前的 mask 。通常我们把 mask 设置成 rwx ,以不阻止任何的单个 ACL 项。
*
需要注意的是,每次修改或添加某个用户或组的 ACL 项的时候, mask 都会随之修改以使最新的修改能够真正生效。所以如果需要一个比较严格的 mask 的话,可能需要每次都重新设置一下 mask

体验 2 ACL 的其他功能:删除和覆盖
我们来看一下其他的 ACL 操作。首先如何删除已有的 ACL 项呢?
[root@FC3-vm mnt]# setfacl -x g:testg1 file1
[root@FC3-vm mnt]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:testu1:rwx
group::r--
mask::rwx
other::r--
我们看到 testg1 的权限已经被去掉了。如果需要去掉所有的 ACL 可以用 -b 选项。所有的 ACL 项都会被去掉。
[root@FC3-vm mnt]# setfacl -b file1
[root@FC3-vm mnt]# 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@FC3-vm mnt]# setfacl --set u::rw,u:testu1:rw,g::r,o::- file1
[root@FC3-vm mnt]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:testu1:rw-
group::r--
mask::rw-
other::---
o::-
是另一个需要注意的地方。其实完整的写法是 other::--- ,正如 u::rw 的完整写法是 user::rw- 。通常我们可以把 "-" 省略,但是当权限位只包含 "-" 时,必须至少保留一个。如果写成了 o:: ,就会出现错误。
如果希望对目录下的所有子目录都设置同样的 ACL ,可以使用 -R 参数:
[root@FC3-vm mnt]# setfacl --set u::rw,u:testu1:rw,g::r,o::- dir1
如果希望能从一个文件来读入 ACL ,并修改当前的文件的 ACL ,可以用 -M 参数:
[root@FC3-vm mnt]# cat test.acl
user:testu1:rw-
user:testu2:rw-
group:testg1:r--
group:testg2:r--
mask::rw-
other::---

体验 3 目录的默认 ACL
如果我们希望在一个目录中新建的文件和目录都使用同一个预定的 ACL ,那么我们可以使用默认 (Default) ACL 。在对一个目录设置了默认的 ACL 以后,每个在目录中创建的文件都会自动继承目录的默认 ACL 作为自己的 ACL 。用 setfacl -d 选项就可以做到这一点:
[root@FC3-vm mnt]# setfacl -d --set g:testg1:rwx dir1
[root@FC3-vm mnt]# 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
可以看到默认 ACL 已经被设置了。建立一个文件试试:
[root@FC3-vm mnt]# touch dir1/file1
[root@FC3-vm mnt]# 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--
file1
自动继承了 dir1 testg1 设置的 ACL 。只是由于 mask 的存在使得 testg1 只能获得 rw- 权限。
 
回页首
体验 4 备份和恢复 ACL
主要的文件操作命令 cp mv 都支持 ACL ,只是 cp 命令需要加上 -p 参数。但是 tar 等常见的备份工具是不会保留目录和文件的 ACL 信息的。 如果希望备份和恢复带有 ACL 的文件和目录,那么可以先把 ACL 备份到一个文件里。以后用 --restore 选项来回复这个文件中保存的 ACL 信息:
[root@FC3-vm mnt]# getfacl -R dir1 > dir1.acl
[root@FC3-vm mnt]# ls -l dir1.acl
total 16
-rw-r--r-- 1 root root 310 Dec 12 21:10 dir1.acl
我们用 -b 选项删除所有的 ACL 数据,来模拟从备份中回复的文件和目录:
[root@FC3-vm mnt]# setfacl -R -b dir1
[root@FC3-vm mnt]# getfacl -R dir1
# file: dir1
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: dir1/file1
# owner: root
# group: root
user::rw-
group::r--
other::r--
现在我们从 dir1.acl 中恢复被删除的 ACL 信息:
[root@FC3-vm mnt]# setfacl --restore dir1.acl
[root@FC3-vm mnt]# 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--
结语
ACL
的引入使得大规模的复杂权限管理可以很容易的在 Linux 上实现。对于 /home 这样存放大量用户文件的分区,可以做到更有效的管理。但是我们也看到在备份工具等方面的欠缺,好在 FC2 中已经开始包含了 star 这样的支持 ACL 的备份工具,虽然还是 alpha 版。
在单个文件的 ACL 条目的数量上,不同的文件系统有不同的限制。 Ext2 Ext3 只能支持每个文件 25 ACL 条目。 ReiserFS JFS 可以支持超过 8,000 个条目。这个方面 Ext* 文件系统还需要加强。
无论多么复杂的系统中,文件系统的权限管理都是最基础的内容。而 Linux ACL 的支持,无疑是一把管理海量用户系统的利器,对 Linux 在大规模的企业级应用中更方便的发挥更大的作用添了一把火。
Linux ACL
精华
1.
为什么要使用 ACL
先让我们来简单地复习一下 Linux file permission.
linux , 对一个文件 ( 或者资源 ) 可以进行操作的对象被分为三类 : file owner( 文件的拥有者 ), group( , 注意不一定是文件拥有者所在的组 ), other ( 其他 )
而对于每一类别又分别定义了 read, write and execute/search permission ( 这里不讨论 SUID, SGID 以及 Sticky bit 的设置 )
通过 ls -l 命令就我们就可以列出一个文件的 permission
代码 :
# ls -l
[leonard@localhost ~]$ ls -l
-rw-rw---- 1 leonard admin 0 Jul 3 20:12 test.txt
在这里说明了对于 test.txt 这个文件 leonard 用户 ( 由于是 file owner) 拥有 read & write permission. 所有属于 admin group 的用户 (group) 拥有 read & write permission. 其他任何用户 (other) 对于文件没有任何的 permission
如果我们现在希望 john 这个用户也可以对 test.txt 文件进行读写操作 . 我自己大概会想到以下几种办法 ( 这里假设 john 不属于 admin group)
1.
给文件的 other 类别增加 read and write permission. 这样由于 john 会被归为 other 类别 , 那么他也将拥有读写的权限
2.
john 加入到 admin group. 那么 john 会被归为 group 类别 , 那么他将拥有读写的权限
3.
设置 sudo, 使 john 能够以 leonard 的身份对 test.txt 进行操作 , 从而获得读写权限
第一种做法的问题在于所有用户都将对 test.txt 拥有读写操作 , 显然这种做法不可取
第二种做法的问题在于 john 被赋予了过多的权限 . 所有属于 admin 组的文件 ,john 都可以拥有其等同的权限了
第三种做法虽然可以达到只限定 john 用户一人拥有对 test.txt 文件的读写权限 . 但是需要对 sudoers 文件进行严格的格式控制 . 而且当文件数量和用户很多的时候 , 这种方法就相当地不灵活了
看来好像都没有一个很好的解决方案 . 其实问题就出在 Linux file permission 里面 , 对于 other 的定义过于广泛 , 以至于很难把 permission 限定于一个不属于 file owner group 的用户身上 . 那么 Access Control List (ACL) 就是用来帮助我们解决这个问题的 .
简单地来说 ACL 就是可以设置特定用户或者用户组对于一个文件的操作权限 . 需要掌握的命令也只有三个 : getfacl, setfacl, chacl
在接下去讨论之前大家可以先安装上 ACL RPM
代码 :
# rpm -ivh libacl-2.2.39-1.1 acl-2.2.39-1.1.i386.rpm
2. ACL
的名词定义
先来看看在 ACL 里面每一个名词的定义 . 这些名词我大多从 man page 上摘下来虽然有些枯燥 , 但是对于理解下面的内容还是很有帮助的
ACL
是由一系列的 Access Entry 所组成的 . 每一条 Access Entry 定义了特定的类别可以对文件拥有的操作权限 . Access Entry 有三个组成部分 : Entry tag type, qualifier (optional), permission
我们先来看一下最重要的 Entry tag type, 它有以下几个类型
ACL_USER_OBJ:
相当于 Linux file_owner permission
ACL_USER:
定义了额外的用户可以对此文件拥有的 permission
ACL_GROUP_OBJ:
相当于 Linux group permission
ACL_GROUP:
定义了额外的组可以对此文件拥有的 permission
ACL_MASK:
定义了 ACL_USER, ACL_GROUP_OBJ ACL_GROUP 的最大权限 ( 这个我下面还会专门讨论 )
ACL_OTHER:
相当于 Linux other permission
让我们来据个例子说明一下 . 下面我们就用 getfacl 命令来查看一个定义好了的 ACL 文件
代码 :
[leonard@localhost ~]$ getfacl ./test.txt
# file: test.txt
# owner: leonard
# group: admin
user::rw-
user:john:rw-
group::rw-
group:dev:r--
mask::rw-
other::r--
前面三个以 # 开头的定义了文件名 ,file owner group. 这些信息没有太大的作用 , 接下来我们可以用 --omit-header 来省略掉
user::rw-
定义了 ACL_USER_OBJ, 说明 file owner 拥有 read and write permission
user:john:rw-
定义了 ACL_USER, 这样用户 john 就拥有了对文件的读写权限 , 实现了我们一开始要达到的目的
group::rw-
定义了 ACL_GROUP_OBJ, 说明文件的 group 拥有 read and write permission
group:dev:r--
定义了 ACL_GROUP, 使得 dev 组拥有了对文件的 read permission
mask::rw-
定义了 ACL_MASK 的权限为 read and write
other::r--
定义了 ACL_OTHER 的权限为 read
从这里我们就可以看出 ACL 提供了我们可以定义特定用户和用户组的功能 . 那么接下来我们就来看一下如何设置一个文件的 ACL
3.
如何设置 ACL 文件
首先我们还是要讲一下设置 ACL 文件的格式 . 从上面的例子中我们可以看到每一个 Access Entry 都是由三个被 : 号分隔开的字段所组成 . 第一个就是 Entry tag type
user
对应了 ACL_USER_OBJ ACL_USER
group
对应了 ACL_GROUP_OBJ ACL_GROUP
mask
对应了 ACL_MASK
other
对应了 ACL_OTHER
第二个字段称之为 qualifier. 也就是上面例子中的 john dev . 它定义了特定用户和拥护组对
于文件的权限 . 这里我们也可以发现只有 user group 才有 qualifier, 其他的都为空
第三个字段就是我们熟悉的 permission . 它和 Linux permission 一样定义 , 这里就不多讲了
下面我们就来看一下怎么设置 test.txt 这个文件的 ACL 让它来达到我们上面的要求
一开始文件没有 ACL 的额外属性
代码 :
[leonard@localhost ~]$ ls -l
-rw-rw-r-- 1 leonard admin 0 Jul 3 22:06 test.txt
[leonard@localhost ~]$ getfacl --omit-header ./test.txt
user::rw-
group::rw-
other::r--
我们先让用户 john 拥有对 test.txt 文件的读写权限
代码 :
[leonard@localhost ~]$ setfacl -m user:john:rw- ./test.txt
[leonard@localhost ~]$ getfacl --omit-header ./test.txt
user::rw-
user:john:rw-
group::rw-
mask::rw-
other::r--
这时我们就可以看到 john 用户在 ACL 里面已经拥有了对文件的读写权限 . 这个时候如果我们查看一下 linux permission 我们还会发现一个不一样的地方
代码 :
[leonard@localhost ~]$ ls -l ./test.txt
-rw-rw-r--+ 1 leonard admin 0 Jul 3 22:06 ./test.txt
在文件 permission 的最后多了一个 + . 当任何一个文件拥有了 ACL_USER 或者 ACL_GROUP 的值以后我们就可以称它为 ACL 文件 . 这个 + 号就是用来提示我们的
我们还可以发现当一个文件拥有了 ACL_USER 或者 ACL_GROUP 的值时 ACL_MASK 同时也会被定义
接下来我们来设置 dev 组拥有 read permission
代码 :
[leonard@localhost ~]$ setfacl -m group:dev:r-- ./test.txt
[leonard@localhost ~]$ getfacl --omit-header ./test.txt
user::rw-
user:john:rw-
group::rw-
group:dev:r--
mask::rw-
other::r--
到这里就完成了我们上面讲到的要求 . 是不是很简单呢
4. ACL_MASK
Effective permission
这里需要重点讲一下 ACL_MASK, 因为这是掌握 ACL 的另一个关键
Linux file permission 里面大家都知道比如对于 rw-rw-r-- 来说 , 当中的那个 rw- 是指文件组的 permission. 但是在 ACL 里面这种情况只是在 ACL_MASK 不存在的情况下成立 . 如果文件有 ACL_MASK , 那么当中那个 rw- 代表的就是 mask 值而不再是 group permission
让我们来看下面这个例子
代码 :
[leonard@localhost ~]$ ls -l
-rwxrw-r-- 1 leonard admin 0 Jul 3 23:10 test.sh
这里说明 test.sh 文件只有 file owner: leonard 拥有 read, write, execute/search permission. admin 组只有 read and write permission
现在我们想让用户 john 也对 test.sh 具有和 leonard 一样的 permission
代码 :
[leonard@localhost ~]$ setfacl -m user:john:rwx ./test.sh
[leonard@localhost ~]$ getfacl --omit-header ./test.sh
user::rwx
user:john:rwx
group::rw-
mask::rwx
other::r--
这里我们看到 john 已经拥有了 rwx permission. mask 值也被设定为 rwx. 那是因为它规定了 ACL_USER, ACL_GROUP ACL_GROUP_OBJ 的最大值
现在我们再来看 test.sh Linux permission, 它已经变成了
代码 :
[leonard@localhost ~]$ ls -l
-rwxrwxr--+ 1 leonard admin 0 Jul 3 23:10 test.sh
那么如果现在 admin 组的用户想要执行 test.sh 的程序会发生什么情况呢 ? 它会被 permission deny. 原因在于实际上 admin 组的用户只有 read and write permission. 这里当中显示的 rwx ACL_MASK 的值而不是 group permission
所以从这里我们就可以知道 , 如果一个文件后面有 + 标记 , 我们都需要用 getfacl 来确认它的 permission, 以免发生混淆
下面我们再来继续看一个例子
假如现在我们设置 test.sh mask read only, 那么 admin 组的用户还会有 write permission ?
代码 :
[leonard@localhost ~]$ setfacl -m mask::r-- ./test.sh
[leonard@localhost ~]$ getfacl --omit-header ./test.sh
user::rwx
user:john:rwx #effective:r--
group::rw- #effective:r--
mask::r--
other::r--
这时候我们可以看到 ACL_USER ACL_GROUP_OBJ 旁边多了个 #effective:r--, 这是什么意思呢 ?
让我们再来回顾一下 ACL_MASK 的定义 . 它规定了 ACL_USER, ACL_GROUP_OBJ ACL_GROUP 的最大权限 . 那么在我们这个例子中他们的最大权限也就是 read only. 虽然我们这里给
ACL_USER
ACL_GROUP_OBJ 设置了其他权限 , 但是他们真正有效果的只有 read 权限 .
这时我们再来查看 test.sh Linux file permission 时它的 group permission 也会显示其 mask 的值 (i.e. r--)
代码 :
[leonard@localhost ~]$ ls -l
-rwxr--r--+ 1 leonard admin 0 Jul 3 23:10 test.sh
5. Default ACL
上面我们所有讲的都是 Access ACL, 也就是对文件而言 . 下面我简单讲一下 Default ACL. Default ACL 是指对于一个目录进行 Default ACL 设置 , 并且在此目录下建立的文件都将继承此目录的 ACL
同样我们来做一个试验说明
比如现在 leonard 用户建立了一个 dir 目录
代码 :
[leonard@localhost ~]$ mkdir dir
他希望所有在此目录下建立的文件都可以被 john 用户所访问 . 那么我们就应该对 dir 目录设置 Default ACL
代码 :
[leonard@localhost ~]$ setfacl -d -m user:john:rw ./dir
[leonard@localhost ~]$ getfacl --omit-header ./dir
user::rwx
group::rwx
other::r-x
default:user::rwx
default:user:john:rwx
default:group::rwx
default:mask::rwx
default: other::r-x
这里我们可以看到 ACL 定义了 default 选项 , john 用户拥有了 default read, write, excute/search permission. 所有没有定义的 default 都将从 file permission copy 过来
现在 leonard 用户在 dir 下建立一个 test.txt 文件
代码 :
[leonard@localhost ~]$ touch ./dir/test.txt
[leonard@localhost ~]$ ls -l ./dir/test.txt
-rw-rw-r--+ 1 leonard leonard 0 Jul 3 23:46 ./dir/test.txt
[leonard@localhost ~]$ getfacl --omit-header ./dir/test.txt
user::rw-
user:john:rw-
group::rwx #effective:rw-
mask::rw-
other::r--
这里我们看到在 dir 下建立的文件 john 用户自动就有了 read and write permission
6. ACL
相关命令
前面的例子中我们都注意到了 getfacl 命令是用来读取文件的 ACL, setfacl 是用来设定文件的
Acess ACL.
这里还有一个 chacl 是用来改变文件和目录的 Access ACL and Default ACL. 它的具体参数大家可以去看 man page. 我只想提及一下 chacl -B. 它可以彻底删除文件或者目录的 ACL 属性 ( 包括 Default ACL). 比如你即使用了 setfacl -x 删除了所有文件的 ACL 属性 , 那个 + 号还是会出现在文件的末尾 . 所以正确的删除方法应该是用 chacl -B
cp 来复制文件的时候我们现在可以加上 -p 选项 . 这样在拷贝文件的时候也将拷贝文件的 ACL 属性 . 对于不能拷贝的 ACL 属性将给出警告
mv
命令将会默认地移动文件的 ACL 属性 . 同样如果操作不允许的情况下会给出警告
7.
需要注意的几点
如果你的文件系统不支持 ACL 的话 , 你也许需要重新 mount 你的 file system
mount -o
remount, acl [mount point]
如果用 chmod 命令改变 Linux file permission 的时候相应的 ACL 值也会改变 . 反之改变 ACL 的值 , 相应的 file permission 也会改变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值