Linux的进程权限控制
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下的进程权限控制的相关内容,还有一个疑惑就是既然有效用户ID常常和文件系统ID一起被修改,那么为什么需要他呢,还是我理解的有问题,如果有明白其中原由的大牛告知一下。
参考:https://www.jb51.net/article/98188.htm
Linux的进程权限控制的更多相关文章
- <实训|第九天>掌握linux中普通的权限控制和三种特殊的权限(sst),做合格的运维工程师
linux中,权限的学习是必不可少的,不论是作为一名运维工程师或者是单一的管理者,学习好linux中的权限控制,你就可以保护好自己的隐私同时规划好你所管理的一切. 权限的学习是很多的,不要认为自己已经 ...
- linux下的权限控制
终于还是要弄服务器了,这是多年前用fedora的时候整理的,也贴出来,顺便也再复习一下. 先来了解一下文件属性,在shell环境里输入:ls -l 可以查看当前目录文件.如:drwxr-xr-x. 1 ...
- linux下进程权限分析
转自http://blog.chinaunix.net/uid-27105712-id-3349522.html 在linux下,关于文件权限,大部分人接触比较多,也比较熟悉了解.但是对进程权限一般知 ...
- <实训|第十三天>linux中ACL权限控制以及磁盘配额,附编译属于自己的linux内核
[root@localhost~]#序言 首先讲讲昨天关于缩容失败,开不机的解决方法:ACL权限也算是一个很重要的知识点,不难,但是很实用:磁盘配额一般不需要自己弄,但是要懂得原理.剩下的就是编译属于 ...
- Linux系统——ACL权限控制及特殊权限
ACL权限控制 ACL(access control list),可以提供除属主.属组.其他人的rwx权限之外的细节权限设定 ACL的权限控制 (1)User 使用者 (2)Group 群组 (3)M ...
- Linux下ACL权限控制以及用sudo设置用户对命令的执行权限
ACL权限分配 1.setfacl命令设置文件权限 setfacl -m u:user1:rw root.txt setfacl -m u:user2:rwx root.txt 2.getfacl命令 ...
- linux下ftp权限控制
需求背景: 1.创建2个账号给联调的系统使用读取我方服务器提供的文件信息.只允许看到限定的目录,对目录下的文件只有只读权限,禁止shell登录. 2.创建一个内部账号提供文件信息,只允许看到限定的目录 ...
- Linux - 文件ACL权限控制
getfacl 1.test # 查看文件ACL权限 setfacl -R -m u:xuesong:rw- 1.test # 对文件增加用户的读写权限 -R 递归
- Linux常用文件权限控制命令
一,查看文件属主属组ls -l [root@localhost app]# ls -l total 302832 drwxr-xr-x. 4 lhc lhc 4096 Nov 18 16:05 apa ...
随机推荐
- ElasticSearch-命令行客户端操作
1.引言 实际开发中,主要有三种方式可以作为elasticsearch服务的客户端: 第一种,elasticsearch-head插件(可视化工具) 第二种,使用elasticsearch提供的Res ...
- javascript通过递归改子节点数据-用于层级深度未知的树形结构
最近在做这么个需求:树形结构,层级深度未知,一旦某个节点的状态是置灰的话,其所有子节点都要置灰. 方案一(数据库有值):如果数据库里置灰节点的所有子节点,值也都是"置灰",那后台取 ...
- 基于源码分析Vue的nextTick
摘要:本文通过结合官方文档.源码和其他文章整理后,对Vue的nextTick做深入解析.理解本文最好有浏览器事件循环的基础,建议先阅读上文<事件循环Event loop到底是什么>. 一. ...
- JavaScript 实现排序算法
参考文章: 十大经典排序算法动画,看我就够了! 1. 冒泡排序 思路 比较所有相邻元素,如果第一个比第二个大,则交换它们 一轮下来,可以保证最后一个数是最大的 执行n-1轮,就可以完成排序 代码 Ar ...
- 玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定
前言 你好,我是A哥(YourBatman). 如何给Module模块单独增加依赖? 如何知道哪些Module模块用了Spring框架,哪些是web工程? IDEA如何打Jar包?打War包? 熟练的 ...
- ts中提示“绑定元素“routes”隐式具有“any”类型”
思考单独的.ts和typescript框架在vscode层的差异,想想只有launch.json和tsconfig.json,一个个属性过去后,发现是tsconfig.json配置项"noI ...
- Spring MVC——基础(简介,使用,地址映射)
Spring MVC简介 重点Spring MVC的处理流程 Spring MVC特点 Spring MVC的使用 将相应的JAR包导入lib文件下 配置相关webxml 配置servlet-mvcx ...
- kubenetes 相关命令(转载)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xingwangc2014/article/details/51204224好久没写博客了,前段时间公 ...
- 内网渗透之信息收集-linux
linux 系统信息 grep MemTotal /proc/meminfo #查看系统内存总量 cat /etc/issue #查看系统名称 ...
- vscode开发vue,热更新
1.首先用vscode去安装热更新插件 2.vscode安装后默认修改的文件是没有开启自动保存的,需要将自动保存勾选 这样就不用每次修改都去open with live server: