linux权限(rws与rwt)

0x00概念

一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组. 如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置.

setuid:该标志是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。通过设置setuid权限位(也就是r-s--x--x中的s),使可执行程序暂时获得root权限,及程序涉及到的root操作能够进行.

setgid:该标志只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组.

sticky bit: 该标志可以理解为防删除位. 一个目录里的文件是否可以被某用户删除, 主要取决于用户是否具有该目录的写权限. 如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件. 如果希望用户能够添加文件但同时不能删除文件, 则可以对目录使用sticky bit位. 设置该位后, 用户在该目录下建立文件或目录时,只有文件拥有者与root才有权力删除.

注意:和一般的rwx标志不同,这些特殊标志不再区分所有者,组,其他用户这些概念,即setuid的标志位一定会出现在原本所有者可执行权限的标志位上,setgid的标志位一定会出现在原本组可执行权限的标志位上,sticky的标志位一定会出现在原本其他用户可执行权限的标志位上.

0x01使用

操作这些标志与操作文件权限的命令是一样的, 都是 chmod.

  1. chmod u+s temptemp文件加上setuid标志. (setuid只对文件有效)

    chmod g+s tempdirtempdir目录加上setgid标志 (setgid只对目录有效)

    chmod o+t tempdirtempdir目录加上sticky bit标志 (sticky bit只对目录有效)

    (这里的u g o仅仅是用来区分特殊标志的,或者说是指定放置标志的位置)

  2. chmod 4777 temptemp文件加上setuid标志.

    chmod 2666 tempdirtempdir目录加上setgid标志

    chmod 1666 tempdirtempdir目录加上sticky bit标志

rwsrw-r-- 表示有setuid标志 rwxrwsrw- 表示有setgid标志 rwxrw-rwt 表示有sticky bit标志

那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)

0x02例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ sudo mkdir tempdir    //以root用户建立tempdir
$ ls -l
drwxr-xr-x 2 root root 4096 12月 15 22:04 tempdir //tempdir文件夹的所有组和组为root
$ sudo chmod 3777 tempdir //修改目录权限,添加setgid,sticky bit标志
$ ls -l
drwxrwsrwt 2 root root 4096 12月 15 22:04 tempdir
$cd tempdir
$touch normal //以普通用户创建文件
$ls -l
-rw-rw-r-- 1 void0red root 0 12月 15 22:11 normal //因为setgid的原因,所属组变为了root
$sudo touch super //以root用户创建文件
$sudo chmod o+w super //添加一般用户的写权限
$ls -l
-rw-r--rw- 1 root root 0 12月 15 22:14 super
$rm super //试图以一般用户删除文件
rm: cannot remove 'super': Operation not permitted //因为sticky bit的原因,即使有写的权限,也无法删除
$cd ..
$ sudo chmod o-t tempdir //去掉sticky bit标志
$ls -l
drwxrwsrwx 2 root root 4096 12月 15 22:14 tempdir
$cd tempdir
$rm super //再次以一般用户删除文件
$ls -l
-rw-rw-r-- 1 void0red root 0 12月 15 22:11 normal //删除成功