Linux 命令行入门教程
43. SUID / SGID / Sticky 特殊权限
本教程共 90 篇 · 第 43 篇
43. SUID / SGID / Sticky 特殊权限
普通权限讲完了(§40 / §41)。还有三个特殊位,平时少碰但要懂。它们加在权限数字前面,形成”第四位”:SUID = 4,SGID = 2,Sticky = 1。
SUID(设用户位):放在可执行文件上,别人运行它时,临时拥有文件所有者的权限。
典型例子是 passwd 命令。普通用户靠它改自己的密码,实际是以 root 身份去写 /etc/shadow。
chmod u+s myprog
chmod 4755 myprog
ls -l myprog # 所有者那一列的 x 变成 s
SGID(设组位):
- 放在文件上:运行时用文件所属组的权限。
- 放在目录上:目录里新建的文件自动继承该目录的组,适合团队共享。
chmod g+s /shared
chmod 2755 /shared
Sticky Bit(粘滞位):放在目录上,只有文件所有者、目录所有者或 root 能删除里面的文件。
典型例子是 /tmp:人人能写,但删不了别人的文件。
chmod +t /shared/tmp
chmod 1777 /shared/tmp
ls -ld /tmp # 其他人那一列的 x 变成 t
Note若本该是
s/t的位置显示大写S或T,说明对应的x位没设。例如rwS表示有 SUID 但无执行位,通常是配错了。
WarningSUID / SGID 让程序以更高权限运行,是提权风险点。只在该用的系统程序(如 passwd)上设,别给自己写的脚本随便加。
小结:三个特殊位加在权限”第四位”;SUID 提所有者权、SGID 继承组、Sticky 限制删除。平时少碰,看懂即可。
参考来源
- GeeksforGeeks, Advance File Permissions in Linux — https://www.geeksforgeeks.org/?p=443601
- GeeksforGeeks, Set SGID in Linux — https://www.geeksforgeeks.org/set-sgid-in-linux/