控制对文件的访问

本单元涵盖的主题:
管理组
访问控制列表

管理组
与用户一样,组也有名称和编号( GID )。本地组在 /etc/group 中定义。 LDAP 也可用于提供组信息。
主要组
● 每个用户只有一个主要组。
● 对于本地用户,主要组通过 /etc/passwd 第三个字段中列出的组的 GID 编号定义
● 通常,用户创建的新文件归主要组所有。
● 通常,新创建用户的主要组为具有与该用户相同名称的新创建组。该用户是这一用户专用组( UPG )的唯一
成员。
补充组
● 用户可以是 0 或多个补充组的成员。
● 属于本地组补充成员的用户列在 /etc/group 中组条目的最后一个字段中。对于本地组,用户成员身份
由 /etc/group 中组条目的最后一段中找到的逗号分隔的用户列表来确定。
groupname:password:GID:user1,user2,user3

补充组成员身份用来帮助确保用户具有访问系统中文件和其他资源的权限。
管理补充组
1. groupadd -g 601 groupname
创建名为 groupname 且 GID 为 601 的补充组。
2. usermod -aG groupname username
会将用户 username 添加到 groupname 中。
3
管理文件系统访问控制列表
访问控制列表支持

标准 Linux 文件系统( ext2/3/4 )支持使用 POSIX ACL 设置多个复杂文件权限 ,
前提是文件系统是使用 acl 选项挂载的。

在 Red Hat Enterprise Linux 中,如果通过 ls -l 显示的权限字符串的最后一个字符
是 + ,则文件或目录设置了 ACL 。
getfacl file 用于显示文件的 ACL
u:bob:rw--       # 适用于用户 bob
u:500:---        # 适用于 UID 为 500 的用户
u::rwx           # 适用于 file 文件的拥有者
g:westos:rwx     # 适用于组 westos
g:l0:r-x         # 适用于 GID 为 10 的组
g::rw-           # 适用于 file 所属组
o::rwx           # 适用于其他所有人

setfacl 用于设置或修改文件的 ACL
# setfacl -m u:bob:rw filename    # 授予用户 bob 读写权限
# setfacl -m g:westos:rw filename # 授予组 westos 读写权限
# setfacl -m g:redhat:r filename  # 授予组 redhat 读的权限
# setfacl -x u:bob filename       # 删除用户 bob 的 ACL 权限
# setfacl -m o::- filename        # 修改其他所有人的权限为空
权限优先级
在确定某个进程(亦即某个运行程序)是否能够访问某一文件时,可按照以下方式应用文件权限和 ACL :
1. 如果是以拥有该文件的用户身份运行该进程,那么可应用该文件的用户权限
2. 另外,如果是作为列于用户 ACL 条目中的用户运行进程,那么应用用户 ACL (只要受 mask 允许)
3. 另外,如果是以与拥有该文件的组相匹配的组身份或以具有明确组 ACL 条目的组身份运行该进程,如
果权限是由任意匹配组授予的,则应用该权限(只要 mask 许可)
4. 否则,应用文件的其他权限

ACL 掩码

具有 ACL 的文件拥有一个“ mask” (掩码),这个掩码既能够限制拥有该文件的组的最大权限,有能
够限制 ACL 中的补充用户和组所拥有的最大权限。

getfacl file 将当前掩码显示为 mask::permissions 。
由 ls -ld file 显示的组权限也反映了当前掩码(并非所拥有组的权限!)
默认 ACL (继承)

目录可以有“默认 ACL” 条目,系统自动针对在该目录中创建的新文件设置这些条目
setfacl -m d:u:bob:rw directory 将设置默认 ACL 条目,授予用户 bob 对在 directory 中创建的所
有新文件的读写访问权限。

这类似 setgid 权限的方法(针对目录时),使得在该目录中创建的新文件归拥有该目录的组所有。
ACL 挂载选项
● 挂载文件系统之后,必须启用对 POSIX ACL 条目的支持。
● 安装程序会配置它创建的所有 ext4 文件系统,以自动启用 ACL 支持。
# tune2fs -l /dev/sda1 |grep "Default mount"
Default mount options:      user_xattr acl
● 如果手动格式化文件系统,则需要使用 acl 挂载选项挂载该系统。
● 您可以将手动格式化的 ext4 文件系统设置为在挂载时自动启用支持,方法是使用 tune2fs 设置默认
挂载选项: # tune2fs -o user_xattr,acl /dev/sda1