Linux的特殊权限(Suid、Sgid、Sbit 详解)

导读:本篇文章讲解 Linux的特殊权限(Suid、Sgid、Sbit 详解),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、Linux系统特殊权限概述

在Linux系统中,普通权限我们了解到有r(读)、w(写)、x(执行),这三种权限,但是在我们查看一些其它的文件时,会发现还会有其它权限的字母。例如:s,t 等

比如下面查看的这三个文件的权限,在不同用户权限上面有不同的字母。

image-20220516225649967

二、suid

1、在介绍这个权限之前需要了解一些问题

1、普通用户可不可以修改密码?

答:是可以的,可以修改自己的密码

2、/etc/shadow 文件的作用是什么?

答:存储用户密码的文件

3、/etc/shadow 文件的权限是怎么样的?

答:----------. 1 root root 1627 5月 17 00:10 /etc/shadow

4、普通用户是否可以修改/etc/shadow 文件?

答:不可以,因为这个文件对于普通用户来说,没有任何权限,所以不能读取,也不能写入。

5、那么普通用户,为什么可以修改密码?

答:

①因为使用了passwd 这个命令

②passwd命令在属主权限位上,原本是x权限,变成了s权限

③s权限在属主权限位,又叫做SetUID权限,简称SUID

④作用:因为在使用有SUID权限的文件或命令时,会以该文件的属主身份去执行该命令。

2、SUID 作用详解

概念:只要一个命令文件在属主权限位上的x变成s的话,那么其它用户在执行这个命令文件时,就会以该命令文件的属主用户身份去执行。

如果该属主权限位上有执行权限,则会显示(小写)s。

如果该属主权限位上没有执行权限,则会显示(大写)S。

[root@centos7 ~]# useradd hello   #创建一个用户
[root@centos7 ~]# passwd hello    #设置它的密码
更改用户 hello 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@centos7 ~]# ll /bin/passwd    #查看passwd命令权限
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /bin/passwd

[root@centos7 ~]# su hello     #切换到hello用户  
[hello@centos7 root]$ passwd    #修改密码
更改用户 hello 的密码 。
为 hello 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。   #可以成功修改

[hello@centos7 root]$ su root    #返回root用户
密码:
[root@centos7 ~]# chmod u-s /bin/passwd   #修改passwd的权限,去掉suid权限
[root@centos7 ~]# ll /bin/passwd
-rwxr-xr-x. 1 root root 27832 6月  10 2014 /bin/passwd   #发现s变成了x

[root@centos7 ~]# su hello   #再切换到hello用户
[hello@centos7 root]$ passwd   #修改密码
更改用户 hello 的密码 。
为 hello 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码: 
passwd: 鉴定令牌操作错误    #密码无法进行修改

此时,再引入一个问题,如果普通用户在使用passwd命令时,是以root用户身份去执行的话,那普通用户是不是可以修改其它用户的密码?

答:是不可以的,因为在passwd命令中,存在一种判断,此判断会在执行passwd命令时去判断执行的用户时是root还是普通用户,如果是普通用户,那么只能使用passwd命令,后面不可加上参数,如果是root用户,后面才可加上其它参数(参数就是用户)。那么普通用户就无法进行修改其它用户的密码。

3、 授权SUID

授权方式:

chmod   u+s     filename

chmod   4xxx    filename

实例:

[root@centos7 opt]# touch filename   #创建一个文件
[root@centos7 opt]# ll   #查看详细信息
总用量 0
-rw-r--r--. 1 root root 0 5月  16 23:40 filename  #没有属主权限位没有执行权限
[root@centos7 opt]# chmod u+s filename   #在属主权限位上加上s
[root@centos7 opt]# ll   #查看详细信息
总用量 0
-rwSr--r--. 1 root root 0 5月  16 23:40 filename   #因为没有执行权限,所以就显示(大写)S
[root@centos7 opt]# chmod u+x filename   #再添加执行权限
[root@centos7 opt]# ll   #查看
总用量 0
-rwsr--r--. 1 root root 0 5月  16 23:40 filename   #大写S变为小写s,增加了执行权限

或者以下方式
[root@centos7 opt]# touch filename2  #创建一个文件
[root@centos7 opt]# ll   #查看信息
总用量 0
-rwsr--r--. 1 root root 0 5月  16 23:40 filename
-rw-r--r--. 1 root root 0 5月  16 23:46 filename2   #正常创建的权限:644
[root@centos7 opt]# chmod 4744 filename2   #增加SUID权限,并且增加属主的执行权限
[root@centos7 opt]# ll
总用量 0
-rwsr--r--. 1 root root 0 5月  16 23:40 filename
-rwsr--r--. 1 root root 0 5月  16 23:46 filename2   #属主中变成小写s

4、SUID总结

①让普通用户对可执行的二进制文件,临时拥有二进制文件的属主权限

②如果设置的二进制文件没有执行权限,那么SUID的权限就显示为S(大写)

③特殊权限suid仅对二进制可执行程序有效,其它文件或目录无效。

注意: suid不安全,如果使用了普通用户可以使用属主用户的权限,那么普通用户在执行对应命令文件时,就可以任意查看或修改文件内容,比如修改了etc/sudoers 文件,那普通用户相当于超级用户的复制品。

二、Sgid

1、Sgid作用详解

概念:一般情况下是设置给目录使用的,主要目的就是为了让别的用户无法删除其它用户所创建的文件或目录。

如果该属组权限位上有执行权限,则会显示(小写)s。

如果该属组权限位上没有执行权限,则会显示(大写)S。

实例:

[root@centos7 opt]# mkdir ydq   #创建目录
[root@centos7 opt]# ll
总用量 0
drwxr-xr-x. 2 root root 6 5月  17 00:23 ydq   #查看权限
[root@centos7 opt]# chmod 777 ydq   #查看权限为777
[root@centos7 opt]# ll
总用量 0
drwxrwxrwx. 2 root root 6 5月  17 00:23 ydq   #权限已修改
[root@centos7 opt]# cd ydq   #进入到cd目录
[root@centos7 ydq]# mkdir aaa  #创建aaa文件
[root@centos7 ydq]# ll
总用量 0
drwxr-xr-x. 2 root root 6 5月  17 00:23 aaa  #可以看到aaa文件的属主和数组都是root
[root@centos7 ydq]# su hello    #切换hello用户
[hello@centos7 ydq]$ mkdir bbb   #创建bbb目录
[hello@centos7 ydq]$ ll
总用量 0
drwxr-xr-x. 2 root  root  6 5月  17 00:23 aaa
drwxrwxr-x. 2 hello hello 6 5月  17 00:24 bbb  #可以看到bbb文件的属主和属组都是hello文件
[hello@centos7 ydq]$ exit  #返回root用户
exit
[root@centos7 ydq]# cd ../   #返回上一级
[root@centos7 opt]# chmod g+s ydq   #将ydq目录增加sgid
[root@centos7 opt]# ll
总用量 0
drwxrwsrwx. 4 root root 28 5月  17 00:24 ydq   #属组的权限已增加了s
[root@centos7 opt]# cd ydq   #进入ydq目录
[root@centos7 ydq]# su hello   #切换hello用户
[hello@centos7 ydq]$ mkdir ccc    #创建目录ccc
[hello@centos7 ydq]$ ll
总用量 0
drwxr-xr-x. 2 root  root  6 5月  17 00:23 aaa
drwxrwxr-x. 2 hello hello 6 5月  17 00:24 bbb
drwxrwsr-x. 2 hello root  6 5月  17 00:25 ccc   #ccc的属组用户已变为跟ydq目录一致的用户

2、授权Sgid

授权方式:

chmod   g+s     filename

chmod   2xxx    filename

3、Sgid总结

①针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。

②当某个目录设置了Sgid后,在该目录中新建的文件不在是创建该文件的默认所属组。

③使用Sgid可以使得多个用户之间共享一个目录的所有文件变得简单。

三、sticky bit(沾滞位)

1、sticky bit 详解

如果该其它用户权限位上有执行权限,则会显示(小写)t。

如果该其它用户权限位上没有执行权限,则会显示(大写)T。

概念:只作用在目录上,当一个目录的没有设置sticky bit权限时,并且该目录对所有用户都有读、写、执行权限时,普通用户在该目录下所创建的文件或目录都会被其它用户删除。

[root@centos7 opt]# mkdir yude    #创建目录yude
[root@centos7 opt]# ll   #查看权限
总用量 0
drwxr-xr-x. 2 root root 6 5月  17 09:26 yude   #权限为755
[root@centos7 opt]# chmod 777 yude   #修改权限为777
[root@centos7 opt]# ll
总用量 0
drwxrwxrwx. 2 root root 6 5月  17 09:26 yude  #权限为777
[root@centos7 opt]# cd yude     #进入所创建的目录

[root@centos7 yude]# su hello     #切换到hello用户
[hello@centos7 yude]$ touch aaa   在目录下创建文件aaa
[hello@centos7 yude]$ ll
总用量 0
-rw-rw-r--. 1 hello hello 0 5月  17 09:26 aaa   #文件aaa创建成功

[hello@centos7 yude]$ exit    #返回上一级目录
exit
[root@centos7 yude]# su ydq   #切换到ydq用户
[ydq@centos7 yude]$ ll   
总用量 0
-rw-rw-r--. 1 hello hello 0 5月  17 09:26 aaa   #可以看到hello用户所创建文件aaa
[ydq@centos7 yude]$ rm -rf ./aaa   #进行删除aaa文件
[ydq@centos7 yude]$ ll    #文件已被删除
总用量 0

概念:当一个目录设置了sticky bit权限时,普通用户在该目录下所创建的文件或目录,只能被该文件或目录的属主用户或root用户删除,其它用户无法删除别的用户所创建的目录或文件。

[root@centos7 opt]# ll    #查看权限
总用量 0
drwxrwxrwx. 2 root root 6 5月  17 09:27 yude   #权限为777
[root@centos7 opt]# chmod o+t yude   #增加sticky bit权限
[root@centos7 opt]# ll   #查看权限
总用量 0
drwxrwxrwt. 2 root root 6 5月  17 09:27 yude   #其它用户上权限多了sticky bit权限
[root@centos7 opt]# cd yude  #进入到yude目录下面

[root@centos7 yude]# su hello    #切换hello用户
[hello@centos7 yude]$ touch bbb    #创建一个文件
[hello@centos7 yude]$ ll    #查看文件,文件正常创建
总用量 0
-rw-rw-r--. 1 hello hello 0 5月  17 09:39 bbb    

[hello@centos7 yude]$ exit   #退出当前用户
exit
[root@centos7 yude]# su ydq    #切换到ydq用户
[ydq@centos7 yude]$ ll
总用量 0
-rw-rw-r--. 1 hello hello 0 5月  17 09:39 bbb   #可以查看到hello用户创建的文件
[ydq@centos7 yude]$ rm -rf ./bbb   #进行删除bbb文件
rm: 无法删除"./bbb": 不允许的操作     #无法进行删除

2、授权Sticky bit

授权方式

chmod   o+t     filename

chmod   1xxx    filename

3、Sticky bit 总结

①让多个用户都具有写权限,并让每个用户都只能删除自己的文件

②投入数sticky目录表现在others 的 x 位,用(小写)t 表示,没有执行权限时(大写)T

③一个目录即使使得它的权限为“777” ,如果设置了粘滞位,除了目录的属主和“root”用户有权限删除,其它用户都不允许删除。

四、总结

1、SUID

主要对命令、或者二进制文件,设置了SUID,那么其它用户在执行该文件时,就会以该文件的属主权限来执行。

2、SGID

主要针对目录进行授权,共享目录,设置了SGID,其它任意用户在该目录下所创建的文件或目录,它们的属组用户都会与父目录相同。

3、SBIT

粘滞位,主要针对目录,设置了SBIT,即便该目录对所有用户都有写的权限,除了root用户,其它用户也只能对自己所创建的文件进行删除移动。

r:读 4

w:写 2

x :执行 1

Suid:4000

Sgid :2000

Sbit :1000

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/75067.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!