如何使用 Setfacl 和 Getfacl 管理 Linux ACL

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 有任何想法或意见,请在下面的评论部分写下来。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太极淘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值