hello大家好😊
什么是ACL ❓
ACL代表访问控制列表(Access Control List),是一种用于管理文件、目录或资源访问权限的机制。它可以用来限制哪些用户或用户组有权访问、修改或执行特定的文件或目录
传统的Linux文件权限模型包括所有者、所属组和其他用户的权限。然而,访问控制列表(ACL)为我们提供了更多维度的权限控制。我们可以授权单个用户或用户组,并赋予特定的读、写、执行、删除等权限。
下面举个栗子:👇
想象一下,你正在与团队合作一个重要的项目,需要让不同的成员对同一资源具有不同的权限。这时,ACL就是你的救星。以一个虚拟的项目文件夹为例,你可以通过设置ACL来实现:
- 项目经理:完全访问权限,可以查看、编辑和删除文件。
- 设计师:编辑权限,可以修改文件但不能删除。
- 测试员:只读权限,只能查看文件内容。
通过这种方式,你可以确保团队成员按照角色分配权限,不仅提高了工作效率,还保护了文件的安全性。
查看和解释ACL权限 ❗
如果一个文件或目录上设置了ACL权限,那么使用ls -l
命令可以输出最少的ACL设置信息。
比如:
权限字符串末尾的加号(+)表示该文件上存在若干条目的扩展ACL结构。需要注意,在上面显示的信息中,在标准文件设置中属于组权限的设置,在ACL中属于ACL掩码设置。比如上面的第二个文件的组所权限位置是rw,但这不是真正的组所有者设置,而是当前ACL掩码设置。什么是ACL掩码,下面会介绍到。
查看并解释文件ACL
使用 getfacl filename
显示文件上的ACL设置。
比如:
下面解释上面示例中的每个部分:
-
注释条目:
#file: shares/content/servera-loadavg.txt
#owner: operator1
#group: operators前三行是注释,用于识别文件名、所有者(本例中是operator1)和所属组(本例中是operators),如果存在其他文件标志(比如setuid或setgid),则会出现在第四行注释上
-
用户条目:
user::rw-
user:consultant1:—第一行用户条目指示文件所有者权限。在本例中指的是operator1的权限是rw-
第二行用户条目指示指定用户权限。与此文件相关联的每位指定用户都有一个条目。在本例中指的是consultant1没有任何权限 -
组条目:
group::rw-
group:consultants:rw-第一行组条目指示组所有者权限。在本例中指的是operators的权限是rw-
第二行组条目指示指定组权限。与此文件相关联的每个指定组都有一个条目。在本例中指的是consultants的权限是rw- -
掩码条目:
mask::rw-
掩码设置显示可能为指定用户、组所有者和指定组提供的最大权限,即使条目被设置了更大的权限。
-
其他条目:
other::—
指示其他或“全局”权限。在本例中指的是所有其他的UID和GID均无任何权限。
查看并解释目录ACL
使用 getfacl directory
显示文件上的ACL设置。
比如:
前面几个条目都和文件ACL类似。只是多加了默认条目,默认条目里也有默认用户条目、默认组条目、默认掩码设置、默认其他权限。
默认条目定义了对新创建的文件或子目录应用的默认ACL权限。例如,你可以设置默认条目为特定用户或用户组,并指定默认的权限。当新文件或子目录创建时,将会自动应用这些默认权限。
默认条目的存在可以确保新创建的文件或子目录继承了所在目录的权限规则,从而确保了一致性和安全性。
例题
下面有几个ACL条目,你能写出它的含义吗?🔍
- default:m ::rx /directory
- default:user:mary:rx /directory
- g::rw /directory
- g::rw file
- getfacl /directory
- group:hug:rwx/directory
- user::rx file
- user:mary:rx file
下面是答案:
- default:m ::rx /directory
默认掩码设置,初始权限为读取和执行权限 - default:user:mary:rx /directory
默认指定mary用户具有目录的读取和执行权限 - g::rw /directory
授予目录组所有者读取和写入权限 - g::rw file
授予文件组所有者读取和写入权限 - getfacl /directory
显示目录上的ACL - group:hug:rwx/directory
授予指定组目录的读取、写入、执行权限 - user::rx file
授予文件所有者文件的读取和执行权限 - user:mary:rx file
授予指定用户文件的读取和执行权限
更改ACL文件权限 ❗
使用 setfacl
添加、修改和删除文件和目录的标准ACL。
添加或修改ACL
可以使用 -m
设置ACL。
比如:
要添加或修改用户ACL或指定用户ACL,可以执行一下操作:
setfacl -m u:name:rX file
# name可以是用户名或UID值。
ACL文件所有者和标准文件所有者权限同等。所以,使用文件所有者权限中的chmod等同于使用文件所有者权限中的setfacl。chmod对指定用户没有影响。
要添加或修改组ACL或指定组ACL,可以执行以下操作:
setfacl -m g:name:rw file
# name可以是组名或GID值。
chmod对于具有ACL设置的文件,对人合租权限都没有影响,但会更新ACL掩码。
若要使用同一条命令添加多个条目,可以使用逗号分隔条目列表:
setfacl -m u::rwx,g:consultants:rX,o::- file
我们也可以使用-R
选项以递归的方式应用ACL。
比如:
setfacl -R -m u:name:rX directory
这条命令将用户name的读和执行权限应用到目录directory中的所有子目录和文件上
使用 getfacl 作为输入
比如:
getfacl file-A | setfacl --set-file=- file-B
--set-file
选项可接受来自文件或 stdin 的输入。短划线字符(-) 指定使用 stdin。在此例中,file-B与file-A的ACL 设置相同。
删除ACL
使用-x
选项删除ACL条目。
比如:
setfacl -x u:name,g:name file
该操作只会从文件或目录 ACL 中删除指定用户和指定组。任何其他现有 ACL 条目均保持活动。
可以在同一 setfacl操作中包含删除(-x) 和修改(-m) 操作。
掩码只能在未设置其他 ACL(无法删除的基础 ACL 除外)的情况下删除,因此必须最后删除。文件不再有任何 ACL,并且 ls -l 不会在权限字符串旁边显示加号(+)。
或者,要删除文件或目录的所有ACL条目 (包括目录的默认 ACL) ,请使用以下命令:
setfacl -b file
总结 🚩
访问控制列表(ACL)是Linux系统中精细控制文件访问权限的利器。通过赋予特定用户或用户组更细致的权限,我们可以更好地保护您的数据,确保只有授权人员可以访问和修改它们。
我们需要掌握常用的查看、设置、删除ACL条目命令。
感谢 💖
好啦,这次的分享就到这里,感谢大家看到这里🤞