gpt4 book ai didi

CentOS系统特殊权限SUID SGID STICKY讲解

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章CentOS系统特殊权限SUID SGID STICKY讲解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1.什么是特殊权限?

我们知道权限有r,w,x。其实除了这三个,还有特殊权限。比如:

[root@localhost~]#ls-l/usr/bin/passwd 。

-rwsr-xr-x1rootroot22960Jul172006/usr/bin/passwd 。

可以发现权限位,有个s。特殊权限有如下3种:

SUID 。

SGID 。

STICKY 。

2.关于suid 。

我们知道linux有一个进程安全模型的概念,比如Tom执行passwd来进行修改密码:

第一,注意到passwd的权限为:

[hadoop@localhost ~]$ ls -l `which passwd` 。

-rwsr-xr-x 1 root root 22960 Jul 17 2006 /usr/bin/passwd 。

第二,注意到Tom不是root用户,也不属于root组.

我们先不考虑什么特殊权限s。很显然,此时Tom只能以other(r-x)来运行passwd。Tom可以发起一个进程,这个进程是passwd,想修改自己的密码.

第三,用户Tom执行完passwd修改密码,其实就是保存至/etc/shadow中,下面我们看看/etc/shadow文件的权限情况.

[hadoop@localhost ~]$ ls -l /etc/shadow 。

-r-------- 1 root root 2713 Jun 13 16:34 /etc/shadow 。

[hadoop@localhost ~]$ 。

那个属于Tom的修改密码的进程应该要去修改/etc/shadow文件,但是根据上面的/etc/shadow的权限,除了root用户外,谁都不可以修改的!也就是说,根据进程安全模型,普通用户根本无法修改密码!但事实上,是可以修改的。原因就在于那个特殊权限s.

也就是说,suid表示运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者。也就是说普通用户去执行passwd修改密码,其实是发起了一个进程,这个进程的属主是root用户,那么很显然就可以修改shadow这个影子文件了.

3.关于sgid 。

根据suid的理解,可知sgid表示运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者的基本组。可以举例分析:

第一:root用户创建了一个项目目录 。

[root@localhost /]# 。

[root@localhost /]# ls -ld /project/cma 。

drwxrwxr-x 2 root develop 4096 Jun 14 22:14 /project/cma 。

第二:项目组成员java01,java02,...均属于develop组(他们的附加组),也就是说他们对/project/cma具有rwx权限.

[java02@localhost cma]$ ls -l 。

total 8 。

-rw-rw-r-- 1 java01 java01 0 Jun 14 22:24 01.java 。

-rw-rw-r-- 1 java02 java02 0 Jun 14 22:25 02.java 。

上面看到他们可以在/project/cma中创建文件,根据以前的理论:【谁创建的文件,文件的属主就是谁,属组就是他的基本组】,上面的没有问题。但是,我们希望这些项目组成员之间可以相互编辑其他人的文件,该如何做呢?

第三:由于项目组成员java02,并不属于java01的私有组,显然java02只对01.java具有r--权限,不可以编辑。此时我们可以使用sgid,来改变默认的这种行为~ 。

[root@localhost cma]# pwd 。

/project/cma 。

[root@localhost cma]# chmod -R g+s /project/cma 。

[root@localhost cma]# ls -ld 。

drwxrwsr-x 2 root develop 4096 Jun 14 22:25 . 。

[root@localhost cma]# 。

注意了,出现了特殊权限位s,但是有时候可能会显示S。【如果是s说明这个权限位上以前是具有x权限的】 。

第四:利用sgid后,以后我们的项目组成员便可以在此目录下编辑其他成员的文件了.

[java02@localhost cma]$ ls -l 。

total 16 。

-rw-rwSr-- 1 java01 java01 0 Jun 14 22:24 01.java 。

-rw-rw-r-- 1 java01 develop 0 Jun 14 22:33 01.txt 。

-rw-rwSr-- 1 java02 java02 0 Jun 14 22:25 02.java 。

-rw-rw-r-- 1 java02 develop 0 Jun 14 22:33 02.txt 。

[java02@localhost cma]$ 。

也就是说利用sgid可以帮我们达到这样的目的:

在目录下创建的文件的属组不在是用户的基本组,而是目录的属组.

4.关于sticky 。

此时此刻,我们的项目组成员已经可以相互编辑/project/cma下面的文件了,但是有个要求:我们希望用户只能删除自己的文件,而不可以删除别人的文件。这就要使用sticky了.

[root@localhost cma]# chmod -R o+t /project/cma 。

[java01@localhost cma]$ id 。

uid=5016(java01) gid=5016(java01) groups=5016(java01),5018(develop) context=root:system_r:unconfined_t:SystemLow-SystemHigh 。

[java01@localhost cma]$ rm 02.txt 。

rm: cannot remove `02.txt': Operation not permitted 。

5.串联 。

还记得umask吗,umask其实就是一个XYZW,四位数,其中X表示的就是suid/sgid/striky.

chmod xyzw file,其实同理.

000 nothing 。

001 only striky 。

010 only sgid 。

100 only suid 。

...... 。

最后此篇关于CentOS系统特殊权限SUID SGID STICKY讲解的文章就讲到这里了,如果你想了解更多关于CentOS系统特殊权限SUID SGID STICKY讲解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com