我试图了解用户权限在Linux中的工作方式。内核启动并init
以root身份启动,对吗?然后,Init运行启动脚本并再次以root身份运行getty
(agetty
)。login
我认为Agetty只是读取用户名并运行,仍然以root身份运行。没什么有趣的。但是登录有什么作用?我找不到比“尝试登录”更好的东西。假设登录发现密码匹配(并且我们尝试以普通用户身份登录),它如何更改用户ID?我以为应该对此进行系统调用,但我找不到它(也许我只是盲目的?)
另外,约su
。su
设置了“ setuid”位,因此当我们运行它时,它始终以root身份运行。但是,当我们告诉它以通常的用户身份登录时,它再次需要更改用户ID。我是否正确理解相同的“魔术”发生在何时su
以及login
何时需要更改用户?如果是这样,为什么要有两个不同的程序?运行登录时是否还会发生其他严肃的事情?