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权限的示意图

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/324030.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot集成 Websocket 实现服务与客户端进行消息发送和接收

介绍 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。 效果 客户端效果 服务端日志 pom依赖 <!-- websocket --> <dependency><groupId>org.springfram…

如何实现安卓端与苹果端互通

在移动应用开发中&#xff0c;如何实现安卓端和苹果端的互通是一个重要的问题。二者缺少一个都会有损失&#xff0c;那如何实现安卓端跟苹果端互通&#xff0c;下面简单的介绍几点方法来帮助你再不同的平台上实现数据交互和功能互通。 基于Web技术 使用Web技术是一种常见并且…

C语言编译器(C语言编程软件)完全攻略(第三部分:Windows下的编译器有哪些?如何选择?)

介绍常用C语言编译器的安装、配置和使用。 三、Windows下的编译器有哪些&#xff1f;如何选择&#xff1f; 安装编译器或者 IDE&#xff08;集成开发环境&#xff09;&#xff0c;也叫搭建开发环境。Windows 下的C语言 IDE 众多&#xff0c;多如牛毛&#xff0c;初学者往往不…

python识别验证码+灰度图片base64转换图片

一、为后面识别验证码准备 1、base64转换为图片&#xff0c;保存本地、并且置灰 上文中的base64,后面的就是包含Base64编码的PNG图像的字符串复制下来 import base64 from PIL import Image import io# 这里是你的Base64编码的字符串 base64_data "iVBORw0KGgoAAAANSUhE…

解决:Microsoft Visual C++ 14.0 is required.

Microsoft Visual C 14.0 is required. Get it with “Microsoft Visual C Build Tools 当我们安装绝大部分python包的时候可以通过pip install 或者 conda install解决&#xff0c;但是任然有些包是安装不了的&#xff0c;比如我的就是在安装pyqt5的时候报Building wheel for…

三、C语言中的分支与循环—for循环 (6)

本章分支结构的学习内容如下&#xff1a; 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句&#xff08;4&#xff09;分支结构 完 本章循环结构的…

如何将支持标准可观测性协议的中间件快速接入观测

前言 作为一名云原生工程师&#xff0c;如何将支持标准可观测性协议的中间件快速接入观测云呢&#xff1f;答案是只需要三步。 首先&#xff0c;需要确定您要观测的中间件类型。支持标准可观测性协议中间件可通过观测云的 DataKit 采集到中间件的关键指标。有些中间件自带可观…

手游开发项目经验简单总结

这是我最近一个完整的手游开发项目的简单总结&#xff0c;请大家指点 引擎 语言 编辑器 项目开发模块规划分 主项目工程&#xff0c;UI资源项目工程&#xff0c;模型场景资源项目工程 热更框架 前后端协议 UI 图集 多语言适配 SLG场景和其他场景 战斗 美术模型资源 人物 动作…

ClickHouse基础介绍

目录 前言 1、什么是clickhouse 2、OLAP场景的关键特征 3、列式存储更适合于OLAP场景的原因 4、clickhouse的独特功能 5、clickhouse的缺点 6、性能 6.1、单个大查询的吞吐量 6.2、处理短查询的延迟时间 6.3、处理大量短查询的吞吐量 6.4、数据的写入性能 前言 11月…

外包干了2个月,感觉技术明显退步...

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

idea 专业版(学习版)安装windows/linux(ubuntu为例)通用

下载 IntelliJ IDEA 2021.1.3专业版 打开浏览器并前往 JetBrains 官方网站的下载页面。选择适用于 Linux 的专业版&#xff08;2021.1.3为例&#xff09;&#xff0c;并下载适合你系统架构的安装包&#xff08;通常是 .tar.gz 格式&#xff09;。 安装 IntelliJ IDEA 打开终…

C语言编译器(C语言编程软件)完全攻略(第五部分:VS2015使用教程(使用VS2015编写C语言程序))

介绍常用C语言编译器的安装、配置和使用。 五、VS2015使用教程&#xff08;使用VS2015编写C语言程序&#xff09; 前面我们给出了一段完整的C语言代码&#xff0c;就是在显示器上输出“C语言中文网”&#xff0c;如下所示&#xff1a; #include <stdio.h> int main() {…