博客
关于我
Linux 用户身份与进程权限
阅读量:796 次
发布时间:2023-02-01

本文共 1509 字,大约阅读时间需要 5 分钟。

进程权限与用户身份:Linux 权限系统的动态管理机制

在深入学习 Linux 系统权限管理时,我们通常先关注文件的 ugo 权限(用户组权限),但真正决定文件访问权限的却是进程。作为用户,我们通过进程执行操作,而进程携带着用户身份信息进行合法访问。本文将从进程的角度剖析权限管理机制,阐述用户身份与进程权限之间的关系。

从登录过程观察进程身份

在 Linux 系统中,-login 进程负责处理用户的身份验证。当用户成功登录时,-login 进程执行 exec /bin/login,验证用户身份并获取有效用户 ID。此时,登录进程的身份信息被设置为用户的真实身份,并启动用户的默认shell(如 bash)。_shell 进程及其子进程会继承该有效用户身份。

进程身份信息解析

通过 proc 伪终端获取进程信息时,可以看到进程的四个关键字段:real user ID(实用户ID)、effective user ID(有效用户ID)、saved set user ID(储存权限位ID)和文件系统用户 ID。这些字段共同决定进程对系统资源的访问权限。本文重点分析前两个字段:

  • real user ID:执行进程的用户 ID,通常与登录用户一致,子进程从父进程继承。

  • effective user ID:判断进程是否具有文件访问权限的核心字段。MicrosoftTeams نقلIDLCPRIMESEND中,这一值决定了进程是否拥有执行特定文件或命令的权限。例如,使用 sudo chmod 4755 /bin/cat 后,cat 进程的 effective user ID 会变为 root,赋予其访问特定文件的权限。

  • saved set user ID:一个临时存储区,用于接受 setuid() 调用传递的有效用户 ID。非 root 用户只能将 effective user ID 设置为 real user ID 或 saved set user ID 中的一个,而 root 用户则可以设置为任意用户 ID。

shell 中外部命令的执行

shell 中使用 exec 函数启动外部命令的过程如下:

  • fork 创建子进程:shell 通过 fork() 创建新进程,作为子进程,继承父进程的属性。
  • 搜索命令路径:新进程根据 PATH 变量搜索命令路径。如果命令包含斜杠,程序会直接寻找全路径。
  • 使用 exec 替换进程:新进程通过 exec 函数加载目标程序并替换当前进程的代码,启动新程序。
  • cat test.log 为例,当用户执行命令时,bash 进程 fork 出子进程,子进程搜索并启动 /bin/cat,替换自身身份。由于子进程的 effective user ID 等于 real user ID(用户 nick),而 test.log 文件的所有者也是 nick,.cat 可以读取该文件内容。

    Shell 脚本的执行机制

    shell 脚本的执行方式与外部命令类似。例如,/bin/bash ./test.sh 会 fork 出子 bash 进程,子进程从 test.sh 的第一行解释器 (/bin/bash) 执行脚本。解释器的代码段通过 exec 替换当前进程,simultaneously子进程继承父进程的环境变量和用户身份信息。

    总体理解

    文件权限是静态的,而进程是动态的。进程携带用户身份信息,确保其执行操作的合法性。从 ps aux 查看的 effective user ID 可以直观确认进程权限。理解这一原理有助于更好地管理 Linux 权限,确保系统运行安全。

    转载地址:http://sqwfk.baihongyu.com/

    你可能感兴趣的文章
    Linux.BackDoor.Chikdos/Elknot Attack And Defense Analysis
    查看>>
    Linux/CentOS环境下如何安装和配置PhantomJS工作环境
    查看>>
    Linux/CentOS设置全局代理(http)
    查看>>
    Linux/Unix中使用iconv进行编码转换
    查看>>
    Linux/Unix工具与正则表达式的POSIX规范
    查看>>
    Linux/UNIX数据文件和信息系统
    查看>>
    Linux/Windows上Jenkins + Maven + Git的安装
    查看>>
    Linux0.11内核--几种地址(逻辑地址、线性地址、物理地址)的含义
    查看>>
    Linux20系统怎么链接WiFi,在Deepin 20系统下安装Linux图形无线Wi-Fi扫描器LinSSID
    查看>>
    Linux3 在VMware中搭建CentOS6.5虚拟机
    查看>>
    Linux5
    查看>>
    Linux7/Centos7新特性之链路聚合
    查看>>
    LINUX7下安装kaldi实战
    查看>>
    linux8 redis集群槽+docker
    查看>>
    linux:firewall-cmd开放端口时出现bad port (most likely missing protocol)的解决方法
    查看>>
    linuxcbt-dhcpd
    查看>>
    Linux[crontab命令]–管理定时任务
    查看>>
    Linux[find命令]-根据路径和条件搜索指定文件并删除
    查看>>
    linux_DNS
    查看>>
    Linux_ERROR 1045 (28000): Access denied for user 'root'@'localhost'
    查看>>