Shell

從 bash 切換到 zsh 後如何獲得 root 權限?

  • January 17, 2017

很奇怪,從bash切換到zsh後,無法訪問root。

在我以普通使用者(使用者名是)登錄後,我通常使用 ‘su’ 以 root 身份登錄,並且normalusername權限較少。它總是很好。但是在將 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
root@106.186.120.20'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. 如果我輸入了錯誤的密碼,它不會顯示任何東西,直到我點擊enter2-6 次。

這似乎表明我不只是忘記了“正確的密碼”。但是我怎麼能訪問root呢?

進入的/etc/passwd

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

試試: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
#

您的輸入/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 設置了一個toor 帳戶,但使用了不同的 shell(通常是靜態連結的二進製文件,例如sash,以允許 root 登錄,即使在這樣的錯誤配置的情況下(最常見的錯誤配置是損壞的共享庫)在普通外殼中)。

為避免將來出現此類問題,請使用該chsh命令更改使用者的 shell,而不是/etc/passwd直接編輯。如果您必須編輯/etc/passwd或其他一些涉及獲得 root 訪問權限的文件,請在終端中保持 root shell 打開,並且在您確認您仍然可以以 root 身份登錄之前不要關閉它。

引用自:https://unix.stackexchange.com/questions/177343