linux中SUID、SGID、STICKY讲解

Posted on 2017-07-27 16:13  惟愿此心无怨尤  阅读(1507)  评论(0)    收藏  举报

2017-07-27 15:53:08 @惟愿此心无怨尤

 

 

Linux中一切皆文件,今天一起来学习一些特殊权限。

 

首先,大家有没有思考过这样的问题,就是一个普通用户user为何能通过passwd修改自己的用户密码,而我们知道用户的密码都是加密后存入/etc/shadow中的,查看一下该文件的权限,如下:

 

发现该文件中user作为other用户是不可能修改该文件内容的,但为何user能修改自己密码并且存入/etc/shadow中呢,通过以下的学习,相信大家能有所了解并且对文件权限的使用能有不一样的领悟。

 

首先是suid,特殊权限表示为s,作用在可执行文件的文件所有者owner上面,该权限表示任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属人的权限。

好了,我们知道用户是通过passwd命令修改自己密码的,所以我们查看psswd的权限,如下:

 

在文件所有者中有特殊权限s,如上所述,可见,在普通用户修改自己密码时,是通过临时获取了root的权限然后才修改密码并且存入/etc/shadow中的。

 

通过一个简单的例子来更好的说明这个特殊权限的功能。

 

进入/app目录,将cat目录复制到该目录下,并且创建一个用户laowang,赋予cat目录权限为4711,其中4表示特殊权限suid,然后切换到laowang,创建一个文件file,写入aaa都文件中。

 

 

然后切换到普通用户user下,进入该目录,首先用原始的cat进行文件fiile的查看,发现权限不足,然后用/app/cat进行file的查看,发现口语查看,足以说明以上对suid的描述。

 

 

 

对于sgid,特殊权限表示为s,在这里分为两种情况:

当对一个可执行的二进制文件作用了SGID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属组的权限。

当对一个目录作用了SGID权限之后,任何对该目录有wx权限的用户在该目录下创建的文件及目录的所有属均为该目录的所有组。

对于其中第二种情况测试如下:

进入/app目录。创建一个文件夹tetdir,赋予该目录权限2777,并且把文件所属组改为laowang,其中,2表示sgid,然后进入该目录,创建文件file1,切换为user,进入。/aoo/testdir,创建文件file2.

 

 

可见在该目录下创建的任何文件都属于该目录的所属组了。

 

对于sticky,特殊权限表示为t,它的功能为当对一个目录作用了sticky之后(只限制组用户,目录的owner不受影响),该目录下的文件仅其所属人才能删除。

测试如下:

进入/app目录创建文件夹testdir,并且赋予权限1777,该所有者为laowang;切换用户老王,创建文件file1,删除成功,在次创建文件file1,切换用户user,创建文件file2,删除file1失败,删除file2成功,测试完毕。

 

 

可见,在该目录下,创建的文件只有该目录的所有者owner才能进行文件的删除

 

简单总结一下,在linux中,一个文件的执行,不但要看该文件的权限,还要看执行该文件工具的权限,只有当执行该文件的工具和文件本身的权限都达到要求时,才能执行。