SUID/SGID是特权执行开关,仅对有执行权限的二进制文件生效,脚本无效;目录设SGID可使新文件继承属组,粘滞位确保仅文件所有者或root可删除文件。

Linux 文件权限不是孤立的配置项,而是系统安全加固最底层、最直接的执行层。权限设置不当,再强的防火墙或入侵检测也形同虚设;权限收得合理,很多攻击链会在第一步就断开。
SUID/SGID 是特权执行的“开关”,也是高危入口
普通用户本不该拥有 root 权限,但 SUID(chmod 4755)会让程序以文件所有者身份运行。比如 /usr/bin/passwd 设置了 SUID,才能让普通用户修改只有 root 可写的 /etc/shadow。问题在于:一旦这个二进制存在漏洞(如缓冲区溢出),攻击者就能借它提权。更危险的是,SUID 被误加在脚本上(如 chmod 4755 backup.sh)——Shell 脚本本身不继承 SUID 语义,但某些解释器(如老版本 bash)会尝试保留权限,极易引发命令注入提权。
目录权限决定“谁能删谁的文件”,粘滞位是共享环境的安全锚点
目录的 w 权限不等于“能删文件”,而是“能在该目录里创建、重命名、删除任意文件”。这就意味着 /tmp 这类全局可写目录若没设粘滞位(chmod +t /tmp),任何用户都能 rm -f 别人的临时文件,甚至替换关键 .so 或 socket 文件。粘滞位(1000)强制要求:删文件必须是文件所有者、目录所有者或 root ——这是多用户协作中防破坏的底线机制。
权限检查必须结合上下文,不能只看数字755 看似安全,但如果落在 /etc/cron.hourly/custom-check 上,且属主是普通用户,就可能被篡改后定时以 root 身份执行恶意代码。同样,644 的配置文件若放在 /var/www/html/ 下,又没禁用 Web 服务器的目录遍历,就可能被直接下载泄露。判断风险要看三点:
- 文件路径是否属于系统关键区域(
/bin、/etc、/var/spool) - 属主是否为预期账户(如
root、专用服务账户,而非nobody或临时用户) - 最后修改时间是否与已知软件包版本吻合(可用
rpm -V或dpkg --verify校验)
最小权限原则要落地到每个环节
- 新建目录默认不应有
x权限(否则无法cd进入),但脚本或服务启动前应显式chmod 750而非777 - 日志目录设为
drwxr-x---,属组为syslog,避免普通用户读取敏感日志 - 数据库 socket 文件(如
/var/run/mysqld/mysqld.sock)权限应为srw-rw----,属组mysql,禁止其他用户连接
不复杂但容易忽略


















