从APUE
进程的真实用户ID和真实组ID标识了我们真正的身份。这两个字段取自我们登录时在密码文件中的输入。通常,在登录会话期间,这些值不会更改,尽管超级用户进程可以通过多种 方法来更改它们
超级用户进程可以更改进程的真实用户ID和真实组ID,以使真实用户ID和真实组ID之间的关系与密码文件中的关系不匹配吗?例如,如果每个密码文件中用户Tim
都不是组的成员ocean
,那么超级用户进程可以将进程的真实用户ID和真实组ID 分别更改为Tim
和ocean
吗?
从APUE
进程的真实用户ID和真实组ID标识了我们真正的身份。这两个字段取自我们登录时在密码文件中的输入。通常,在登录会话期间,这些值不会更改,尽管超级用户进程可以通过多种 方法来更改它们
超级用户进程可以更改进程的真实用户ID和真实组ID,以使真实用户ID和真实组ID之间的关系与密码文件中的关系不匹配吗?例如,如果每个密码文件中用户Tim
都不是组的成员ocean
,那么超级用户进程可以将进程的真实用户ID和真实组ID 分别更改为Tim
和ocean
吗?
Answers:
密码文件和组文件不被读取,它们仅在登录过程中被读取,以设置真实用户ID和真实组ID。
内核中没有提及这些文件的内容。登录必须打开文件,处理它们并设置两个ID。从其他地方获取这些ID的方式可能有所不同。例如,来自网络数据库。
具有CAP_SETUID功能的任何进程都可以设置这些ID,root具有此功能。
Unix中的安全模型部分在内核中实现,部分在进程中以更高的功能(例如,以root用户身份)运行。
请注意,/etc/passwd
和/etc/group
也被读取ls
,ps
以及任何其他程序需要从用户/组ID的用户名/组名翻译成/。(他们可能会通过库来执行此操作,而不是知道存储这些详细信息的替代方法。)
/etc/passwd
,/etc/groups
)。ps
ls