在Linux系统中,文件权限管理是安全运维的核心环节之一。s权限(包括SetUID和SetGID)是一种特殊权限,它允许用户以文件所有者(SetUID)或所属组(SetGID)的身份执行程序,虽然这一机制在某些场景下必要(如passwd
命令修改用户密码),但滥用或误配置可能导致严重的安全风险,合理管理s权限至关重要,以下是详细的操作指南:
s权限的作用与风险
- SetUID(u+s):用户执行文件时,进程获得文件所有者的权限(而非执行者权限)。
- SetGID(g+s):用户执行文件时,进程获得文件所属组的权限;若作用于目录,则新文件继承目录的所属组。
风险提示:若恶意程序被赋予s权限,攻击者可借此提权或篡改系统文件。
如何去掉s权限
通过chmod
命令移除s权限,支持符号模式(直观)和数字模式(高效)两种方法:
方法1:符号模式(推荐初学者)
# 移除SetGID(所属组权限中的s) chmod g-s 文件名 # 同时移除两者 chmod u-s,g-s 文件名
示例:
# 移除 /usr/bin/custom-app 的SetUID权限 sudo chmod u-s /usr/bin/custom-app
方法2:数字模式(精确控制权限)
- 查看当前权限:
ls -l 文件名 # 输出示例:-rwsr-xr-x 1 root root 0 Jan 1 12:00 file # 权限数字为4755(SetUID)、2755(SetGID)
- 计算目标权限:
- SetUID对应数字权限的千位(4),SetGID对应百位(2)。
- 去掉s权限:将千位或百位置0。
示例: - 原权限4755(SetUID)→ 目标权限 0755(去掉千位的4)
- 原权限2755(SetGID)→ 目标权限 0755(去掉百位的200)
- 执行命令:
chmod 0755 文件名
操作注意事项
- 权限要求:
- 修改系统文件或他人文件的s权限需
root
权限,命令前加sudo
。 - 修改自己的文件可直接操作。
- 修改系统文件或他人文件的s权限需
- 安全建议:
- 定期检查系统关键目录(如
/usr/bin
、/sbin
)的s权限:find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;
- 仅对必要程序保留s权限(如
sudo
、passwd
),其他程序建议移除。
- 定期检查系统关键目录(如
- 风险预防:
- 修改前备份文件:
cp 源文件 备份路径
。 - 测试修改后程序是否正常运行,避免功能异常。
- 修改前备份文件:
- 核心命令:
chmod u-s/g-s
或chmod 0XXX
(XXX为基础权限)。 - 安全优先:s权限是“双刃剑”,移除不必要的s权限可有效降低提权攻击风险。
- 运维习惯:将权限检查纳入日常系统审计,使用
find
命令自动化扫描。
引用说明基于Linux核心工具
chmod
的官方文档(GNU Coreutils)及Filesystem Hierarchy Standard (FHS) 标准,操作建议参考了Linux安全加固最佳实践,如CIS Linux Benchmark,具体命令可通过man chmod
和man find
查阅手册。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9927.html