Linux进程管理:用户ID、会话与守护进程详解
1. 用户ID相关概念
在Linux系统中,与进程相关的用户ID有三种:真实用户ID(real user ID)、有效用户ID(effective user ID)和保存的用户ID(saved user ID)。
当一个进程执行exec调用时,通常有效用户ID不变。但如果执行的是setuid(suid)二进制文件,进程的有效用户ID会改变,会被设置为程序文件所有者的用户ID。例如,/usr/bin/passwd是一个suid文件,其所有者是root,当普通用户的shell创建一个进程来执行该文件时,无论执行用户是谁,该进程的有效用户ID都会变为root。
非特权用户只能将有效用户ID设置为真实用户ID或保存的用户ID,而超级用户可以将有效用户ID设置为任意值。
保存的用户ID是进程最初的有效用户ID。当进程进行fork操作时,子进程会继承父进程的保存用户ID。在执行exec调用时,内核会将保存的用户ID设置为有效用户ID,以此记录exec时的有效用户ID。非特权用户不能更改保存的用户ID,超级用户可以将其设置为与真实用户ID相同的值。
有效用户ID是验证进程凭证时检查的值,真实用户ID和保存的用户ID则作为非root进程可以切换的替代用户ID值。真实用户ID