centos:su默默失败

mat*_*teo 3 su centos

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

su 其他用户名

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

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

但是它不会给出任何错误消息。如果我尝试使用无效的用户名 su ,它确实会给出一条错误消息。

我错过了什么??

Lad*_*ada 7

是否otherusername有一个有效的shell /etc/passwd

什么su是作为另一个用户执行一个进程。它默认选择的进程是/etc/passwd相关用户的最后一个字段中的任何内容。这通常是一个 shell,例如/bin/sh/bin/bash。当该过程结束时,您将被转储回您开始时所在的原始 shell,由 root 拥有。

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

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

此帐户目前不可用。

在退出之前 1。

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


您可能会看到类似的混乱行为身边sudo,如果你使用它cd。如果您是普通用户并且无法cd进入目录,则sudo cd directory不会打印任何错误消息,不会将您更改为 root,也不会更改您的目录。

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

  • 在这里再次强调一点 - 如果有一个帐户你不想拥有 shell 访问权限,你通常应该将它的 shell 设置为 `/usr/sbin/nologin` 而不是 `/bin/false` 以便很清楚外壳访问被禁用。 (3认同)