suid、sgid和sticky bit是linux权限模型中千位(4)、百位(2)、十位(1)的三个独立控制位:suid使可执行文件以所有者身份运行;sgid对目录实现新文件自动继承所属组;sticky bit限制目录内仅可删除自己创建的文件。

Linux 的 suid、sgid 和 sticky bit 不是“额外功能”,而是嵌入在权限模型里的三个独立控制位,各自承担明确职责,用错一个就可能打开安全缺口。
suid:执行时临时切换到文件所有者身份
它只对可执行文件生效。普通用户运行设置了 suid 的程序(比如 /usr/bin/passwd),进程实际以该文件所有者(通常是 root)的身份运行,从而能修改 /etc/shadow 这类受保护文件。
关键细节:
- 若文件没有执行权限(x),suid 位显示为大写 S,此时不生效;设了 suid 后执行位必须存在,才显示为小写 s
- 仅限二进制或带 shebang 的脚本(且内核允许解释器继承 suid);纯 shell 脚本通常被内核忽略 suid,属无效设置
- 禁止随意给编辑器(如 vim)、shell(如 bash)加 suid——这等于把 root 权限交到任意用户手上
sgid:分场景作用,目录用途远大于文件
对文件:执行时进程组 ID 切换为文件所属组,极少使用,风险高,基本不推荐。
对目录:这才是 sgid 的核心价值——新创建的文件自动继承目录的所属组,不管创建者属于哪个组。适合协作目录,比如开发团队共用的 /srv/project。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
操作要点:
- 设置:chmod g+s dirname 或 chmod 2755 dirname
- 效果可见:目录权限末尾的 x 变成 s(有执行权)或 S(无执行权)
- 注意:普通用户在该目录下仍需有写权限才能创建文件;sgid 不影响读/写权限本身
sticky bit:不是防写,而是防删
它只对目录有意义,作用非常具体:即使你对目录有写权限,也**只能删除自己创建的文件**。root 和目录所有者不受限。
典型例子是 /tmp,所有人都能往里放东西,但不能删别人的东西。
常见误区:
- 它不阻止覆盖、修改文件内容(只要文件自身有 w 权限)
- 它不阻止重命名自己的文件,也不阻止在目录中新建文件
- 错误地加在非共享目录(如用户家目录)上,既无必要,还可能干扰自动化脚本
这三个位对应八进制权限的千位(4)、百位(2)、十位(1)。chmod 4755、chmod 2775、chmod 1777 是标准写法;四位数字如 7777 是非法的,shell 会截断处理。










