Linux 命令 setfacl 允许用户在文件和目录上设置广泛的访问控制列表。通常,使用 chmod 命令,您将能够为所有者/组/其他人设置权限。但是,如果您可能还需要为其他一些用户提供文件权限,则无法使用chmod来完成。Setfacl 将帮助您摆脱这些烦恼。
例如,我们不能为同一目录或文件上的不同用户设置不同的权限集。因此,实现了访问控制列表 (ACL)。您可以使用 getfacl 命令查看文件和目录上的当前 ACL 集。
为了在文件/目录上使用 setfacl,驻留的文件系统应该启用 acl 支持。如果文件系统不支持 acl,您将收到“不支持操作”错误。在这种情况下,您需要在/etc/fstab中为文件系统添加 acl 支持,如下所示,然后重新挂载文件系统。
检查内核是否支持 ACL
运行以下命令检查文件系统的 ACL 支持和 POSIX_ACL=Y 选项(如果有 N 而不是 Y,则表示内核不支持 ACL,需要重新编译)。
root@taoxc:/home# grep -i acl /boot/config*
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_HFSPLUS_FS_POSIX_ACL=y
CONFIG_F2FS_FS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y
检查文件系统是否支持 ACL
你可以试试这个:
$ cat /etc/fstab
在某些查看 fstab 的系统上,不会显示文件系统是否支持 acl,而是仅显示“默认值”作为挂载选项:
root@taoxc:/home# cat /etc/fstab
LABEL=cloudimg-rootfs / ext4 defaults 0 0
在这种情况下,您可以使用以下命令检查文件系统是否安装了 acl 支持:
root@taoxc:/home# tune2fs -l /dev/sda1
tune2fs 1.42.9 (4-Feb-2014)
Filesystem volume name: cloudimg-rootfs
Last mounted on: /
Filesystem UUID: 2e294961-ce03-483e-a53e-ff3fc4514bd4
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
如果您的文件系统尚未使用 'acl' 选项挂载,您可以重新挂载它并提供所需的选项:
# mount -o remount -o acl /dev/sda1
检查所需的包
要使用 Linux ACL,请确保您已安装所需的软件包。以下是需要使用 yum或 apt-get安装的必需软件包。
对于基于 RedHat 的系统:
$ sudo yum install nfs4-acl-tools acl libacl
对于基于 Debian:
$ sudo apt-get install nfs4-acl-tools acl
现在我们可以了解“ setfacl ”命令的各种用法。首先,我们应该以 root 用户身份创建一个名为“test_folder”的文件夹。
root@taoxc:/home# mkdir test_folder
root@taoxc:/home# getfacl test_folder/
# file: test_folder/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
1. 为单个用户提供 ACL
假设,您想授予目录“test_folder”上的用户“test”(可以是任何用户)的完全访问权限。这可以使用setfacl完成,如下所示。
root@taoxc:/home# setfacl -m u:test:rwx test_folder/
root@taoxc:/home# getfacl test_folder/
# file: test_folder/
# owner: root
# group: root
user::rwx
user:test:rwx
group::r-x
mask::rwx
other::r-x
2.为组内所有用户提供ACL
如果要为组“ testg ”的所有用户提供对文件夹“test_folder”的写访问权限,可以通过以下方式进行。
root@taoxc:/home# setfacl -m g:testg:w test_folder/
root@taoxc:/home# getfacl test_folder/
# file: test_folder/
# owner: root
# group: root
user::rwx
user:test:rwx
group::r-x
group:testg:-w-
mask::rwx
other::r-x
3.撤销用户/组的acl
如果你想撤销我们给用户test和组testg的权限,你可以使用setfacl命令如下。
root@taoxc:/home# setfacl -x u:test,g:testg test_folder/
root@taoxc:/home# getfacl test_folder/
# file: test_folder/
# owner: root
# group: root
user::rwx
group::r-x
mask::rwx
other::r-x
4.将一个文件/目录的ACL复制到另一个
假设您想在 test_folder1 上也有相同的 test_folder ACL 集,您可以通过复制 ACL 来设置它,如下所示。
root@taoxc:/home# getfacl test_folder/ > acl.txt
root@taoxc:/home# mkdir test_folder1
root@taoxc:/home# setfacl -M acl.txt test_folder1/
root@taoxc:/home# getfacl test_folder1/
# file: test_folder1/
# owner: root
# group: root
user::rwx
user:test:rwx
group::r-x
group:testg:-w-
mask::rwx
other::r-x
结论
在本教程中,我们看到了 getfacl 和 setfacl 工具的基本用法,用于访问控制列表设置和撤销对 test_folder 的一些权限。我们还学习了如何检查内核和文件系统 acl 支持以及如何安装所需的软件包。如果您对 linux acl 有任何想法或意见,请在下面的评论部分写下来。

3082

被折叠的 条评论
为什么被折叠?



