每一个文件和目录都有自己的访问权限,访问权限确定后,用户能否访问文件或者目录。最为熟知的一个文件或目录拥有三种权限,分别是读r、写r、执行x。但是Linux可以设置三个额外的信息位:uid、gid、sticky bit。
![](https://img.haomeiwen.com/i24447700/4635b4614a91e807.png)
1、setuid: setuid 只对文件有效,设置使文件在执行阶段具有文件所有者的权限。通过chmod u+s来设置。典型的文件是 /usr/bin/passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root权限,从而可以更改用户密码。
![](https://img.haomeiwen.com/i24447700/c5092f48430ea289.png)
2、setgid: setgid 只对目录有效,目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。通过chmod g+s来设置。这个可以在大范围内创建文档并与人分享。
3、Sticky bit:粘滞位权限只能针对目录设置,当目录被设置了粘滞位权限以后,即便用户对该目录有写入权限,也不能删除该目录中其他用户的文件数据,而是只有该文件的所有者和root用户才有权将其删除。设置了粘滞位之后,正好可以保持一种动态的平衡:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据。通过chmod o+t来设置,比较典型的就是/tmp目录。
![](https://img.haomeiwen.com/i24447700/90446eba8a23a2f9.png)
可以找出所有危险的目录,即设置目录所有人可读写却没有设置sticky位的目录:find / -perm 0007 -type d 。
最后说一下umask命令指定在建立文件时预设的权限掩码。[权限掩码]是由八进制的数字所组成,将现有的存取权限(目录是777,文件是666)减掉权限掩码后,即可产生建立文件时预设的权限。umask可以获取当前权限掩码,笔者的是0002,那么文件就是0664,目录就是0775。
![](https://img.haomeiwen.com/i24447700/60e99106fbe64605.png)
网友评论