A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
-bash: setfacl: command not found #Debian apt-get install acl #Ubuntu apt-get install acl #Alpine apk add acl #Arch Linux pacman -S acl #Kali Linux apt-get install acl #CentOS yum install acl #Fedora dnf install acl #OS X brew install acl #Raspbian apt-get install acl #Docker docker run cmd.cat/setfacl setfacl
setfacl 实用程序设置文件和目录的访问控制列表(ACLs)。在命令行中,一系列命令后面跟着一系列文件(依次是另一系列命令,依此类推)。
选项 -m 和 -x 在命令行上需要一个 ACL。多个 ACL 条目用逗号 , 分隔。选项 -M 和 -X 从文件或标准输入读取 ACL。ACL 条目格式在下面的 ACL Entries 部分中描述。
--set
和 --set file
选项设置文件或目录的 ACL。先前的 ACL 已被替换。此操作的 ACL 条目必须包含权限。
-m(--modify)
和 -m(--modify file)
选项修改文件或目录的 ACL。此操作的 ACL 条目必须包含权限。
-x(--remove)
和 -x(--remove file)
选项删除 ACL 条目。删除不存在的条目不是错误。只有不带 perms
字段的 ACL 条目才被接受为参数,除非定义了 POSIXLY_CORRECT
环境变量。
使用 -M 和 -X 选项读取文件时,setfacl 接受 getfacl 生成的输出。每行最多有一个 ACL 条目。在磅符号 # 之后,行尾的所有内容都被视为注释。
如果在不支持 ACL 的文件系统上使用 setfacl,setfacl 将对文件模式权限位进行操作。如果 ACL 不完全适合权限位,setfacl 将修改文件模式权限位以尽可能地反映 ACL,将错误消息写入标准错误,并返回退出状态大于 0
的值。
文件所有者和能够 CAP_FOWNER
的进程被授予修改文件的 ACL 的权限,这类似于访问文件模式所需的权限。
在当前的 Linux 系统中,root 是唯一具有 CAP_FOWNER
功能的用户,因此如果您不是该文件的所有者,则必须是使用 setfacl 的超级用户。
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ... setfacl --restore=file
-b,--remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。 -k,--remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。 -n,--no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。 --mask:重新计算有效权限,即使ACL mask被明确指定。 -d,--default:设定默认的acl规则。 --restore=file:从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的任何参数一同执行。 --test:测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。 -R,--recursive:递归的对所有文件及目录进行操作。 -L,--logical:跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。 -P,--physical:跳过所有符号链接,包括符号链接文件。 --version:输出setfacl的版本号并退出。 --help:输出帮助信息。 --:标识命令行参数结束,其后的所有参数都将被认为是文件名 -:如果文件名是-,则setfacl将从标准输入读取文件名。
文件:指定要查看 ACL 的文件。
[d[efault]:] [u[ser]:]uid [:perms] 指定用户的权限,文件所有者的权限(如果uid没有指定)。 [d[efault]:] g[roup]:gid [:perms] 指定群组的权限,文件所有群组的权限(如果gid未指定) [d[efault]:] m[ask][:] [:perms] 有效权限掩码 [d[efault]:] o[ther] [:perms] 其他的权限
恰当的 ACL 规则被用在修改和设定的操作中,对于 uid
和 gid
,可以指定一个数字,也可指定一个名字。perms
域是一个代表各种权限的字母的组合:读 -r
写 -w
执行 -x
,执行只适合目录和一些可执行的文件。pers
域也可设置为八进制格式。
setfacl 授予用户 lisa 对文件文件的读取权限:
setfacl -m u:lisa:r file
setfacl 撤消对文件文件的所有组和所有命名用户(使用有效权限掩码)的写访问权限:
setfacl -m m::rx file
setfacl 从文件的 ACL 中删除组人员的组条目:
setfacl -x g:staff file
setfacl 将 file1
的 ACL复制到 file2
:
getfacl file1 | setfacl --set-file=- file2
setfacl 将访问 ACL 复制到默认 ACL 中。
getfacl --access dir | setfacl -d -M- dir
前面的例子中我们都注意到了 getfacl 命令是用来读取文件的 ACL,setfacl 是用来设定文件的 Access 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 属性,同样如果操作不允许的情况下会给出警告。
需要注意:如果你的文件系统不支持 ACL 的话,你也许需要重新 mount 你的 file system:
mount -o remount, acl [mount point]
如果用 chmod 命令改变 Linux file permission 的时候相应的 ACL 值也会改变,反之改变 ACL 的值,相应的 file permission 也会改变。