SetUID功能可以这样理解:
- 只有可以执行的二进制程序才能设定SUID权限
- 命令执行者要对该程序拥有x权限
- 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
- SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
如果vim加上SetUID权限后,普通用户就可以通过vim命令文件打开任何文件,及其危险
- 关键目录应严格控制写权限。比如“/”、“usr”等
- 用户的密码设置要严格遵守密码三原则
- 对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外文件被设置了SetUID权限
SGID既可以针对文件生效,也可以针对目录生效,这和SUID明显不同。如果针对文件,SGID的含义如下:
- 只有可执行的二进制程序才能设置SGID权限
- 命令执行者要对该程序拥有x权限
- 命令执行在执行程序时,组身份升级为该程序文件的属组
- SetGID权限同样只在程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
- /usr/bin/locate是可执行二进制程序,可以赋予SGID
- 普通执行用户对/usr/bin/locate命令拥有执行权限
- 执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
- 命令结束,普通用户的组身份返回为自己的组身份
如果SGID针对目录设置,含义如下:
- 普通用户必须对此目录拥有r和x权限,才能进入此目录
- 普通用户在此目录中的有效组会变成此目录的属组
- 若普通用户对此目录拥有w权限时,新建的文件默认属组是这个目录的属组
Sticky BIT粘着位,简称为SBIT。SBIT目前仅针对目录有效,它的作用如下:
- 粘着位目前只对目录有效
- 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
- 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件
- 4代表SUID
- 2代表SGID
- 1代表SGIT