在 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 中。