centos:su 默默失败

centos:su 默默失败

在 CentOS 服务器上,我通过 SSH 以 root 身份登录,然后执行以下操作:

su 其他用户名

其中“otherusername”是存在的另一个用户的用户名。

它什么都不做。之后,我仍然是 root。whoami 返回 root,我创建的任何文件都属于 root,也就是说,su 只是不 su。

但是它没有给出任何错误消息。如果我尝试使用无效的用户名执行 su,它确实给出了错误消息。

我错过了什么?

答案1

其他用户名有一个有效的 shell 吗/etc/passwd

它的作用su是以另一个用户的身份执行进程。它默认选择的进程是/etc/passwd该用户在最后一个字段中的内容。这通常是 shell,例如/bin/sh/bin/bash。当该进程结束时,您将被转储回您启动时的原始 shell,由 root 拥有。

就 而言su,它已成功切换到正确的用户,因此不需要错误消息。然后它通过执行该命令将控制权移交给配置的 shell。如果此 shell 类似于/bin/false,它将执行/bin/false通常的操作,即以 1 ( 退出错误的) 状态,让你回到 root 用户拥有的父 shell。 /bin/true执行相同的操作,但状态为 0 (真的)。

其他伪壳可能会表现出不同的行为。例如,/usr/sbin/nologin回声

此帐户目前不可用。

然后以 1 退出。

usermod -s /bin/bash otherusername您可以以 root 用户身份更改已配置的 shell 。


sudo如果你将它与 一起使用,你可能会看到类似的令人困惑的行为cd。如果你是普通用户并且无法cd进入目录,sudo cd directory则不会打印任何错误消息,不会将你更改为 root 并且不会更改你的目录。

这样做的原因是它以 root 身份启动一个新 shell,将目录更改为正确的目录,然后立即退出,让您回到原始目录中的原始 shell 中。

相关内容