Linux·进程权限控制

2023-11-18

 Linux系统的安全性得益于其进程权限和文件权限的控制机制。今天抽空梳理下Linux下的进程权限控制相关的文件权限涉及一点。首先明确四个名词:真实用户ID(real ID)、有效用户ID(effective ID)、保存用户ID(Saved ID)、文件系统用户ID(File ID)。后面的特性同样适用组。

  • 真实用户ID(real ID)

  是指启动进程的用户ID,进程如果拥有root权限启动以后就可以调用setuid(newid)系统调用修改。修改之后四个ID的值都会变为newid,程序刚开始运行第一行命令时四个值都是启动这个进程的用户ID。

  • 有效用户ID(effective ID)

  指正在运行(强调他现在属于谁)进程的用户ID,看着让人疑惑啊,这不就是真实用户ID吗?其实不是,因为程序在运行过程中可以修改当前正在运行自己的人(为真实用户ID或着保存用户ID),所以启动进程的用户是真实ID但是运行进程的是有效ID。最初他俩是相同的,进程运行期间的权限认证使用的就是有效用户ID。
 

  • 保存用户ID(Saved ID)

  保存进程的最初有效用户ID,所以一般情况下一个程序如果运行期间不修改自己的ID则,前面这个三个ID应该是相同的

  • 文件系统用户ID(File ID)

  文件系统ID。他在Linux下的作用主要是体现在进程创建文件后的新文件的权限处理时使用的用户。Uunix上使用的是有效用户ID。

程序在运行过程是可以修改自己的有效用户ID从而修改自己的权限的,不过一般情况下应用程序是无法增加自己的权限的,所以修改进程有效用户ID我理解这个机制是为了在合适的时候减小进程权限而存在的,比如以root作为真实ID,但是以普通用户状态运行,避免程序越线操作。Linux下修改程序用户ID的系统调用主要有四个两类。

  • 修改进程ID int seuid(uid_t uid)

这个系统调用的执行效果取决与当前调用进程的有效用户ID,如果是root则它将修改所有上面的四个ID(其实是五个还有一个suid),所以相当于他执行了这一个系统调用后就是放弃了自己的root权限,相反此时如果进程的有效用户ID是一个普通的用户,则他将只会修改有效用户ID和文件系统用户ID行为退化的和下面的系统调用用法相同。

  • 修改进程有效用户ID int seteuid(uid_t uid)

正如前面所说的一样,这个系统调用只会修改进程的有效用户ID和文件系统用户ID,但是这个函数的操作可以讲有效ID设置成的新ID值只能是真实用户ID 和保存用户ID其中之一。

总结就是:  

    非root用户是无法出让权限给其它用户,只有root用户才能出让。非root用户权限本来就只有他自己的权限,所以其他用户他可能都是不可见的。setuid和seteuid是有区别的,setuid是永久的放弃root用户权限,转让给非root用户后,无法再restore到root用户,seteuid是临时放弃root用户权限,可以通过seteuid(0),restore到root权限。

      最后还有就是suid,这是设置用户ID,他是存在与文件权限位rwx中的,如果一个可执行文件通过chmod设置了s位则,任何用户对这个文件有执行权限的用户执行了这个可执行文件,则其有效用户ID就是这个文件设置的s位的用户ID,常见用户是给文件属主用户设置这一位通过chmod u+s filename  命令。例如一个可执行文件的属主是user1 并且设置了属主设置权限位s,则user2去执行这个可执行文件时这个进程的 真实用户ID  有效用户ID 保存用户ID分别是  user2 user1 user1 。此外一个进程权限的继承,当使用 fork 子进程的时候,子进程全部继承父进程四个 uid,和父进程 uid 相同当使用exec系列函数时候,会把suid(文件S标志位)置为euid。这就是Linux下的进程权限控制的相关内容

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux·进程权限控制 的相关文章

  • 在 vimrc 中切换匹配

    我的 vimrc 文件中有以下几行 hi ExtraWhitespace cterm NONE ctermbg green ctermfg green guibg green guifg green match ExtraWhitespac
  • 如何将命令输出作为多个参数传递给另一个命令

    我想将命令的每个输出作为多个参数传递给第二个命令 例如 grep pattern input returns file1 file2 file3 我想复制这些输出 例如 cp file1 file1 bac cp file2 file2 b
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • 使用 Python 将阿拉伯语或任何从右到左书写系统的字符串打印到 Linux 终端

    非常简单的例子是 city print city 我期望输出是 但实际上输出是相反的字符串 字母看起来有点不同 因为它们有开始 中间和结束形式 我无法将其粘贴到此处 因为复制粘贴会再次更正字符串的顺序 如何在 Linux 终端上正确打印阿拉
  • 在 Linux 服务器上创建和编辑 MS-Word 文档?

    希望开发处理文档的服务器端应用程序 源文档大多是MS Word 2003 2007 即MS版本的Docx 希望服务器应用程序能够在linux或windows上运行 想知道在linux下读写MS Word文件最好的工具或库是什么 兼容性是最重
  • 如何使用 PyAudio 选择特定的输入设备

    通过 PyAudio 录制音频时 如何指定要使用的确切输入设备 我的电脑有两个麦克风 一个内置 一个通过 USB 我想使用 USB 麦克风进行录音 这流类 https people csail mit edu hubert pyaudio
  • 重新链接匿名(未链接但打开)文件

    在 Unix 中 可以创建匿名文件的句柄 例如 使用 creat 创建并打开它 然后使用 unlink 删除目录链接 留下一个带有 inode 和存储的文件 但没有可能的方法重新打开它 此类文件通常用作临时文件 通常这就是 tmpfile
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • 在Linux中创建可执行文件

    我计划做的一件事是编写 非常简单的 Perl 脚本 并且我希望能够在不从终端显式调用 Perl 的情况下运行它们 我明白 要做到这一点 我需要授予他们执行权限 使用 chmod 执行此操作非常简单 但它似乎也是一个稍微费力的额外步骤 我想要
  • 使用 terminfo 的终端颜色?

    我正在编写一个 C 类 允许在终端中使用颜色 我希望它适用于每个终端 在支持真彩色 24 位 的终端上打印 在支持它的终端上具有 256 色 6x6x6 其他都是基本的 16 种颜色 我曾经使用 termcap 编写过一次 C 函数 并且我
  • 如何从 Linux 命令行确定 LCD 显示器是否打开

    如何通过 Linux 命令行判断计算机的显示器是否打开 关闭 我传统上认为显示器是仅输出的设备 但我注意到 Gnome 显示器首选项对话框具有 检测显示器 功能 这可以推广到确定显示器是否物理关闭吗 VESA DDC 连接是I2C http
  • 我们可以在 Bash 脚本中使用 PHP 吗?

    我有一个 bash 脚本abcd sh bin sh for i in seq 8 do ssh w i uptime ps elf grep httpd wc l free m mpstat done pid sleep 1 kill 9
  • 如果目录不存在,有没有办法让 mv 创建要移动到的目录?

    因此 如果我在主目录中并且想将 foo c 移动到 bar baz foo c 但这些目录不存在 是否有某种方法可以自动创建这些目录 以便你只需要输入 mv foo c bar baz 一切都会顺利吗 似乎您可以将 mv 别名为一个简单的
  • 有没有办法只安装mysql客户端(Linux)? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有不需要安装整个mysql db安装包的Linux mysql命令行工具 我想做的是从服务器 1 应用程序服务器 执行将在服务器 2
  • 如何清理 Runtime.exec() 中使用的用户输入?

    我需要通过命令行调用自定义脚本 这些脚本需要很少的参数并在 Linux 机器上调用 当前版本容易出现各种shell注入 如何清理用户给出的参数 参数包括登录名和路径 Unix 或 Windows 路径 用户应该能够输入任何可能的路径 该路径
  • 如何从命令行执行 PHP 代码?

    我想执行单个 PHP 语句 例如if function exists my func echo function exists 直接使用命令行 无需使用单独的 PHP 文件 这怎么可能 如果您要在命令行中执行 PHP 我建议您安装phpsh
  • OS X 对 /usr/local/lib 的权限被拒绝

    我正在寻找有关权限问题的任何建议 直觉 线索 答案 自从我切换到新的 Macbook Pro 以来 这个问题一直困扰着我 这就是困境 某些程序在安装期间复制 usr local lib 下的库 并且在运行这些程序时出现崩溃 我认为这与此文件
  • shell中基于正则表达式的颜色突出显示输出

    我想知道是否可以用颜色突出显示与某些字符串匹配的 shell 命令的输出 例如 如果我运行 myCommand 输出如下 gt myCommand DEBUG foo bar INFO bla bla ERROR yak yak 我希望所有
  • 如何在树莓派上更新到最新的 python 3.5.1 版本?

    我昨天拿到了 Raspberry Pi 我已经在尝试用它来编写代码了 我有一个计划在其上运行的程序 但它仅与 Python 版本 3 5 0 或 3 5 1 兼容 并且我在互联网上找到的所有内容似乎都已经过时 与 Python 2 有关 或
  • Linux shell 标题大小写

    我正在编写一个 shell 脚本并有一个如下所示的变量 something that is hyphenated 我需要在脚本中的各个点使用它 如下所示 something that is hyphenated somethingthati

随机推荐

  • C#创建一个收费接口Charge,其中有一个方法charge();创建另一个收费接口Play,其中有一个方法play()。声明类Bus来实现接口Charge,对于Bus中的charge()实现为输出“

    创建一个收费接口Charge 其中有一个方法charge 创建另一个收费接口Play 其中有一个方法play 声明类Bus来实现接口Charge 对于Bus中的charge 实现为输出 公共汽车 1元 张 不计公里数 声明类Taxi来实现接
  • pythonmap和list_python map和list的区别是什么

    一 结构特点 List是存储单列数据的集合 Map是存储键值对这样的双列数据的集合 List中存储的数据是有顺序的 并且值允许重复 Map中存储的数据是无序的 它的键是不允许重复的 但是值是允许重复的 二 实现类 List接口有三个实现类
  • webpack4.+的使用(一)(webpack的基本使用)

    webpack4 的使用 一 一 webpack的基本使用 1 安装和卸载webpack开发依赖的命令分别为 npm install webpack g和npm uninstall webpack g npm命令是在安装了node js后才
  • SpringBoot 中LocalDateTime格式化日期

    简介 很多时候日期格式输出是这样的 2018 10 09T17 39 07 097 中间有个T 尴尬 是的我们需要去掉这个T 这方法是springboot封装好了的 我们直接使用即可 普通的配置我就不贴了 一 日期格式化输出 code 1
  • unity 物体自动旋转

    using UnityEngine public class AutoRotation MonoBehaviour Tooltip Angular velocity in degrees per seconds public float d
  • 21. Merge Two Sorted Lists

    题目 Merge two sorted linked lists and return it as a new list The new list should be made by splicing together the nodes
  • TensorRT学习(二)通过C++使用

    本文源于学习TensorRT文档 TensorRT Developer Guide 第2章 WORKING WITH TENSORRT USING THE C API 的理解 一 TensorRT实例化对象 使用TensorRT进行推理需要
  • 为什么要接入高防IP,到底有什么作用呢

    首先我们要了解什么是高防IP DDOS高防IP是为了应对互联网的DDOS攻击而产生的一款付费增值产品 根据不同的业务接入的方法也不同 在开通这款DDOS高防IP时服务商会给到对应的高防IP作为对外IP和业务IP使用 游戏业务就需要将之前配置
  • rknn-toolkit安装的一点感想

    rknn toolkit装了好多次 总是会报错 终于尝试出了一个版本可以用的 注意windows和linux上都能用 rknn toolkit v1 7 1 cuda 10 1 python 3 6 pytorch 1 5 1 opencv
  • Ubuntu Hadoop分布式部署

    Ubuntu Hadoop分布式部署 1 vim usr local hadoop 3 2 2 etc hadoop hadoop env sh usr local hadoop 3 2 2为Hadoop安装目录 export JAVA H
  • Android-使用WebView视图显示网页

    简介 Android提供了WebView组件 相关类为android webkit WebView android webkit WebViewClient 表面上来看 这个组件与普通的ImageView差不多 但实际上 这个组件的功能要强
  • ProGuard参数使用说明

    ProGuard 使用说明 本文主要是翻译proguad的官方文档 以便以后使用的时候不需要再次去看英文 每次写proguard总是那么痛苦 必须写个博客记录一下 有些地方的意思我也不懂 有注明原文 什么是proguard proguard
  • 微信程序 自定义遮罩层遮不住底部tabbar解决

    一 先上效果 二 方法 1 自定义底部tabbar 实现 https developers weixin qq com miniprogram dev framework ability custom tabbar html 官网去抄 简单
  • 使用Flask开发简单接口

    使用Flask开发简单接口 作为测试人员 在工作或者学习的过程中 有时会遇到没有可以调用的现成的接口 导致我们的代码没法调试跑通的情况 这时 我们使用python中的web框架Flask就可以很方便的编写简单的接口 用于调用或调试 在之前的
  • 数据挖掘实验(四):决策树归纳 R语言

    一 实验目的 决策树分类算法 decision tree 通过树状结构对具有某特征属性的样本进行分类 其典型算法包括ID3算法 C4 5算法 C5 0算法 CART算法等 本次实验掌握用ID3的信息增益来实现决策树归纳 二 实验软件 Rst
  • java中单列集合的根接口是_java 单列集合总结

    Collection 接口 add remove contains clear size 迭代器遍历 普通迭代器 不能再遍历过程中修改集合的长度 List接口 单列集合 有序可重复 有索引 add index obj remove inde
  • keras中的sequential模型

    序贯模型 Sequential 单输入单输出 一条路通到底 层与层之间只有相邻关系 没有跨层连接 这种模型编译速度快 操作也比较简单 model Sequential Sequential模型的核心操作是添加layers 图层 以下展示如何
  • LVM条带卷

    4 4 2 创建条带卷 如果有大量连续读 写操作 创建条带逻辑卷可提高数据 I O 的效率 有关条带卷的常规信息 请查看 第 2 3 2 节 条带逻辑卷 创建条带逻辑卷时 可使用 lvcreate 命令的 i 参数指定条带数 这样就决定了逻
  • 数据库中delete和drop的区别

    delete 作用于数据上 即对数据进行删除 不修改表结构 例 delete from STU where sno S001 表示从学生表中删除学号为S001的学生 此过程并不破坏表结构 drop 可对数据库 表以及字段进行修改 操作涉及修
  • Linux·进程权限控制

    Linux系统的安全性得益于其进程权限和文件权限的控制机制 今天抽空梳理下Linux下的进程权限控制相关的文件权限涉及一点 首先明确四个名词 真实用户ID real ID 有效用户ID effective ID 保存用户ID Saved I