
本文共 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()
创建新进程,作为子进程,继承父进程的属性。PATH
变量搜索命令路径。如果命令包含斜杠,程序会直接寻找全路径。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 权限,确保系统运行安全。
发表评论
最新留言
关于作者
