Linux 用户身份与进程权限
发布日期:2025-04-06 22:20:17 浏览次数:11 分类:精选文章

本文共 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 权限,确保系统运行安全。

    上一篇:linux 登录后佛祖保佑
    下一篇:Linux 用户被差别对待?无法通过 apple.com 管理 Apple ID

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年05月08日 02时50分58秒