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.mzph.cn/news/599201.shtml

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

相关文章

强大好用的低代码开发工具,yyds!

现在市面上的很多开发工具更侧重代码编辑,针对数据库增删改查(CRUD)类的Web系统开发,在界面设计、前后端数据交互等环节主要还是靠写代码,效率比较低;而现在市面上很多所谓的低代码开发平台,大多…

View系列-onClick执行流程

1.设置监听器 //frameworks\base\core\java\android\view\View.java public class View implements Drawable.Callback, KeyEvent.Callback,AccessibilityEventSource {/*** Register a callback to be invoked when this view is clicked. If this view is not* clickable, i…

服务器经常出现自动重启怎么办

服务器自动重启是一个复杂且常见的问题,可能由多种原因引起。从硬件故障到软件问题,从电源问题到散热问题,每一个环节都可能成为服务器的杀手。在处理此类问题时,需要我们有一套完整的策略和方案,以便快速准确地定位并…

envoy在arm机器上的编译整理

版本信息: 操作系统:GUN Linux操作系统AARCH64架构。istio-proxy版本:istio-proxy1.15.2 编译环境搭建: 设置代理,确保可以访问Google等外网,这里envoy的第一次编译需要从外网下载依赖库。// 备注:这里一定…

决策树--分类决策树

1、介绍 ① 定义 分类决策树通过树形结构来模拟决策过程,决策树由结点和有向边组成。结点有两种类型:内部结 点和叶结点。内部结点表示一个特征或属性,叶子节点表示一个类。 ② 生成过程 用决策树分类,从根结点开始&#xff…

深度学习之矩阵形式的链式法则推导

深度学习之矩阵形式的链式法则推导 对于深度学习的基础“梯度下降”和“自动微分”的数学原理网上讲解的博客有很多了,但是目前没看到有讲关于矩阵形式的链式法则的内容,所以写了这篇笔记,供自己学习和复习。 文章目录 深度学习之矩阵形式的…

Lazada商品API接口:item_search接口中指定搜索范围

store_code: 指定商店代码。你可以使用这个参数来限制搜索结果仅返回特定商店的商品。格式为:store_code商店代码。category_id: 指定商品类别ID。通过提供特定的类别ID,你可以限制搜索结果仅返回该类别下的商品。格式为:category_id类别ID。…

【自学笔记】01Java基础-09Java关键字详解

介绍java(基于java11)中所有关键字,以及主要重要的关键字详解。 1 Java 11中的关键字: 1.1 类型声明与变量定义 boolean:声明布尔类型变量,只有两个可能值 true 或 false。byte:声明一个8位有…

复制Ubuntu遇到的问题及解决办法、Ubuntu上git命令更改和查看账户、实现Ubuntu与Windows之间的文件共享

1、复制Ubuntu遇到的问题及解决办法 (1)问题一:“该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按”获取所有权(T)”按钮获取它的所有权。否则,请按”取消(C)”按钮以防损坏。” 出现该问题的原因“未正确关闭虚…

关于java栈和堆

关于java栈和堆 在上一篇文章中我们了解了数组的声明和创建,本篇文章中我们了解一下声明数组,创建数组,给数组赋值以后,栈和堆都是怎么样子分配的,了解一下底层的逻辑知识,让大家可以更好的理解数组&#…

后端中的Dao层、Service层、Impl层、utils层、Controller层

Java Dao层 dao层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表、某个实体的增删改查,对外提供稳定访问数据库的方法 Mapper:(DAO) 访问数据库&am…

代码随想录算法训练营第三十八天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

509. 斐波那契数 题目链接:. - 力扣(LeetCode) 文档讲解:代码随想录 视频讲解:手把手带你入门动态规划 | LeetCode:509.斐波那契数_哔哩哔哩_bilibili C代码: class Solution { public:int fib(int n) {if…

新品牌在小红书上宣传推广怎么做?

对于新品牌来说,如何在小红书进行有效的宣传推广,成为了一大挑战。本文伯乐网络传媒将为你揭秘新品牌在小红书上的宣传策略,助你牢牢抓住用户流量,提升品牌知名度。 小红书作为一款以内容为核心的社交电商平台,具有极高…

论文阅读:基于MCMC的能量模型最大似然学习剖析

On the Anatomy of MCMC-Based Maximum Likelihood Learning of Energy-Based Models 相关代码:点击 本文只介绍关于MCMC训练的部分,由此可知,MCMC常常被用于训练EBM。最后一张图源于Implicit Generation and Modeling with Energy-Based Mod…

Git提交规范详解

在团队协作开发中,Git作为版本控制系统,其提交信息的清晰性和一致性至关重要。通过定义特定的提交类型和格式,我们可以更好地追踪项目历史,提高代码审查效率,并方便生成高质量的变更日志。以下是几种常见的Git提交类型…

开发知识点-Java网络编程-Netty

Netty P1 Netty-导学分布式网络返回 异步结果dubbo rabbitmqtest 测试案例多线程 日志 第1章_01_nio三大组件-channel-buffer网络编程 框架jdk 1.4 之后才有 nio这个 APIChannel 数据传输通道 (双向)Buffer 内存缓冲区 (暂存Channel 的 数据&…

【React系列】Redux(三) state如何管理

本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. reducer拆分 1.1. reducer代码拆分 我们来看一下目前我们的reducer: function reducer(state ini…

jdk动态代理与cglib代理区别1

动态代理有jdk动态代理及cglib代理&#xff0c;下面描述jdk动态代理 jdk动态代理 看了 上云 老师的视频&#xff0c;整理下 pom文件 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starte…

JS函数实现数字转中文大写

JS函数实现数字转中文大写 1. 数字转字符,分割,去除空字符2. 遍历分割字符,替换为中文3. 增加四位数单位4. 处理零5. 拼接四位数据和单位 项目中,JS将万亿以下正整数转为中文大写 1. 数字转字符,分割,去除空字符 function toChineseNumber(num){const strs num.toString().re…

2023海内外零知识证明学习资料汇总(一)(故事中的零知识证明篇)

工欲善其事,必先利其器 Web3开发中&#xff0c;各种工具、教程、社区、语言框架.。。。 种类繁多&#xff0c;是否有一个包罗万象的工具专注与Web3开发和相关资讯能毕其功于一役&#xff1f; 参见另一篇博文&#x1f449; 2024最全面且有知识深度的web3开发工具、web3学习项目…