Linux的ACL权限
一、ACL权限设置背景
ACL(Access Control List,访问控制列表)权限设置的背景主要是为了更精细、灵活地控制对系统资源的访问#传统权限管理的局限性在早期的操作系统中,如 UNIX 和 Linux,传统的文件权限管理基于所有者、用户组和其他用户三个类别,分别设置读、写、执行权限。然而,这种方式在一些复杂的场景下显得不够灵活。例如,当一个项目需要不同部门的成员对同一组文件具有不同的访问权限时,仅依靠传统的权限设置很难实现精细的控制。#多用户环境下的需求随着计算机系统在企业和组织中的广泛应用,多用户共享系统资源的情况越来越普遍。不同用户可能属于不同的角色或部门,对文件和目录等资源的访问需求各不相同。例如,财务部门的文件可能需要财务人员具有读写权限,而其他部门的管理人员只具有只读权限,普通员工则没有任何访问权限。为了满足这种复杂的访问控制需求,ACL 权限设置应运而生。#安全和合规性要求在一些对数据安全和合规性要求较高的行业,如金融、医疗等,需要对系统资源进行严格的访问控制,以确保数据的保密性、完整性和可用性。ACL 可以根据不同的用户、用户组或角色,精确地设置对各种资源的访问权限,有助于满足这些严格的安全和合规性要求。#文件ACL权限经典案例1.ot1要对/tmp/file1文件有rwx权限2.ot2要对/tmp/file1文件有rw权限3.ot3要对/tmp/file1文件有rx权限4.ot4要对/tmp/file1文件有r权限5.ot5对/tmp/file1文件没有任何权限如果只是基础的UGO+RWX方式来设置,无论如何是满足不了上面所有用户对/tmp/file1文件做出的需求的。
二、对普通文件设置ACL权限
#查看文件的ACL权限使用 getfacl 命令查看文件的默认 ACL 权限:getfacl test_file#ACL权限设置1.为指定用户添加权限若要为用户 user1 对 test_file 文件添加读和写权限,可以使用以下命令:setfacl-m u:user1:rw test_file这里,-m 表示修改 ACL 权限,u 代表用户,user1 是具体的用户名,rw 是要添加的权限。2.为指定用户组添加权限若要为用户组 group1 对 test_file 文件添加读权限,可以使用以下命令:setfacl-m g:group1:r test_file这里,g 代表用户组。#主动设置ACL权限之后在 Linux 系统里,当你主动设置了 ACL 权限之后,文件的标准权限(也就是通过 `ls-l` 命令显示的权限九列信息)可能无法完整且准确地反映文件的实际访问控制情况,此时就需要借助 `getfacl` 命令来查看详细的权限信息。ACL 允许你为单个用户、用户组或者其他非标准的实体单独设置权限,从而实现更精细的访问控制。当你使用 `setfacl` 命令为文件设置了 ACL 权限后,文件会保存额外的权限信息,而这些信息不会在 `ls-l` 命令的输出中体现。当文件设置了 ACL 权限后,`ls-l` 命令输出的权限信息中,权限字段的最后一个字符会变成 `+`,比如 `-rwxr-xr-x+`。这个 `+` 符号提示该文件存在额外的 ACL 权限,仅依靠这九列权限信息无法完整展示文件的实际权限。`getfacl` 命令能显示文件的完整 ACL 权限信息,包含标准的所有者、用户组和其他用户权限,以及额外设置的用户和用户组的 ACL 权限#ACL设置拥有人的权限和所属组的权限setfacl-m u::rwx /tmp/file1setfacl-m g::rw /tmp/file1#删除单条ACL权限若要删除用户 user1 对 test_file 文件的 ACL 权限,可以使用以下命令:setfacl-x u:user1 test_file#移除所有ACL权限若要删除所有额外设置的 ACL 权限,只保留默认的所有者、用户组和其他用户的权限,可以使用以下命令:setfacl-b test_file
三、对目录文件设置ACL权限
在 Linux 系统中,普通文件和目录文件的 ACL(访问控制列表)权限设置有一些相同点,但也存在不一样的地方。1.相同点基本设置命令:无论是普通文件还是目录文件,都使用相同的命令来设置、查看和删除 ACL 权限。例如,使用 setfacl 命令设置 ACL 权限,使用 getfacl 命令查看 ACL 权限,使用 setfacl -x 或 setfacl -b 命令删除 ACL 权限。用户和用户组权限设置方式:为特定用户或用户组设置权限的语法是一样的。例如,为用户 user1 添加读权限的命令都是 setfacl -m u:user1:r-x 目标文件或目录;为用户组 group1 添加写权限的命令都是 setfacl -m g:group1:r-x 目标文件或目录。2.不同点默认 ACL(Default ACL)普通文件:普通文件不支持默认 ACL。默认 ACL 主要用于控制在目录下新创建的文件和子目录的权限,而普通文件本身不存在创建子文件或子目录的情况,所以设置默认 ACL 对普通文件没有意义。目录文件:可以为目录设置默认 ACL。当在该目录下创建新的文件或子目录时,新创建的对象会继承目录的默认 ACL 权限。例如,使用 setfacl -m d:u:user1:r 目录名 为目录设置默认 ACL,使得在该目录下新创建的文件和子目录对用户 user1 具有读权限。3.权限的影响范围普通文件:对普通文件设置 ACL 权限直接影响对该文件的访问。例如,为普通文件 test.txt 的用户 user1 设置了写权限,那么 user1 就可以对 test.txt 文件进行写入操作。目录文件:对目录设置 ACL 权限不仅影响对目录本身的访问(如是否可以列出目录内容、进入目录等),还会影响对目录下文件和子目录的访问。例如,为目录 test_dir 的用户 user1 设置了执行权限,user1 可以进入该目录;如果同时设置了读权限,user1 可以列出目录中的内容。#目录acl的缺省权限在 ACL 权限中,default是一个比较特殊的概念,它们在权限管理中有着不同的作用1.default(默认)作用:default 主要用于目录,它规定了在该目录下新创建的文件和子目录的默认 ACL 权限。当创建新的文件或子目录时,它们会继承目录的默认 ACL 设置,这样可以确保在特定目录下创建的所有文件和子目录都能遵循统一的权限规则,方便进行权限管理。设置示例:可以使用 setfacl -m d:u:用户名:权限 目录名 的命令来设置目录的默认 ACL 权限。例如,setfacl -m d:u:user1:rwx /home/test 这条命令会为 /home/test 目录设置默认 ACL,使得在该目录下新创建的文件和子目录对 user1 用户都具有读、写、执行权限。
四、ACL的最大权限mask
#mask(掩码)mask 是用来限制用户或用户组实际可获得的最大权限。它与用户或用户组的具体权限设置共同作用,最终确定用户或用户组能够拥有的有效权限。ACL 权限中的 mask 会对除了文件所有者、所属组和其他用户(即传统的 rwx 权限位)之外的所有用户和组的权限进行限制。假设一个文件的 mask 权限设置为 rw-,而用户 user1 的 ACL 权限被设置为 rwx,那么由于 mask 的限制,user1 实际能够拥有的权限只有 rw-,执行权限会被 mask 屏蔽掉。可以使用 `setfacl-m m:rwx 文件名` 来设置 mask 权限。default 和 mask 都是为了更精细地管理文件和目录的访问权限,default 主要针对新创建的文件和子目录,而 mask 则用于限制除基本权限位之外的用户和组的权限。