Linux ACL(Access Control Lists)是一种功能强大的访问控制机制,允许您更精细地控制文件和目录的权限。相对于传统的基于所有者、组和其他用户权限的基本访问控制,ACL允许您在文件和目录级别上分配不同的权限给不同的用户和组。 linux的权限非常重要,我们之前所说的几种权限中,但是并不能只针对一个用户或者一个组进行单独设置,而ACL权限可以帮助我们实现这个功能,比如说有一个文件的所有者和所有者组都是a,这个文件的权限是660,我可以让b这个用户可以对文件进行读写的操作,而b这个用户并不属于a组的成员。那我们来看下如何使用
ACL权限的设置和查看
如果要使用acl权限,首先要确定你的文件系统支持acl权限,如果再Default mount options字段出现acl字样就意味着你的文件系统支持acl,不过在CentOS8中默认是都支持的。
[root@zuolaoshi test]# tune2fs -l /dev/sda1
配置acl权限我们需要使用两个命令一个是setfacl用来设置acl权限,另一个是getfacl用来查看acl权限
setfacl命令:设置文件或文件夹的ACL权限
命令选项:
-m :设置acl
-x :删除指定的acl
-b :删除所有的acl
- getfacl命令:用来查看文件的acl权限 现在我们来看下如何设置
[root@zuolaoshi test]# ls
file file1
[root@zuolaoshi test]# ll file1
-rw-r--r-- 1 root root 0 10月 18 02:48 file1
[root@zuolaoshi test]# setfacl -m u:tom:rw file1 为指定的用户配置一个rw的权限
[root@zuolaoshi test]# setfacl -m u::rwx file1 如果没有指定用户则默认是为该文件的所有者设置
[root@zuolaoshi test]# ll file1
-rwxrw-r--+ 1 root root 0 10月 18 02:48 file1 所有者权限变成的rwx而且后面多了一个+号
你会发现使用ll(等同于ls -l)命令查看时会发现多了一个+号,这只是提醒我们此文件被设置了acl权限,但是具体是什么样的,我们还需要使用getfacl来查看
[root@zuolaoshi test]# getfacl file1
# file: file1 文件名
# owner: root 所有者
# group: root 所有者组
user::rwx user:后面是空的,代表的是所有者的权限
user:tom:rw- 我们之前给额外用户设置的权限
group::r-- 所有者组的权限
mask::rw- 默认的有效权限
other::r-- 其他人的权限
以上是我们针对一个额外的用户设置的权限,同理可以设置针对组和其他人的acl权限
为不同用户或组设置不同权限
[root@zuolaoshi test]# setfacl -m g:tom:rw file1
[root@zuolaoshi test]# setfacl -m o:rw file1
[root@zuolaoshi test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rwx
user:tom:rw-
group::r--
group:tom:rw-
mask::rw-
other::rw-
删除指定的acl
[root@zuolaoshi test]# setfacl -x u:tom file1 删除用户acl
[root@zuolaoshi test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rwx
group::r--
group:tom:rw-
mask::rw-
other::rw-
[root@zuolaoshi test]# setfacl -x g:tom file1 删除组acl
[root@zuolaoshi test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rwx
group::r--
mask::r--
other::rw-
[root@zuolaoshi test]# chmod o=r file1 删除其他人直接使用chmod就可以
[root@zuolaoshi test]# ll file1
-rw-r--r-- 1 root root 0 10月 18 04:21 file1
[root@zuolaoshi test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
other::r--
删除所有acl
[root@zuolaoshi test]# setfacl -m u:tom:rw,g:tom:rw,o:rwx file1
[root@zuolaoshi test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:tom:rw-
group::r--
group:tom:rw-
mask::rw-
other::rwx
[root@zuolaoshi test]# setfacl -b file1
[root@zuolaoshi test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
group::r--
other::rwx
以下是一些关于Linux ACL访问控制的常见问题和答案:
1.如何查看已设置的ACL?
您可以使用
getfacl
命令来查看文件或目录的ACL信息。例如,要查看名为 "file.txt" 的文件的ACL,可以运行以下命令:
getfacl file.txt
2.如何为文件或目录设置ACL?
使用
setfacl
命令可以设置文件或目录的ACL。例如,要为名为 "file.txt" 的文件添加一个允许用户 "john" 读取和写入的ACL,可以运行以下命令:
setfacl -m u:john:rw file.txt
3.如何为目录设置默认ACL?
默认ACL会应用于目录中新创建的文件和子目录。要为目录设置默认ACL,可以使用
-d
选项。例如,要为目录 "dir" 设置一个默认ACL,让所有用户都具有读取权限,可以运行以下命令:
setfacl -m d:u::r dir
4.如何删除ACL?
使用
setfacl
命令的-b
选项可以删除文件或目录上的ACL。例如,要删除名为 "file.txt" 的文件的所有ACL,可以运行以下命令:
setfacl -b file.txt
5.如何备份和恢复ACL?
使用
getfacl
命令将ACL导出到一个文件,可以将其视为ACL的备份。例如,要备份文件 "file.txt" 的ACL,可以运行以下命令:
getfacl file.txt > acl_backup
要恢复ACL,请使用 setfacl
命令将备份的ACL应用到文件或目录:
setfacl --restore=acl_backup file.txt
这些是一些基本的概念和命令,帮助您了解Linux ACL访问控制的基础知识。请记住,ACL的使用需要针对不同的目录和文件进行设置,因此请根据您的具体需求来进行配置。您可以参考相应的文档和手册了解更多有关Linux ACL的详细信息。
6.如何限制某个用户访问某个文件或目录?
您可以使用ACL来限制某个用户或组对特定文件或目录的访问。例如,要阻止用户 "john" 访问文件 "file.txt",可以使用以下命令:
setfacl -m u:john:0 file.txt
上述命令中的 "0" 表示拒绝所有权限。您可以使用 "r"、"w"、"x" 字母来分别表示读取、写入和执行权限。例如,要仅允许用户 "jane" 读取 "file.txt",可以使用以下命令:
setfacl -m u:jane:r file.txt
7.如何为一个文件夹内的所有文件和子目录设置相同的ACL?
您可以使用
-R
选项来递归设置一个目录下所有文件和子目录的ACL。例如,要为 "dir" 目录及其所有子目录和文件设置 ACL "rwxrwxr-x",可以使用以下命令:
setfacl -R -m u::rwx,g::rwx,o::rx dir
上述命令中的 "u::rwx" 表示针对当前用户设置读/写/执行权限,"g::rwx" 表示设置相同权限组的用户,"o::rx" 表示设定"所有其他用户"有执行权限,而读、写权限没有给予。
8.如何临时关闭ACL控制?
您可以通过挂载文件系统时使用
acl
选项来启用或禁用ACL控制。例如,如果要临时禁用ACL,请使用以下语句挂载文件系统:
mount -o remount,acl, noacl /mnt/data
上述命令将文件系统重新挂载为无ACL的状态。同样的在启用时,选择的是使用 "acl" 选项.
9.如何使ACL必须指定?
您可以使用 "defaults" 选项来设置文件系统的默认ACL行为。默认行为可以被覆盖,但如果没有为文件或目录设置ACL,则将使用默认行为。例如,要在挂载目录 "/mnt/data" 时强制使用ACL,请使用以下选项:
mount -o remount,acl,default /mnt/data
上述命令中的 "default" 表示如果没有手工设置 ACL,则使用挂载目录时定义的默认 ACL。
10.什么是默认ACL?
默认ACL是指对于一个目录,如果新创建了一个子目录或文件,则它们继承了父目录下的ACL。默认ACL按照getfacl的输出形式进行管理并应用。相比于标准ACL,项名称表现了单独的ACL条目,并且允许您设置一个默认ACL来指定新文件或者子目录的ACL条目。由于子目录和文件继承了父目录中的默认ACL,直接在目录上设置默认ACL通常是明智的。
11.什么是标准ACL?
标准ACL与传统的UNIX文件权限模型类似,对于文件拥有者、所属用户组和其他用户,分别设定读、写、执行权限。标准ACL可以应用到所有的Linux文件系统,需要手工指定的文件ACL。
12.如何使默认ACL的实际应用生效?
首先,默认ACL必须在文件系统和文件夹上均已配置。这适用于现有的文件系统和文件夹以及新的文件系统和文件夹。默认ACL的使用方式取决于文件系统类型和挂载选项。当您在挂载文件系统时使用选项"acl",则mount选项"defaults"会包括所需要的默认ACL选项。
13.什么情况下可以使用ACL?
ACL特别适用于许多用户需要共享访问同一资源或目录的情况。传统的UNIX权限模型限制为单一所有者,单一组和所有用户,ACL模型则使更灵活、更紧密的访问控制成为可能。例如,您可以在确保安全地共享目录和文件夹时,为您的团队或共同编辑者提供更多的灵活性和保护。