权限分析之SUIDSGIDsticky

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了权限分析之SUIDSGIDsticky相关的知识,希望对你有一定的参考价值。

SUID

UID我们都知道是用户标识,可以使用命令查看当前用户id

id -u username  //显示当前用户的id,其中0表示管理员(一般为root)


/etc/shadow文件。对任何人都不开放权限,除了root用户

[[email protected] ~]#ll /etc/shadow
----------. 1 root root 1309 Jul 29 11:32 /etc/shadow  //rwx权限全部为空


我们以普通用户身份修改密码时,会用到passwd命令,我们都知道shadow是专门存放用户密码的地方,普通用户根本没有权限进入。

那么问题来了,既然shadow文件无法对普通用户开放,那为什么我们还能够修改本用户密码呢?

这就要用到SUID的功能了,我们来看passwd这个程序文件

[[email protected] app]#ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd  //在属主对应权限中有个s权限


s权限,作用就是当某一用户执行调用passwd这个程序时,其身份会临时切换为本程序所属主,也就是root,然后再以root身份执行此程序

举例说明:

当用户wang想修改自己的密码,会执行passwd命令,这条命令对应的其实是一份文件/usr/bin/passwd,而此文件具有s权限,所以会将普通用户wang的身份临时切换成root,

然后再以root身份来对shadow文件进行修改,命令执行结束,root切换回普通用户wang的身份。

[[email protected] ~]$ls -l /etc/shadow
----------. 1 root root 1405 Jul 29 16:01 /etc/shadow  //密码修改完成之后,我们会看到shadow文件时间更新了,说明此文件已经被修改了


SUID的这个特性只是应用在二进制可执行程序上,我们平时接触的文件、目录不会出现所属主具有s权限的

SUID只能在文件所有者权限范围做修改,要想修改文件所属组对应权限,可以参考SGID


SGID

SGID跟SUID功能有些相似,在针对二进制文件时,都会临时切换进程所有者身份,只不过SGID是将所有者身份切换到对应的组里,然后执行组所对应的权限;

另外SGID还可以针对目录设置,指定目录所属组然后将组权限加上s,表示此目录内新建文件默认的属组就是其一级目录的所属组

举例说明

[[email protected] app]#chmod g+s dir1/  //新建目录dir1,并将组权限加上s
[[email protected] app]#chgrp wang dir1/   //将所属组改为wang
[[email protected] app]#ll -d dir1/
drwxr-sr-x. 2 root wang 6 Jul 29 16:34 dir1/
[[email protected] app]#touch dir1/f1
[[email protected] app]#ll dir1/f1
-rw-r--r--. 1 root wang 0 Jul 29 16:35 dir1/f1  //dir1下新建的文件f1默认所属组就是wang
[[email protected] app]#ll -d  dir1/dir2/    //在dir1下新建子目录dir2,在dir2下新建文件f2,其所属组都跟一级目录一样                              
drwxr-sr-x. 2 root wang 16 Jul 29 16:39 dir1/dir2/
[[email protected] app]#ll  dir1/dir2/f2                                  
-rw-r--r--. 1 root wang 0 Jul 29 16:39 dir1/dir2/f2


通过上述分析,我们知道,SGID会将一级目录所属组一直传递给其目录下的各级文件

SGID只能在文件所属组对应的权限范围进行修改


sticky粘滞位

用户创建的文件,有时候不想让其他人修改、删除

sticky可以帮助解决这个问题

[[email protected] tmp]$ll -d /tmp
drwxrwxrwt. 17 root root 4096 Jul 29 16:52 /tmp   ///tmp目录具有sticky位,即other对应的权限是t
[[email protected] tmp]$ll wang.txt
-rw-rw-r--. 1 wang wang 15 Jul 29 16:48 wang.txt   //wang用户创建了文件,并进行过编辑
[[email protected] tmp]$id   //切换成用户gao,然后执行删除和修改操作,系统提示拒绝
uid=1000(gao) gid=1000(gao) groups=1000(gao) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[[email protected] tmp]$rm -f wang.txt
rm: cannot remove ‘wang.txt’: Operation not permitted
[[email protected] tmp]$echo "linux" >> wang.txt
bash: wang.txt: Permission denied


设置了sticky位的文件,只有所有者自己和root可以编辑、删除,其他人是不能做任何修改的


我们知道文件的权限有两种表示方法:

模式法:rwx

数字法:666

同样SUID、SGID和sticky也有这两中表示方法

模式法:sst

数字法:421

其中

SUID对应数字4

SGID对应数字2

sticky对应数字1


加入要修改文件f1具有SUID权限,且传统权限位744,那么可以这样做

chmod 4764 f1

即f1具有的权限是rwsrw-r--

本文出自 “a_pan” 博客,请务必保留此出处http://panpangao.blog.51cto.com/10624093/1951975

以上是关于权限分析之SUIDSGIDsticky的主要内容,如果未能解决你的问题,请参考以下文章

文件的特殊权限,SUIDSGIDSTICKY

特殊权限 suidsgidsticky

Linux文件系统上的特殊权限(SUIDSGIDSticky)

Linux中文件的SUIDSGIDSticky权限说明

知识块扫描

Linux SUIDSGIDsticky提权