SUID和SGID的问题

通过以下的命令可以找到系统上所有的设置了suid的文件:
[root@sgrid5 /]# find / -perm -04000 -type f -ls
其实在UNIX的实现中,文件权限用12个二进制位表示,如果该位置上的值是
在UNIX实现中,文件权限用12位二进制位表示(1,标示有相应的权限):
11 10 9 8 7 6 5 4 3 2 1 0
S G T r w x r w x r w x
第11位为SUID位,第10位为SGID位,第9位为sticky位,第8-0位对应于上面的三组rwx位。

给文件加SUID和SUID的命令如下:
chmod u+s filename 设置SUID位
chmod u-s filename 去掉SUID设置
chmod g+s filename 设置SGID位
chmod g-s filename 去掉SGID设置
另外一种方法是chmod命令用八进制表示方法的设置

SUID和SGID是在执行程序(设置了可执行位)时起作用,所以设置其他种类文件的SUID和SGID位无意义。
linux 用户除了一般的user id、group id还有两个称之为有效ID(effective ID),euid、egid。
内核是主要是通过euid和egid来确定对资源的访问权限。
一个进程如果没有SUID或SGID位,则euid=uid egid=gid,分别是运行这个程序的用户的uid和gid
如果一个程序设置了SUID,则euid和egid变成被运行的程序的所有者的uid和gid
SUID的作用就是这样:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源
SUID的优先级比SGID高,当一个可执行程序设置了SUID,则SGID会自动变成相应的egid。

SUID虽然很好了解决了一些问题,但是同时也会带来一些安全隐患。
因为设置了 SUID 位的程序如果被攻击(通过缓冲区溢出等方面),那么hacker就可以拿到root权限。
因此在安全方面特别要注意那些设置了SUID的程序。

posted @ 2017-12-19 18:05  常青树,不老松  阅读(81)  评论(0)    收藏  举报