![从 bash 切换到 zsh 后如何获得 root 权限?](https://linux22.com/image/35831/%E4%BB%8E%20bash%20%E5%88%87%E6%8D%A2%E5%88%B0%20zsh%20%E5%90%8E%E5%A6%82%E4%BD%95%E8%8E%B7%E5%BE%97%20root%20%E6%9D%83%E9%99%90%EF%BC%9F.png)
很奇怪的是,从 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
结果。
我尝试了很多次,结论是:
- 如果我输入正确的密码,它会告诉我“无法执行 zsh:没有这样的文件或目录”
- 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
.然后检查路径是否拼写错误、文件是否存在并且设置了正确的权限(r
ead 和 ex
ecute)。如果路径不正确,则检查
zsh
可执行文件的放置位置type zsh
之后
su
使用正确的 shell 路径进行 root,例如/bin/zsh
:su -s /bin/zsh -
最后运行
chsh
将默认 shell 更改为/bin/zsh