runsisi's

technical notes

Linux 文件权限标识

2019-01-30 runsisi#linux

为 ceph 客户端增加默认 admin socket 的时候遇到了权限相关的问题,在阅读社区代码[1]时遇到了类似 3770 这样的权限,以前 ls -l 也遇到过类似 -rwxrwxr-T 的字符串,相关的知识可以参考[2][3]两个链接,应该总结的比较清楚了。

简单理解如下:

stickybit 用于文件夹,限制该文件夹下创建的文件只能被文件的 owner 删除,比如 /tmp 目录,虽然所有用户都有 rwx 权限,理论上每个用户都可以删除别人在 /tmp 文件夹下创建的文件,显然这是不合理的,因此通过给 /tmp 目录设置 stickybit,从而自己只能删自己创建的文件;

suid 用于可执行文件,通常来说可执行文件是以执行该可执行文件的用户权限运行的,但某些程序需要 root 权限(如 passwd),此时可以给可执行文件设置 suid,从而该可执行文件以文件的 owner 权限运行;

sgid 用于文件夹,通常来说,文件的 owner/group 属性都是文件的创建者,但在某些协作场景下,需要文件的 group 属性是某个固定的 group,比如一堆开发者,他们都属于 developer group,此时可以给他们协作的文件夹设置 sgid,从而该文件夹下所有新建的文件和子文件夹的 group 属性都与该文件夹的 group 属性一致。

sgid 如果用于文件,则与 suid 类似,用于可执行文件,可执行文件运行时以该文件的 group 权限运行。

参考资料

[1] https://github.com/ceph/ceph/pull/5869/files#diff-ca40628478ff1274b73dcd40c384e7f0R857

[2] Special settings within file permissions - how to understand and manage them

http://www.filepermissions.com/articles/sticky-bit-suid-and-sgid

[3] How to Set and View StickyBit, SUID & SGID in Linux with Examples

https://linoxide.com/how-tos/stickbit-suid-guid/