从 bash 切换到 zsh 后如何获得 root 权限?

从 bash 切换到 zsh 后如何获得 root 权限?

很奇怪的是,从 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

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

localhost:~ myname$ ssh -lroot 106.186.120.20
[email protected]'s password: (enter the correct/incorrect password)
Permission denied, please try again.

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

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

normalusername@(none):~$ su
Password: (entered a wrong password and pressed enter)
(pressed enter)
su: Authentication failure

输入错误的密码后,我没有看到任何内容,我输入了enter两次,然后得到了su: Authentication failure结果。

我尝试了很多次,结论是:

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

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

中的条目/etc/passwd

root:x:0:0:root:/root:zsh

答案1

尝试: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
#

答案2

您的输入/etc/passwd

root:x:0:0:root:/root:zsh

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

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

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

root:x:0:0:root:/root:/bin/zsh

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

一些管理员设置了账户UID 0 但有不同的 shell(通常是静态链接的二进制文件,例如窗扇,即使在出现此类错误配置的情况下也允许 root 登录(最常见的错误配置是普通 shell 中损坏的共享库)。

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

答案3

  • 检查您当前的 shell

    grep '^root:' /etc/passwd
    

    您应该在行末尾看到 root 用户使用的 shell 的完整路径,例如/bin/zsh.然后检查路径是否拼写错误、文件是否存在并且设置了正确的权限(read 和 e xecute)。

  • 如果路径不正确,则检查zsh可执行文件的放置位置

    type zsh
    
  • 之后su使用正确的 shell 路径进行 root,例如/bin/zsh

    su -s /bin/zsh -
    
  • 最后运行chsh将默认 shell 更改为/bin/zsh

相关内容