在linux中,有一个安全上下文的概念,一个进程(运行的程序)能否访问某个文件,取决于发起进程的用户对被操作文件存在什么权限。
A. 如果进程的发起者是该被访问文件的属主,则以文件属主的权限来访问
B. 否则,如果进程的发起者是属于该被访问文件的属组中的用户,则以文件属组的权限来访问
C. 否则,以其他用户来访问此文件
而在这个权限之外,还存在着三种特殊权限
SUID:当对某一个程序文件设置了SUID置位,则该进程(程序)访问系统上的文件时,以程序的属主的身份来访问该文件,而不是执行程序的用户的权限来访问文件。
SGID:当某目录的属组对目录有写权限,并且设置了SGID置位时,属于属组的这些用户在这个目录下创建文件时,被创建的文件的属组默认会变成该目录的属组,而不是创建文件的用户的基本组。
SBIT:当对某目录设置了SBIT置位时,用户只能删除自己在该目录下创建的文件,而不能删除其他用户创建的文件,哪怕用户对目录存在写权限。
操作:
1. SUID: chmod u+s
2. SGID: chmod g+s
3. SBIT: chmod o+t
实验:
一、 SUID实验
将/bin/cat复制到/test目录,将/test/bin程序进行SUID置位。让一个普通使用该程序来查看/etc/shadow文件。然后再用系统自带的/bin/cat来查看该文件。
# 将/bin/cat复制到/test目录
[root@liuqing test]# cp /bin/cat /test/
[root@liuqing test]# ll /test
总用量 60
-rwxr-xr-x. 1 root root 54080 11月 21 17:04 cat
#对/test/cat文件进行SUID置位,该文件的属主属组都是root
[root@liuqing test]# chmod u+s /test/cat
[root@liuqing test]# ll
总用量 60
-rwsr-xr-x. 1 root root 54080 11月 21 17:04 cat
-rw-r-----. 1 lyf lyf 14 11月 21 16:15 file1.txt
#切换到普通用户liuqing
[root@liuqing test]# su - liuqing
上一次登录:四 11月 21 16:05:54 CST 2019pts/1 上
[liuqing@liuqing ~]$
#普通用户liuqing,使用/test/cat可以查看/etc/shadow
[liuqing@liuqing ~]$ /test/cat /etc/shadow
root:$6$gdIxmcOy$JSDVjR0tSdQfVTDrukonWIfRLdDIut63ZYiucsTmj8TPJ0Sq/wZduJhWgSUidlHeW6pmISq.B7Vx4OlGX1P1p1:18185:0:99999:7:::
#普通用户使用系统自带的/bin/cat,不能查看/etc/shadow
[liuqing@liuqing ~]$ ll /bin/cat
-rwxr-xr-x. 1 root root 54080 8月 20 14:25 /bin/cat
[liuqing@liuqing ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
二、 SGID实验
系统上有两个用户,gentoo和fedora,它们的附加组为mygrp,现在对/test目录进行SGID置位,当我们使用这两个用户在/test目录下创建文件时,文件的属组会自动变成mygrp。
#查看gentoo和fedora是否存在
[root@liuqing test]# id gentoo
uid=4007(gentoo) gid=4007(gentoo) 组=4007(gentoo),5000(magedu)
[root@liuqing test]# id fedora
uid=4008(fedora) gid=4008(fedora) 组=4008(fedora),5000(magedu)
# 创建组mygrp
[root@liuqing test]# groupadd mygrp
# 将用户gentoo和fedora添加附加组mygrp
[root@liuqing test]# usermod -a -G mygrp gentoo
[root@liuqing test]# usermod -a -G mygrp fedora
[root@liuqing test]# id gentoo
uid=4007(gentoo) gid=4007(gentoo) 组=4007(gentoo),5000(magedu),5003(mygrp)
[root@liuqing test]# id fedora
uid=4008(fedora) gid=4008(fedora) 组=4008(fedora),5000(magedu),5003(mygrp)
# 修改/test的属组为mygrp,修改属组权限为rwx,对/test进行SGID置位
[root@liuqing /]# chown :mygrp /test
[root@liuqing /]# chmod g+w /test
[root@liuqing /]# chmod g+s /test
[root@liuqing /]# ls -ld /test
drwxrwsr-x. 2 root mygrp 34 11月 21 17:23 /test
# 切换用户到gentoo
[root@liuqing /]# su - gentoo
上一次登录:四 11月 21 17:22:21 CST 2019pts/0 上
[gentoo@liuqing ~]$
# gentoo用户在/test目录下创建了gentoo.txt文件,查看文件属性,该文件属组为mygrp
[gentoo@liuqing ~]$ touch /test/gentoo.txt
[gentoo@liuqing ~]$ ll /test
总用量 60
-rw-rw-r--. 1 gentoo mygrp 0 11月 21 17:25 gentoo.txt
三、 SBIT实验
/test目录的属组是mygrp,对这个目录,进行了SGID置位,mygrp组对目录有rwx权限。那么这个目录下,附加组是mygrp的用户在目录中创建的文件的属组是mygrp,这时,附加组是mygrp的这些用户可以在目录中创建、修改删除文件,而这样的话,这些用户也可以删除别的用户创建的文件,为了不让别人删除某用户创建的文件,则可以对目录进行stick,stick之后,只有用户自己和管理员可以删除该目录下该用户自己创建的文件。
# 对目录进行stick置位,查看权限,发现在o的权限位,有一个t
[root@liuqing test]# chmod o+t /test
[root@liuqing test]# ls -ld /test
drwxrwsr-t. 2 root mygrp 52 11月 21 17:25 /test
#切换到fedora用户,创建一个fedora.txt
[root@liuqing test]# su - fedora
[fedora@liuqing ~]$ touch /test/fedora.txt
[fedora@liuqing ~]$ echo "How are you?" >> /test/fedora.txt
#查看目录下的文件,对于gentoo.txt ,它的权限是属组有rw。
[fedora@liuqing ~]$ ll /test
-rwsr-xr-x. 1 root root 54080 11月 21 17:04 cat
-rw-rw-r--. 1 fedora mygrp 13 11月 22 08:45 fedora.txt
-rw-rw-r--. 1 gentoo mygrp 0 11月 21 17:25 gentoo.txt
#fedora用户可以编辑gentoo.txt这个文件
[fedora@liuqing ~]$ echo "New line" >> /test/gentoo.txt
[fedora@liuqing ~]$
[fedora@liuqing ~]$
[fedora@liuqing ~]$ cat /test/gentoo.txt
New line
#由于进行了SBIT置位,fedora用户不能删除gentoo.txt这个文件,因为这个文件不是fedora创建的。
[fedora@liuqing ~]$ rm /test/gentoo.txt
rm: 无法删除"/test/gentoo.txt": 不允许的操作
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。