use*_*686 5 linux security users root sudo
sudo 除非我已经是 root 用户,否则需要在系统范围内进行更改的程序。
现在,问题是:系统究竟是如何确定我是(不是)root 的?
可以:
检查我是否在特定组中?如果是这样,我需要加入哪个组?
检查 root 本身的众所周知的 ID(即“root 用户”被硬编码到源中)?
如果是这样,如果我的 root 帐户被损坏会发生什么?我是否会被迫重新安装操作系统,因为无法创建另一个具有 root 权限的帐户?
根据某些文件的内容检查我的名称/组并授予正确的权限?如果是这样,哪个文件包含此信息?
做点别的?如果是这样,它有什么作用?
Ste*_*ard 11
Unix 上的用户名并不重要。只有数字用户 ID。root 的数字 ID 始终为 0。这是硬编码的(在内核、实用程序等中)。
您可以通过运行找到您的数字用户 ID id。
请注意,您的数字用户 ID 是正在运行的进程的属性。当您登录时,您通过 ( login、sshd等)登录的进程以 root (UID 0) 身份运行,一旦您的登录获得授权,它就会切换到您的用户 ID 并运行您的 shell(在 /etc/passwd 中指定)。从那里开始,要使用sudo、su或其他东西来切换用户 ID,这些程序设置了setuid位(chmod u+s或chmod 4xxx将设置该位),以便当它们执行时,进程作为程序的所有者运行(root,UID 0) . 同样,一旦您获得授权,他们就会sudo以 root 身份运行任何程序(无论您要求运行什么,shell 等)。(在这种su情况下,如果您指定要切换到的另一个用户,它会切换到该 UID,然后运行 shell 或其他任何内容。)
要回答您的另一个问题,root 帐户确实无法“损坏”,因为它实际上只是一个数字,但可能有一些原因导致您不能仅以 root 身份登录(例如忘记密码) . 这些都不需要重新安装操作系统,但它们可能需要一些技术技能来修复。(例如,如果您忘记了 root 密码,您可以使用 sudo 使用您的密码进入 root,启动到单用户模式以重置密码,或者从实时媒体或救援环境启动。)