TencentOS Server 文件权限与 ACL

TencentOS Server 中的文件权限管理,包括 SUID/SGID/Sticky BIT 特殊权限、umask 设置,以及 ACL(访问控制列表)的配置方法。

相关产品
TencentOS Server 产品页,含版本规格、价格与购买入口。

一、合理配置文件权限

在 Linux 中可以将普通文件和目录都统一当作文件来处理,而文件的安全性主要通过权限和属主来控制。文件系统中,一般通过常见的 rwx 权限控制文件的访问。但在部分场景下,单一的 rwx 权限可能不够灵活,还会用到特殊权限 s。例如,/etc/shadow 文件存储了系统中所有用户的加密密码,因此不能直接授予所有用户对该文件的访问。但是普通用户确实会有变更密码的需求,此时便可引入 SUID 权限,以允许用户更改自己的密码。

二、SUID 权限

·SUID 权限查看

当普通用户修改密码时,并不会直接授予其操作 /etc/shadow 文件的权限,而是通过 /usr/bin/passwd 进行操作,因此需要先赋予 SetUID(简称 SUID)权限。ls 查看可知:

ls -l /usr/bin/passwd

输出示例:

-rwsr-xr-x. 1 root root 31984 Mar 31 23:51 /usr/bin/passwd

可以看到 owner 权限为 rws,而不是 rwx。当 s 出现在 x 的位置上时,即可称之为 SetUID Bits 或 SUID。其特点如下:

·SUID 权限仅作用于可执行二进制文件。

·当执行者对该二进制文件有执行权限,则执行者会短暂获得该文件的 owner 权限。

所以对于本次密码修改过程,当普通用户执行 /usr/bin/passwd 时,会短暂获得 root 权限进而执行该指令,完成密码的修改访问。

·SUID 权限设置

SUID 权限可以通过符号方式设置,也可以通过数字方式设置。SUID 权限对应数字 4:

chmod u+s filename # 符号方式,+ 表增加该权限chmod 4755 filename # 数字方式,对应数字 4

·SUID 权限取消

SUID 权限可以通过符号和数字两种方式取消:

chmod u-s filename # 符号方式,- 表取消该权限chmod 755 filename # 数字方式

三、SGID 权限

·SGID 权限查看

SGID 适用于目录,用户组也有一个等效的属性:SGID。其特点如下:

·SGID 权限作用于目录。

·用户在此目录下所创建的新文件,其用户组与该目录的用户组相同。

你可以通过 ls -ld 命令查看目录的 SGID 权限。以下示例中,目录 /shared/project 已通过 chmod 2755 设置了 SGID 权限:

ls -ld /shared/project

输出示例:

drwxr-sr-x. 2 root root 4096 May 6 15:03 /shared/project

输出中用户组权限位为 r-s,s 出现在用户组执行权限 x 的位置上,表明该目录已被设置 SGID 权限。

·SGID 权限设置

SGID 权限可以通过符号和数字方式设置。SGID 权限对应数字 2:

chmod g+s dirname # 符号方式,+ 表增加该权限chmod 2755 dirname # 数字方式,对应数字 2

·SGID 权限取消

chmod g-s dirname # 符号方式,- 表取消该权限chmod 755 dirname # 数字方式

四、Sticky BIT 权限

·SBIT 权限查看

Sticky BIT(全称为 the restricted deletion flag or sticky bit,简称 SBIT),可意为黏滞位、防删除位。

SBIT 目前只对目录有效,用来阻止非文件 owner 删除文件,比较常见的例子为 /tmp 目录:

ls -ld /tmp/

输出示例:

drwxrwxrwt. 7 root root 140 May 6 15:03 /tmp/

可以看到权限信息中最后一位被设置为 t,表明该目录被设置了 SBIT 权限。此时,当用户在该目录下创建新文件或目录时,仅有自己和 root 才有权限删除,防止他人的删除操作。

·SBIT 权限设置

SBIT 也可以通过符号和数字方式设置,对应数字 1:

chmod o+t dirname # 符号方式,+ 表增加该权限chmod 1755 dirname # 数字方式,对应数字 1

·SBIT 权限取消

chmod o-t dirname # 符号方式,- 表取消该权限chmod 755 dirname # 数字方式

五、umask 值设置

user file-creation mode mask(umask)值用于为新创建的文件和目录设置默认权限。如果没有设定 umask 值,则生成的文件对任意系统用户而言都有可写权限,存在一定的风险。

你可以通过执行 umask 查看当前系统的默认 umask 值:

umask

输出示例:

0022

注意:说明:

注意:root 用户默认 umask 值为 0022,普通用户默认 umask 值为 0002。新生成目录/文件的默认权限为 777/666 减去 umask 值。

当然你也可以根据安全需要,自行指定更严格的 umask 值:

·临时更改:

umask 0037 # 临时生效

·永久更改:

要在系统中持久更改 umask 值,可以编辑 /etc/bashrc,修改其中已有的 umask 行,或在文件末尾添加 umask 设置(对所有用户生效)。以将 umask 值修改为 0037 为例,在 /etc/bashrc 末尾添加:

umask 0037

如果只需要为单个用户持久更改 umask 值,也可以在该用户的 ~/.bashrc 文件末尾添加同样的设置。修改完成后,重新登录或执行以下命令使配置立即生效:

source /etc/bashrc

注意:说明:/etc/profile 修改只在用户第一次登录时被执行,而 /etc/bashrc 修改则在用户每次登录加载 shell 时执行。

六、配置 ACL

在 Linux 系统中,访问控制列表(Access Control Lists,ACL)是一个重要的安全机制。传统文件权限对每个文件和目录,通过划分 owner/group/others 并赋予不同的 rwx 权限。ACL 在此基础上,为每个文件和目录添加了一组更细粒度的访问控制规则,允许你为不同的用户和组设置不同的访问权限。

七、安装 ACL

ACL 目前已内置支持,因此在大多数情况下无需手动安装。若出现特殊情况未预安装,则可自行安装 ACL:

sudo dnf install acl

八、查看 ACL

要查看文件或目录的 ACL,可以使用 getfacl 命令。例如,要查看 file1 的 ACL 设置:

getfacl file1

该命令将显示对应文件的访问控制列表,包括默认权限、属主和所属组的访问权限,以及任何特定用户或组的访问权限。例如:

# file: file1# owner: root# group: rootuser::rw-group::r–other::r–

九、设置 ACL

要设置文件或目录的 ACL,可以使用 setfacl 命令。例如,要给用户 opencloudos 添加对 file1 的读写和执行权限:

sudo setfacl -m u:opencloudos:rwx file1

然后再次查看 file1 的 ACL:

getfacl file1

输出示例:

# file: file1# owner: root# group: rootuser::rw-user:opencloudos:rwxgroup::r–mask::rwxother::r–

可以看到 user:opencloudos:rwx 行已添加,表示用户 opencloudos 拥有对 file1 的读写和执行权限。同时,ACL 会自动生成一个 mask 条目,表示 ACL 中所有用户和组的最大有效权限。

十、设置组 ACL

可以为用户组设置 ACL,例如给 devteam 组添加读写权限:

sudo setfacl -m g:devteam:rw file1

十一、删除 ACL 条目

删除特定用户或组的 ACL 条目:

sudo setfacl -x u:opencloudos file1

删除所有 ACL 扩展条目,恢复到基本权限:

sudo setfacl -b file1

十二、设置默认 ACL

可以为目录设置默认 ACL,使得在该目录下新建的文件和子目录自动继承 ACL 规则:

sudo setfacl -d -m u:opencloudos:rx /shared/project

这样,在 /shared/project 目录下新建的文件,用户 opencloudos 将自动获得读取和执行权限。

十三、递归设置 ACL

对目录及其子目录和文件递归设置 ACL:

sudo setfacl -R -m u:opencloudos:rwx /shared/project

注意:警告:

注意:递归设置 ACL 时请谨慎,确保不会过度授予权限。

赞 (0)
上一篇 4天前
下一篇 4天前