分类: LINUX
2019-01-18 23:46:20
4、目录的w位不设置,即使你拥有目录中某文件的w权限也不能写该文件(测试发现可以修改具有w权限的文件,只是不能新建文件)。
1. SetUID 权限
只有可以执行的二进制程序才能设定SetUID权限,并且命令执行者要对该程序拥有x(执行)权限。对于设定了 SetUID 权限的命令来说,其功能是命令执行者在执行该程序文件时获得该程序文件所有者的身份。SetUID 权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。
e.g.
# ll /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
设定与取消 SetUID 的方法如下:
在所有者权限之前加上 4 代表SetUID,
设定方法为:chmod 4755 文件名,相应的取消 SetUID 方法为:chmod 755 文件名。
还有设定方法为: chmod u+s 文件名,相应的取消 SetUID 方法为:chmod u-s 文件名。
2. SetGID 权限
可以对可执行的二进制程序文件设置 SetGID 权限,也可以对目录设置 SetGID 权限。
(1) SetGID 针对文件的作用
对于文件只有可执行的二进制程序才能设置 SetGID 权限,并且命令执行者要对该程序拥有 x(执行)权限。对于设定了 SetGID 权限的二进制程序来说,命令执行者在执行程序的时候,组身份升级为该程序文件的所属组。SetGID 权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效。
/usr/bin/locate是可执行二进制程序,可以赋予SetGID,看到它的所属组权限上有一个 s,这个 s 就表示 locate 命令拥有SetGID 权限。普通用户对 /usr/bin/locate 命令拥有执行权限,因此,一个普通用户在执行 locate 命令时组身份会升级为 locate 命令的所属组 slocate,而 slocate 对文件资料库 /var/lib/mlocate/mlocate.db 拥有 r(读)权限,所以locate 命令可以访问文件资料库,从而普通用户可以通过 locate 命令查找文件。当然,命令结束后普通用户的组身份返回为它原来的所属组。
(2) SetGID 针对目录的作用
普通用户必须对一个目录拥有r和x权限,才能进入此目录。对于设定了 SetGID 权限的目录来说,普通用户在此目录中的有效组会变成此目录的所属组,若普通用户对此目录拥有w权限时,在目录中新建的文件的默认所属组是这个目录的所属组。
设定与取消 SetGID 的方法如下:
root@CentOS7 home]# mkdir test
[root@CentOS7 home]# ll
total 3
drwxr-xr-x. 2 root root 6 Jan 18 23:35 test
drwx------. 16 wzf wzf 4096 Jan 18 22:23 wzf
[root@CentOS7 home]# chmod g+s test
[root@CentOS7 home]# ll -d test
drwxr-sr-x. 2 root root 6 Jan 18 23:35 test
[root@CentOS7 home]# chmod 777 test
[root@CentOS7 home]# ll -d test
drwxrwsrwx. 2 root root 6 Jan 18 23:35 test
[root@CentOS7 home]# su - wzf
Last login: Fri Jan 18 23:03:27 CST 2019 on pts/0
[wzf@CentOS7 ~]$ cd /home/test
[wzf@CentOS7 test]$ ll
total 0
[wzf@CentOS7 test]$ touch aa
[wzf@CentOS7 test]$ ll
total 0
-rw-rw-r--. 1 wzf root 0 Jan 18 23:36 aa
[wzf@CentOS7 test]$ id
uid=1000(wzf) gid=1000(wzf) groups=1000(wzf),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
在所有者权限之前加上 2 代表SetGID。
设定方法为:chmod 2755 文件名,相应的取消 SetGID 方法为:chmod 755 文件名。
还有设定方法为: chmod g+s 文件名,相应的取消 SetGID 方法为:chmod g-s 文件名。
3) Sticky BIT 权限
Sticky BIT 表示的是粘着位,主要是用来避免其他用户对文件的误操作。
粘着位目前只对目录有效,普通用户要对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限。如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
例如:
最常见的系统中拥有粘着位的目录是 /tmp,通过查看权限可以看到 /tmp 的其他人权限有一个 t,表示拥有粘着位,即拥有 Sticky BIT 权限。
e.g.
[www@CentOS7 tmp]$ ll *.txt
-rw-r--r--. 1 root root 0 Jan 18 23:03 t1.txt
-rw-rw-r--. 1 wzf wzf 0 Jan 18 23:03 t2.txt
-rw-rw-r--. 1 www www 0 Jan 18 23:04 t3.txt
[www@CentOS7 tmp]$ rm -f t3.txt
[www@CentOS7 tmp]$ ll *.txt
-rw-r--r--. 1 root root 0 Jan 18 23:03 t1.txt
-rw-rw-r--. 1 wzf wzf 0 Jan 18 23:03 t2.txt
[www@CentOS7 tmp]$ rm t2.txt
rm: remove write-protected regular empty file ‘t2.txt’? y
rm: cannot remove ‘t2.txt’: Operation not permitted
[www@CentOS7 tmp]$ rm t1.txt
rm: remove write-protected regular empty file ‘t1.txt’? y
rm: cannot remove ‘t1.txt’: Operation not permitted
[www@CentOS7 tmp]$
设置与取消粘着位 Sticky BIT 权限的方法如下:
设置粘着位 :chmod 1777 目录名 或 chmod o+t 目录名
取消粘着位 :chmod 777 目录名 或 chmod o-t 目录名
注意:
我们看到了 suid 怎样工作,sgid 以同样的方式工作。它允许程序继承程序的组所有权,而不是当前用户的程序所有权。这里有一些关于 suid 和 sgid 的其它的但是很重要的信息。首先,suid 和 sgid 占据与 ls -l 清单中 x 位相同的空间。如果还设置了 x 位,则相应的位表示为 s(小写)。但是,如果没有设置 x 位,它将表示为 S(大写)。另一个很重要的提示:在许多环境中,suid 和 suid 很管用,但是不恰当地使用这些位可能使系统的安全遭到破坏。最好尽可能地少用“suid”程序。passwd 命令是为数不多的必须使用“suid”的命令之一。Sticky BIT 位占据ls -l 清单中x位相同的空间。如果还设置了 x 位,则粘着位为t;如果没有x权限,则战粘着位设置为T(大写)。