linux的文件系统权限除了常见的读、写、执行(r、w、x)外还有s、t、i、a权限:
本文介绍一下这四种特殊权限中的S键位有什么特点
s:文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行。
在设置s权限时文件属主、属组必须先设置相应的x权限,否 则s权限并不能正真生效(当我们ls -l时看到rwS,大写S说明s权限未生效)。比如Linux修改密码的passwd便是个设置了SUID的程序,普通用户无读写/etc/shadow文件 的权限确可以修改自己的密码。
我们来进行测试,使用root账号创建一个700的文件,这样除了root别人对这个文件都没有任何权限,包括读取。
1 |
[root@ test test ] # echo test>test.txt
|
2 |
[root@ test test ] # chmod 700 test.txt
|
3 |
[root@ test test ] # ls -l test.txt
|
4 |
-rwx------ 1 root root 5 Oct 27 13:37 test .txt
|
现在却换到非root用户下测试,无法读取这个文件:
1 |
[ntop@test test]$ cat test.txt |
2 |
cat: test.txt: Permission denied |
然后我们给cat添加SETUID权限测试
1 |
[root@ test test ] # chmod a+s /bin/cat
|
2 |
[root@ test test ] # su ntop
|
3 |
[ntop@ test test ]$ cat test .txt
|
4 |
test |
5 |
[ntop@ test test ]$
|
已经可以访问这个只有root用户才有权限访问的文件了。
所以这是一个非常危险的权限,如果rm被赋予了s,那么就可以删除任意root可以删除的文件了。所以应该谨慎给程序赋予这个权限。
可以通过 find / -perm -4000查看系统中所有具有setuid权限文件,看是否有被别人而已添加了超级权限的文件影响了系统的安全~