从bash切换到zsh后如何到达root?

AGa*_*yer 3 shell login root zsh

很奇怪,从bash切换到zsh后,无法访问root。

在以普通用户(用户名是normalusername)身份登录后,我通常使用“su”以 root 身份登录,但权限较少。它总是很好。但是在将 root shell 从 bash 切换到 zsh 后,当我尝试通过 su 登录时,我得到:

normalusername@(none):~$ su
Password: (enter the correct password)
Cannot execute zsh: No such file or directory
Run Code Online (Sandbox Code Playgroud)

当我从我的 Mac 通过 ssh 直接访问 root 时,我得到:

localhost:~ myname$ ssh -lroot 106.186.120.20
root@106.186.120.20's password: (enter the correct/incorrect password)
Permission denied, please try again.
Run Code Online (Sandbox Code Playgroud)

无论我输入的密码是否正确,它都会一次又一次地出现。

所以我故意从普通用户那里输入了错误的密码“su”,我得到了:

normalusername@(none):~$ su
Password: (entered a wrong password and pressed enter)
(pressed enter)
su: Authentication failure
Run Code Online (Sandbox Code Playgroud)

输入错误的密码后,我什么也没看到,我输入了enter两次,然后得到了su: Authentication failure结果。

我试了很多次,结论是:

  1. 如果我输入正确的密码,它会告诉我“无法执行 zsh:没有这样的文件或目录”
  2. 如果我输入错误的密码,它不会显示任何内容,直到我按enter了 2-6 次。

这似乎表明我不仅忘记了“正确的密码”。但是我怎么能访问root呢?

输入/etc/passwd

root:x:0:0:root:/root:zsh
Run Code Online (Sandbox Code Playgroud)

llu*_*lua 10

试试:cd /usr/bin; su。由于您没有给出 zsh 的绝对路径。su正在检查PWD. 更改到zsh存在的目录将适用于某些系统。一个例子:

% su
Password:
su: zsh: No such file or directory
% cd /usr/local/bin
% su
Password:
# print $OSTYPE
freebsd10.0
#
Run Code Online (Sandbox Code Playgroud)

  • 而且您将永远不必再次使用它,因为您将使用登录 shell 的绝对路径,对吗?:} (2认同)

Gil*_*il' 8

您的输入/etc/passwd

root:x:0:0:root:/root:zsh
Run Code Online (Sandbox Code Playgroud)

这是一个无效条目:shell 必须是可执行文件的完整路径,登录程序不执行 $PATH 查找。

您将无法通过正常方式登录 root 帐户。您可以使用 sudo 来调用命令,例如sudo vipw,如果您的帐户具有 sudo 权限。这是绕过目标帐户中的登录外壳设置的唯一常用方法。

如果您不是 sudoer,您可能已经将自己锁定在 root 帐户之外。您需要控制台访问权限才能修复系统。以单用户模式启动(请参阅如何以系统管理员 (root) 身份运行命令)并编辑/etc/passwd以包含

root:x:0:0:root:/root:/bin/zsh
Run Code Online (Sandbox Code Playgroud)

(在您的系统上使用正确的 zsh 路径)。

一些管理员设置了一个UID 为 0的toor 帐户,但使用不同的 shell(通常是静态链接的二进制文件,例如sash,以允许 root 登录,即使在配置错误的情况下,例如这种配置(最常见的错误配置是损坏的共享库)在普通外壳中)。

为避免将来出现此类问题,请使用该chsh命令更改用户的 shell,而不是/etc/passwd直接编辑。如果您必须编辑/etc/passwd或其他一些涉及获得 root 访问权限的文件,请在终端中打开 root shell,并且在确认您仍然可以以 root 身份登录之前不要关闭它。