Linux特殊文件权限属性 SetUID 、 SetGID 和 Sticky BIT 介绍及应用
在Linux基本文件权限中,除了简化的三位数字(rwx八进制)用于表示属主、所属组、其他人的权限之外,隐藏着位于头部的第四位属性位——特殊属性位,为文件操作提供了更好的安全性与简便性。
一、特殊文件权限属性介绍
特殊文件属性与后三位所表示的rwx(read write execute)属性完全不同,三位二进制位依次为SUID 、 SGID 、 SBIT
-
SUID: SetUID 仅针对可执行文件,不能对目录使用,命令执行者需要对该文件拥有执行权限(否则无效)。文件执行者在执行该程序时拥有该文件属主的身份。注意仅在执行该文件时拥有身份。
-
SGID: SetGID 可以针对可执行文件或目录,命令执行者需要对该文件拥有执行权限,对目录拥有x权限(可进入), 当对象为文件时,执行者在执行该文件时拥有该文件所属组的身份;当对象为目录时,执行者在进入该目录后有效组会变为该目录的属组
-
SBIT: Sticky BIT(黏着位) 仅针对于目录,用户需要对该目录拥有w权限(可写入)。在该目录下,普通用户不可删除非自己创建的文件
二、特殊文件权限属性的应用场景
- SUID: passwd 命令拥有SUID属性,普通用户执行时(在输入正确密码的情况下)拥有root身份,可以对权限为640的/etc/shadow文件进行修改
- SGID: locate 命令拥有SGID属性,普通用户执行时拥有 mlocate 组身份,可以对权限为640的mlocate数据库进行查找。另外,一个非该目录属组用户在该目录下创建的文件(一般为640),该组用户有权查看文件
- SBIT: 可用于共享目录(共享存储空间),在共用一个目录的同时保证各个用户私有文件的安全性
三、特殊文件权限属性的使用
由于特殊文件属性位于隐藏的文件属性第一位,修改特殊文件权限属性方法较为简单(同修改基本文件属性),只需要在基本权限属性前增加一位特殊位,计算方法同基本文件属性,为SUID(4)+SGID(2)+SBIT(1),取消赋予第一位不加即可
chmod 4751 test #为test文件添加SUIDchmod 6751 test #为test文件同时添加SUID、SGIDchmod 751 test #清空特殊文件权限属性赋予
查看文件属性仍然为ls -l
drwxrwxrwt 2 zheng zheng 4096 8月 3 09:59 b #拥有SBIT属性的目录(1777)
四、注意事项
- 环境中的有效组即取代用户初始组的作用,例如用户在拥有SGID属性的目录下创建文件时,该文件的所属组是有效组
- 当目录拥有SBIT属性时,用户在拥有其文件的写权限时仍然可以修改其内容,但不能进行重命名和删除操作
危险
- SUID属性有较高的安全风险,除了系统设置的属性最好不要额外设置,可能产生不必要的越权甚至破坏系统行为,例如对vim应用SUID属性后,用户对文件产生的所有修改都可以执行(包括系统配置文件),可以修改passwd中自己的UID导致越权。另外服务器系统维护时建议定期检查有无新增的SUID权限赋予。