linux权限(特殊权限/高级权限)
举个栗子:在linux中同个系统可以有多个用户,用户的创建就是在passwd文件、shadow文件、group文件、gshadow文件中添加记录,修改密码时,root用户可以修改所有的,普通用户也可以修改自己的密码,但是这些都是对shadow文件的修改,换句话说普通用户在文件中可以修改root密码造成系统的不安全。
linux中通过特殊权限来处理。
高级权限有3个,SUID、SGID、Sticky ,他们借用了原本文件的执行位。
-rwxrwxrwx
x 的位置可以设置高级权限。
-rwsrwsrwt
suid 4
sgid 2
sticky 1
同权限的数字表示法。
SUID:简单来说就是将文件的权限在文件运行过程中临时变为文件的属主级别。
Suid的原则:
1、SUID权限仅对二进制程序(binary program)有效,也就是作用于命令文件。
2、执行者对于该程序需要具有x的可执行权限,文件是可执行的。
3、执行者将具有该程序拥有者(owner)的权限,临时获得属主的权限。
4、本权限仅在执行该程序的过程中有效(run-time),在该程序运行时临时生效。
Suid工作原理
A:环境前提:
1、linux中有一个二进制程序cat,cat的属主属组均为root
2、linux中有一个系统文件/etc/shadow,shadow属主属组均为root
3、我们创建一个普通用户叫user1
4、user1具有对cat的执行权限
5、user1 不具有对/etc/shadow的任何权限
B:默认情况下
1、user1执行cat,系统创建一个cat进程,进程的属主属组取程序发起者,也就是user1:user1。
2、cat进程访问/etc/shadow,由于进程属主属组是user1:user1,与/etc/shadow的属组属主都不匹配,所以被拒绝访问。
C:给cat设置SUID之后
1、user1执行cat.系统创建一个cat进程,进程的属主取cat的属主,属组取程序发起者,就是root:user1。
2、cat进程访问/etc/shadow,由于进程属主是root,与/etc/shadow的属主匹配,所以被允许访问。
这也就是普通用户能修改文件又能保安证安全的原因。我们root用户可以通过vi、vim来对文件直接修改,普通用户则不行,要想修改密码只能通过指令passwd。而passwd命令文件就设置了SUID。
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
SGID:SGID作用在文件和目录上的效果有区别。
作用在文件上也是如SUID一样,只不过这个换为组。
作用在目录上,那么所有这个目录下的文件的组都会继承这个目录的组。
[[email protected] test-gsc]# mkdir qxtest
[[email protected] test-gsc]# ll -d qxtest
drwxr-xr-x. 2 root root 6 Oct 17 17:52 qxtest
[[email protected] test-gsc]# cd qxtest/
[[email protected] qxtest]# touch one.txt
[[email protected] qxtest]# ll one.txt
-rw-r--r--. 1 root root 0 Oct 17 17:53 one.txt
[[email protected] qxtest]# cd ..
[[email protected] test-gsc]# chmod 2757 qxtest/
[[email protected] test-gsc]# ll -d qxtest/
drwxr-srwx. 2 root root 21 Oct 17 17:53 qxtest/
[[email protected] qxtest]# su - user01
Last login: Tue Oct 15 19:09:52 CST 2019 on pts/1
[[email protected] ~]$ cd /tmp/test-gsc/qxtest/
[[email protected] qxtest]$ touch two.txt
[[email protected] qxtest]$ ll
total 0
-rw-r--r--. 1 root root 0 Oct 17 17:53 one.txt
-rw-rw-r--. 1 user01 root 0 Oct 17 17:57 two.txt
[[email protected] qxtest]$ id user01
uid=1001(user01) gid=1001(user01) groups=1001(user01)
用户user01的主要组是user01,那么他所创建的文件的组也应该是user01但是应为目录设置了SGID所以组被改为目录的属组。
Sticky :标记文件夹,文件夹为777权限的,用户只能查看删除修改自己的文件,别的用户的文件要看文件的权限。
例如:/tmp目录
注:因为高级权限的位置占据了x的位置,不能看到x的属性,用大小写做区分。大写S表示没有x权限,小写s 表示有x权限。
另外有个比较有趣的事:
vi文件,将vi文件复制一份,并用root用户将复制出来的vi文件赋予SUID的特殊权限,这时切换回普通用户,使用修改后的这个vi命令文件就可以以vi文件属主(root)的身份进行敏感文件的操作,比如修改/etc/passwd文件,将自己的用户UID变为0,在系统中就会认为自己是root用户(实际是普通但是UID为0 的识别为root)。相当与**了root.
上一篇: 前端的学习之路:初级CSS---继承