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的进程权限控制的更多相关文章

  1. <实训|第九天>掌握linux中普通的权限控制和三种特殊的权限(sst),做合格的运维工程师

    linux中,权限的学习是必不可少的,不论是作为一名运维工程师或者是单一的管理者,学习好linux中的权限控制,你就可以保护好自己的隐私同时规划好你所管理的一切. 权限的学习是很多的,不要认为自己已经 ...

  2. linux下的权限控制

    终于还是要弄服务器了,这是多年前用fedora的时候整理的,也贴出来,顺便也再复习一下. 先来了解一下文件属性,在shell环境里输入:ls -l 可以查看当前目录文件.如:drwxr-xr-x. 1 ...

  3. linux下进程权限分析

    转自http://blog.chinaunix.net/uid-27105712-id-3349522.html 在linux下,关于文件权限,大部分人接触比较多,也比较熟悉了解.但是对进程权限一般知 ...

  4. <实训|第十三天>linux中ACL权限控制以及磁盘配额,附编译属于自己的linux内核

    [root@localhost~]#序言 首先讲讲昨天关于缩容失败,开不机的解决方法:ACL权限也算是一个很重要的知识点,不难,但是很实用:磁盘配额一般不需要自己弄,但是要懂得原理.剩下的就是编译属于 ...

  5. Linux系统——ACL权限控制及特殊权限

    ACL权限控制 ACL(access control list),可以提供除属主.属组.其他人的rwx权限之外的细节权限设定 ACL的权限控制 (1)User 使用者 (2)Group 群组 (3)M ...

  6. Linux下ACL权限控制以及用sudo设置用户对命令的执行权限

    ACL权限分配 1.setfacl命令设置文件权限 setfacl -m u:user1:rw root.txt setfacl -m u:user2:rwx root.txt 2.getfacl命令 ...

  7. linux下ftp权限控制

    需求背景: 1.创建2个账号给联调的系统使用读取我方服务器提供的文件信息.只允许看到限定的目录,对目录下的文件只有只读权限,禁止shell登录. 2.创建一个内部账号提供文件信息,只允许看到限定的目录 ...

  8. Linux - 文件ACL权限控制

    getfacl 1.test # 查看文件ACL权限 setfacl -R -m u:xuesong:rw- 1.test # 对文件增加用户的读写权限 -R 递归

  9. Linux常用文件权限控制命令

    一,查看文件属主属组ls -l [root@localhost app]# ls -l total 302832 drwxr-xr-x. 4 lhc lhc 4096 Nov 18 16:05 apa ...

随机推荐

  1. 如何在C#中使用MSMQ

    MSMQ (Microsoft消息队列)是Windows中默认可用的消息队列.作为跨计算机系统发送和接收消息的可靠方法,MSMQ提供了一个可伸缩.线程安全.简单和使用方便的队列,同时为你提供了在Win ...

  2. 网络流量预测入门(一)之RNN 介绍

    目录 网络流量预测入门(一)之RNN 介绍 RNN简介 RNN 结构 RNN原理 结构原理 损失函数$E$ 反向传播 总结 参考 网络流量预测入门(一)之RNN 介绍 了解RNN之前,神经网络的知识是 ...

  3. NOIP2020 T2 字符串匹配题解

    首先考虑O(n^3)的暴力怎么写. 显然,可以枚举字符串\(A\)+\(B\)的右端点,左端点显然是1,暴力判断是否能与后面的字符构成循环节,对于满足 \(k*(A+B)+C=\) 整个字符串\((k ...

  4. Redis持久化之父子进程与写时复制

    之所以将Linux底层的写时复制技术放在Redis篇幅下,是因为Redis进行RDB持久化时,BGSAVE(后面称之为"后台保存")会开辟一个子进程,将数据从内存写进磁盘,这儿我产 ...

  5. 设置一个两边固定中间自适应的css

    1.两边浮动,中间自动宽度 给左右两个盒子设置左右浮动,中间的盒子不设置宽度,左右两边边距为左右盒子的宽度,中间盒子的位置必须写在右盒子下面,不然会把右盒子挤下去 如:   <div class ...

  6. Python_1生成器(下)之单线并行--生产着消费者模型

    1 import time 2 def consumer(name): 3 print('%s准备吃包子了!' %name) 4 while True: 5 baozi = yield 6 print ...

  7. 代理模式详解:静态代理+JDK/CGLIB 动态代理实战

    1. 代理模式 代理模式是一种比较好的理解的设计模式.简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标 ...

  8. TRUNK与VTP

    TRUNK协议: 交换机之间VLAN通信: 同一个VLAN可以跨越多个交换机 主干功能支持多个VLAN的数据 Trunk(主干) VLAN 中交换机之间的链路:用来承载多个VLAN的数据流. Trun ...

  9. Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)

    Cooike简介 Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式.Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的 ...

  10. Flink-v1.12官方网站翻译-P018-Event Time

    事件时间 在本节中,您将学习如何编写时间感知的Flink程序.请看一下及时流处理,了解及时流处理背后的概念. 关于如何在Flink程序中使用时间的信息请参考windowing和ProcessFunct ...