Linux 进程管理中的用户、组、会话与守护进程详解
1. 用户和组 ID 相关概念及操作
在 Linux 系统中,进程的用户和组 ID 是进行权限管理的重要依据,涉及到真实用户 ID、有效用户 ID 和保存用户 ID 等概念。
1.1 真实、有效和保存用户 ID
- 当进程执行
exec调用时,通常有效用户 ID 不变。但执行setuid(suid)二进制文件时,进程可改变其有效用户 ID,将其设置为程序文件所有者的用户 ID。例如,/usr/bin/passwd文件是setuid文件,其所有者为root,普通用户的 shell 创建进程执行该文件时,进程的有效用户 ID 会变为root。 - 非特权用户可将有效用户 ID 设置为真实或保存用户 ID,超级用户则可将有效用户 ID 设置为任意值。
- 保存用户 ID 是进程最初的有效用户 ID。进程
fork时,子进程会继承父进程的保存用户 ID。执行exec调用时,内核会将保存用户 ID 设置为有效用户 ID。非特权用户不能更改保存用户 ID,超级用户可将其更改为与真实用户 ID 相同的值。 - 有效用户 ID 是验证进程凭据时检查的值,真实用户 ID 和保存用户 ID 可作为非
root进程可切换的用户 ID。