首页 > 系统相关 >进程中的权限是如何操作的

进程中的权限是如何操作的

时间:2023-10-24 22:32:45浏览次数:25  
标签:CAP parent cap 进程 操作 权限 define

任何一个进程都有父进程。所以,整个进程其实就是一棵进程树。而拥有同一父进程的所有进程都具有兄弟关系。

struct task_struct __rcu *real_parent; /* real parent process */
struct task_struct __rcu *parent; /* recipient of SIGCHLD, wait4() reports */
struct list_head children;      /* list of my children */
struct list_head sibling;       /* linkage in my parent's children list */
  • parent 指向其父进程。当它终止时,必须向它的父进程发送信号。
  • children 表示链表的头部。链表中的所有元素都是它的子进程。
  • sibling 用于把当前进程插入到兄弟链表中。

进程中的权限是如何操作的_进程

通常情况下,real_parent 和 parent 是一样的,但是也会有另外的情况存在。例如,bash 创建一个进程,那进程的 parent 和 real_parent 就都是 bash。如果在 bash 上使用 GDB 来 debug 一个进程,这个时候 GDB 是 parent,bash 是这个进程的 real_parent。

real_cred 就是说明谁能操作我这个进程,而 cred 就是说明我这个进程能够操作谁。这里 cred 的定义如下:

struct cred {
......
        kuid_t          uid;            /* real UID of the task */
        kgid_t          gid;            /* real GID of the task */
        kuid_t          suid;           /* saved UID of the task */
        kgid_t          sgid;           /* saved GID of the task */
        kuid_t          euid;           /* effective UID of the task */
        kgid_t          egid;           /* effective GID of the task */
        kuid_t          fsuid;          /* UID for VFS ops */
        kgid_t          fsgid;          /* GID for VFS ops */
......
        kernel_cap_t    cap_inheritable; /* caps our children can inherit */
        kernel_cap_t    cap_permitted;  /* caps we're permitted */
        kernel_cap_t    cap_effective;  /* caps we can actually use */
        kernel_cap_t    cap_bset;       /* capability bounding set */
        kernel_cap_t    cap_ambient;    /* Ambient capability set */
......
} __randomize_layout;

从这里的定义可以看出,大部分是关于用户和用户所属的用户组信息。

第一个是 uid 和 gid,注释是 real user/group id。一般情况下,谁启动的进程,就是谁的 ID。但是权限审核的时候,往往不比较这两个,也就是说不大起作用。

第二个是 euid 和 egid,注释是 effective user/group id。一看这个名字,就知道这个是起“作用”的。当这个进程要操作消息队列、共享内存、信号量等对象的时候,其实就是在比较这个用户和组是否有权限。

第三个是 fsuid 和 fsgid,也就是 filesystem user/group id。这个是对文件操作会审核的权限。

一般说来,fsuid、euid,和 uid 是一样的,fsgid、egid,和 gid 也是一样的。因为谁启动的进程,就应该审核启动的用户到底有没有这个权限。

capabilities,用位图表示权限,在 capability.h 可以找到定义的权限。

#define CAP_CHOWN            0
#define CAP_KILL             5
#define CAP_NET_BIND_SERVICE 10
#define CAP_NET_RAW          13
#define CAP_SYS_MODULE       16
#define CAP_SYS_RAWIO        17
#define CAP_SYS_BOOT         22
#define CAP_SYS_TIME         25
#define CAP_AUDIT_READ          37
#define CAP_LAST_CAP         CAP_AUDIT_READ

对于普通用户运行的进程,当有这个权限的时候,就能做这些操作;没有的时候,就不能做,这样粒度要小很多。

cap_permitted 表示进程能够使用的权限。但是真正起作用的是 cap_effective。cap_permitted 中可以包含 cap_effective 中没有的权限。一个进程可以在必要的时候,放弃自己的某些权限,这样更加安全。假设自己因为代码漏洞被攻破了,但是如果啥也干不了,就没办法进一步突破。

cap_inheritable 表示当可执行文件的扩展属性设置了 inheritable 位时,调用 exec 执行该程序会继承调用者的 inheritable 集合,并将其加入到 permitted 集合。但在非 root 用户下执行 exec 时,通常不会保留 inheritable 集合,但是往往又是非 root 用户,才想保留权限,所以非常鸡肋。

cap_bset,也就是 capability bounding set,是系统中所有进程允许保留的权限。如果这个集合中不存在某个权限,那么系统中的所有进程都没有这个权限。即使以超级用户权限执行的进程,也是一样的。

cap_ambient 是比较新加入内核的,就是为了解决 cap_inheritable 鸡肋的状况,也就是,非 root 用户进程使用 exec 执行一个程序的时候,如何保留权限的问题。当执行 exec 的时候,cap_ambient 会被添加到 cap_permitted 中,同时设置到 cap_effective 中。

进程中的权限是如何操作的_进程_02



标签:CAP,parent,cap,进程,操作,权限,define
From: https://blog.51cto.com/key3feng/8010739

相关文章

  • openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户
    openGauss学习笔记-108openGauss数据库管理-管理用户及权限-用户使用CREATEUSER和ALTERUSER可以创建和管理数据库用户。openGauss包含一个或多个已命名数据库。用户和角色在整个openGauss范围内是共享的,但是其数据并不共享。即用户可以连接任何数据库,但当连接成功后,任何用户都......
  • 模拟 机器人的充电桩底板电压过大过小的 电压输出 测试操作方法
    1个dcpowersubbly直流稳压电源、铜丝电线若干根接线如下:1、把直流稳压电源的正极、负极分别连接电路板的正极、负极2、按下直流稳压电源开关ON/OFF3、按下旋转VOLTAGE,电压V数值会闪,向左调小,向右调大,停留1~2秒后则会按当前电源输出电压。超出电压范围值,前9秒红灯闪烁......
  • 麒麟KYLINOS桌面操作系统2303上安装tigervnc
    好文推荐:统信UOS或者麒麟KYLINOS上软件包有未满足的依赖关系怎么办hello,大家好啊,今天给大家带来在麒麟桌面操作系统2303上安装tigervnc的文章,本篇文章给大家讲述如何安装并且远程连接使用,后面会给大家更新如何将tigervnc做成桌面图标点击即可开启及关闭,欢迎大家浏览分享转发。1、查......
  • Go的文件操作:读写文件与IO接口
    大家好!我是[lincyang]。今天我们要一起探讨Go语言中的文件操作,特别是读写文件和IO接口。什么是文件操作?文件操作是编程中不可或缺的一部分,涉及到数据的读取、写入、删除等。在Go语言中,这些操作主要通过os和io两个标准库来完成。为什么要进行文件操作?数据持久化:程序运行结束......
  • hive基本操作
    间隔几年,又开始频繁写hive的sql,整理一点关于hive常用的基本语句,只有天天写的时候才很熟练,过几年很容易遗忘的东西。hive创建表droptableifexistsods.tb_fdn_testtable;createtableifnotexistsods.tb_fdn_testtable(citystringcomment'地市'......
  • 基于Python的子进程获取键盘输入
    一概念 众所周知,python中的获取键盘输入,input函数是没办法用在子程序的,这就限制了它的用途。想要在子程序中获取键盘输入。唯有fn=sys.stdin.fileno函数了。二实例解析在主进程中敲写代码fn=sys.stdin.fileno(),然后将获取到的文件描述符fn传入子进程,子进程敲写代码sys......
  • Redis-cluster群集操作步骤(主从切换、新增、删除主从节点)
    1.进入集群客户端任意选一个redis节点,进入redis所在目录cd/redis所在目录/src/./redis-cli-h本地节点的ip-predis的端口号-a密码[root@mysql-db01~]#redis-cli-h10.0.0.51-p637910.0.0.51:6379> 2.查看集群中各个节点状态集群(cluster)clusterinfo......
  • 数字化转型进程如火如荼,数字孪生在其中能发挥什么样的作用?
    数字化转型如今如火如荼,企业和组织都在积极寻求新的技术和策略,以应对快速变化的商业环境。在这个数字化浪潮中,数字孪生技术崭露头角,为企业带来了前所未有的机遇和优势。数字孪生,是一种基于虚拟化和模拟的技术,它在数字化转型中扮演着多重角色。首先,数字孪生技术允许企业将现实世界......
  • 进程池
     codeimportosimporttimefromconcurrent.futures.processimportProcessPoolExecutordeftest(n):print(f'n:{n}-os.getpid:{os.getpid()}')time.sleep(2)return'helllo'defcall_back(n):print(f'callback:n.r......
  • 服务器数据恢复-服务器操作系统损坏导致蓝屏,重启后仍然蓝屏的数据恢复案例
    服务器故障&分析:某公司一台华为机架式服务器,运行过程中突然蓝屏。管理员将服务器进行了重启,但是服务器操作系统仍然进入蓝屏状态。导致服务器蓝屏的原因非常多,比较常见的有:显卡/内存/cpu或者其他板卡接触不良、硬盘出现物理故障、系统漏洞被利用,外部入侵、系统文件丢失或损坏等。......