Linux操作系统基础(10):Linux的特殊权限

1. 特殊权限是什么

在Linux中,特殊权限是指针对文件或目录的特殊权限设置,包括SetUID、SetGID和Sticky Bit。

  1. SetUID(Set User ID): 当一个可执行文件被设置了SetUID权限后,当任何用户执行该文件时,文件的所有者权限会被赋予执行者,而不是执行者的权限。这使得用户可以以文件所有者的身份执行文件,通常用于需要特殊权限的程序。

  2. SetGID(Set Group ID): 当一个可执行文件被设置了SetGID权限后,当任何用户执行该文件时,文件的所属组权限会被赋予执行者,而不是执行者的权限。这使得用户可以以文件所属组的身份执行文件,通常用于需要特殊权限的程序。

  3. Sticky Bit: 当一个目录被设置了Sticky Bit权限后,只有目录的所有者、文件的所有者或者root用户才能删除该目录下的文件。这通常用于共享目录,防止其他用户删除不属于自己的文件。

我们可以在Linux中使用 find 命令找到对应权限的文件或目录:

#1.查找/usr/bin目录下拥有suid权限的文件
find /usr/bin -perm /u+s

#2.查找/目录下拥有guid权限的目录
find / -type d -perm /g+s

#3.查找/目录下拥有sticky权限的目录
find / -type d -perm /o+t

2. Linux权限的示意图

Linux操作系统基础(10):Linux的特殊权限_第1张图片

3. Linux特殊权限的说明

3.1. SetUID权限

SetUID权限,用户可以以文件所有者的身份执行文件,通常用于需要特殊权限的程序。

  • 添加SetUID的权限,Owner的执行权限位从 x 会变为 s
  • 数字模式:4744

例如,Linux系统 passwd 修改密码的命令需要通过修改/etc/passwd文件实现,但是这个文件是权限所属于root用户,普通用户需要临时提权调用这个 passwd 命令。

#1.查看passwd命令,查看所有者的执行位权限为s
[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 33424 Feb 18  2022 /usr/bin/passwd

#2.将passwd命令的setuid权限取消
[root@localhost ~]# chmod 755 /usr/bin/passwd

#3.使用普通用户jungout修改密码,发现执行错误
[root@localhost ~]# su - jungout
[jungout@localhost ~]$ passwd
Changing password for user jungout.
Current password:                                 #输入旧密码
New password:                                     #输入新密码
passwd: Authentication token manipulation error   #认证令牌操作错误

#4.切换回root用户添加setuid权限
[jungout@localhost ~]$ exit
[root@localhost ~]# chmod u+s /usr/bin/passwd

#5.再次使用jungout修改密码,执行成功
[root@localhost ~]# su - jungout
[jungout@localhost ~]$ passwd
Changing password for user jungout.
Current password:                                 #输入旧密码
New password:                                     #输入新密码
Retype new password:                              #确认新密码
passwd: all authentication tokens updated successfully.

3.2. SetGID权限

SetGID权限,用户可以以文件所属组的身份执行文件,新创建的文件或目录会继承该目录的所属组,但是只有目录的所有者、文件的所有者或者root用户才能删除该目录下的文件。

  • 添加SetGID的权限,Group的执行权限位从 x 会变为 s
  • 数字模式:2770

例如,Linux系统中一个项目的 共享目录 设置SetGID权限,共享目录的名称为:share ,这个目下执行的操作和文件都会继承该目录的所属组的权限。

#1.在/home目录下创建share的目录
[root@localhost ~]# mkdir /home/share

#2.要求/home/share的所属组是shareuser,组内成员可读可写。
[root@localhost ~]# groupadd shareuser
[root@localhost ~]# chgrp shareuser /home/share
[root@localhost ~]# chmod 770 /home/share

#3.设置sgid权限位,所属组的执行位权限为s
[root@localhost ~]# chmod g+s /home/share
[root@localhost ~]# ls -l /home | grep share 
drwxrws---. 2 root  shareuser  6 Jan  5 04:55 share

#4.将普通用户jungout添加到shareuser组
[root@localhost ~]# gpasswd -a jungout shareuser
Adding user jungout to group shareuser

#5.切换到jungout并在/home/share目录上创建file1文件(继承组权限,组内成员都可以访问)
[root@localhost ~]# su - jungout
[jungout@localhost ~]$ touch /home/share/file1
[jungout@localhost ~]$ ls -l /home/share/
-rw-rw-r--. 1 jungout shareuser 0 Jan  5 05:27 file1

3.2. Sticky Bit权限

Sticky Bit 权限,只有目录的所有者、文件的所有者或者root用户才能删除该目录下的文件,这通常用于共享目录下的私人文件,防止其他用户删除不属于自己的文件。

  • 添加 Sticky Bit 的权限,Others的执行权限位从 x 会变为 t
  • 数字模式:1777

例如,Linux系统中临时目录 /tmp ,通常用于临时存放服务的进程PID,这要求意味着所有用户都有对该目录的写入权限,但只有文件的所有者才能删除自己创建的文件。

#1.查看/tmp目录的ohter的执行权限位为:t
[root@localhost ~]# ls -l / | grep tmp
drwxrwxrwt.  16 root root 4096 Jan  5 05:42 tmp

#3.创建普通用户user1,并在/tmp目录下创建一个目录
[root@localhost ~]# useradd user1
[root@localhost ~]# su -user1
[user1@localhost ~]$ mkdir /tmp/user1-servr
[user1@localhost ~]$ exit  #返回root用户

#4.使用普通用户jungout删除/tmp/user1-servr目,操作不允许。
[root@localhost ~]# su - jungout
[jungout@localhost ~]$ rmdir /tmp/user1-services
rmdir: failed to remove '/tmp/user1-services/': Operation not permitted

你可能感兴趣的:(Linux操作系统基础,linux,运维,服务器,centos)