ACL

本文详细介绍了如何在Linux文件系统中启用ACL(Access Control List),并通过示例展示了如何配置特定用户和群组的权限,以实现更精细化的文件访问控制。重点包括配置系统支持ACL、安装相关工具、使用setfacl命令设置群组权限及理解getfacl命令的输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考 ACL: Using Access Control List on Linux

What is ACL

ACL - Access Control List,用于在Linux文件系统传统的权限控制机制之外,提供更加精细化的文件权限控制。

对于一个文件而言,它有三组权限控制位,分别对应该文件的ownergroupother,即可以为这三类用户分别设置它们的readwriteexec权限。但在有些场景下,我们需要更加精细的权限控制,而光靠传统上述的权限机制可能无法实现。此时,我们可以借助ACL来实现。




配置系统

要使用ACL机制,首先要确保

  1. 文件系统的ACL选项打开:通过命令tune2fs -l <文件系统名>查看

    [root@ecs3 home]# tune2fs -l /dev/xvda1 | grep mount
    Last mounted on: /
    Default mount options: user_xattr acl
    Last mount time: Fri Dec 26 09:48:08 2014
    Maximum mount count: -1

  2. 安装了ACL工具:如果,命令getfaclsetfacl可以使用,说明ACL工具已经安装好了。




使用ACL

下面使用ACL来分别配置group和user的权限

配置group权限

假设:创建一个名为jack的用户和一个名为testgroup的群组,并将jack加入到testgroup中。

[root@quickstart tao2]# groupadd testgroup
[root@quickstart tao2]# useradd -d /home/jack -g testgroup jack



然后,我们希望使得testgroup中的用户对目录/home/cloudera具有rwx的权限(该目录本来的权限为wxrwxr-x cloudera cloudera,我们要针对testgroup加上写权限)。

[jack@quickstart home]# ll /home
total 36
drwxrwxr-x  29 cloudera cloudera   4096 May 21 01:05 cloudera
drwx------   4 jack     testgroup  4096 May 21 06:18 jack

可见,现在群组testgroup对目录/home/cloudera是没有写权限的。

setfacl

现在我们用setfacl命令来设置群组testgroup对目录/home/cloudera的权限,之后用命令getfacl来查看设置结果:

[root@quickstart home]# setfacl -m g:testgroup:wx /home/cloudera/
[root@quickstart home]# getfacl /home/cloudera/
getfacl: Removing leading '/' from absolute path names
# file: home/cloudera/
# owner: cloudera
# group: cloudera
user::rwx
group::rwx
group:testgroup:-wx
mask::rwx
other::r-x

关于setfacl命令的参数: -m 表示 modify, g:testgrouop:w中的g表示设置的类别是group,testgroup是被设置的群组名称,wx表示设置的目标权限。

现在测试一下jack能不能在目录/home/cloudera中创建一个文件:

[root@quickstart home]# su - jack
[jack@quickstart ~]$ touch /home/cloudera/newFile

用户jack确实可以在/home/cloudera中创建一个文件。


getfacl

关于getfacl的输出:前几行的意义很明显,讲讲最后三行的意义:

  • group:testgroup:-wx表示群组testgroup对目标文件的权限是wx
  • mask::rwx表示对目标文件(或目录)来说,除owner外的用户和群组对其最高权限为rwx
  • other::r-x是什么意思?


mask

如果我们将testgroup的权限设置为wx,同时将mask设置为r,那么testgroup对目标文件/目录就无法写入,因为mask限制了除owner外的用户和群组对目标文件/目录的最高权限

[root@quickstart home]# setfacl -b cloudera/
[root@quickstart home]# setfacl -m g:testgroup:wx,mask:r cloudera/
[root@quickstart home]# su - jack
[jack@quickstart ~]$ cd /home
[jack@quickstart home]$ touch cloudera/x
touch: cannot touch `cloudera/x': Permission denied
[jack@quickstart home]$ getfacl cloudera/
# file: cloudera/
# owner: cloudera
# group: cloudera
user::rwx
group::---
group:testgroup:-wx     #effective:---
mask::r--
other::r-x
### ACL 配置指南与访问控制列表设置方法 访问控制列表(ACL)是一种用于控制网络流量或系统资源访问权限的机制。其配置方式因设备类型、操作系统和应用场景的不同而有所差异。以下为针对不同环境的 ACL 配置方法及设置说明。 #### 网络设备中的 ACL 配置 在路由器或交换机中,ACL 被广泛用于控制数据包的转发。以华为设备为例,配置高级 ACL 的基本命令如下: ```bash acl number 3000 rule 5 permit ip source 192.168.1.0 0.0.0.255 destination 10.0.0.0 0.0.0.255 rule 10 deny ip source any destination any ``` 该配置创建了一个编号为 `3000` 的高级 ACL,允许来自 `192.168.1.0/24` 网络的数据包访问 `10.0.0.0/24` 网络,并拒绝所有其他 IP 流量。创建 ACL 后,需将其绑定到具体接口以生效: ```bash interface GigabitEthernet0/0/1 ip address 192.168.1.1 255.255.255.0 ip access-group 3000 in ``` 此操作将 ACL 应用于 `GigabitEthernet0/0/1` 接口的入站方向,控制进入该接口的流量 [^2]。 在思科设备中,标准 ACL 的配置方式如下: ```bash access-list 1 permit 192.168.1.0 0.0.0.255 access-list 1 deny any ``` 随后将其应用到指定接口: ```bash interface s1/0 ip access-group 1 in ``` 此配置将 ACL `1` 应用于串口 `s1/0` 的入站方向,控制从该接口进入路由器的流量 [^2]。 #### 文件系统中的 ACL 设置 在 Linux 文件系统中,可以通过 `setfacl` 命令设置更细粒度的访问控制。例如,为用户 `john` 添加对某个文件的读写权限: ```bash setfacl -m u:john:rw /path/to/file ``` 此外,还可以设置组权限: ```bash setfacl -m g:developers:rx /path/to/dir ``` 上述命令允许 `developers` 组的成员对指定目录具有读和执行权限。使用 `getfacl` 命令可查看当前文件或目录的 ACL 设置: ```bash getfacl /path/to/file ``` 这将显示文件或目录的所有 ACL 条目 [^1]。 #### 云服务中的 ACL 配置 在云存储服务中,如 AWS S3,ACL 用于控制对象和存储桶的访问权限。例如,通过 JSON 策略文件设置存储桶的公共读权限: ```json { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::example-bucket/*" } ] } ``` 该配置允许所有用户读取 `example-bucket` 中的对象 [^3]。 #### 应用程序中的 ACL 实现 在应用程序中,如使用 Spring Boot 框架时,可以通过 Spring Security 的 ACL 模块实现基于对象的访问控制。例如,使用注解控制方法级别的访问权限: ```java @PreAuthorize("hasPermission(#document, 'read')") public void readDocument(Document document) { // 方法逻辑 } ``` 此注解确保调用该方法的用户必须对 `document` 对象具有 `read` 权限 [^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值