Bash

su 在 /etc/passwd 中以 bash 靜默失敗

  • March 9, 2018

每當我在我的 Debian 機器上以普通使用者身份登錄時嘗試使用 su 到 rootsu時,它都會默默地失敗,將我轉儲回原來的使用者和 shell。在搜尋此問題時,我遇到了一些解決方案,這些解決方案解釋說,如果我嘗試登錄的使用者的 shell 無效,則應該發生這種行為/etc/passwd,但似乎並非如此,文件的第一行是:root:x:0:0:root:/root:/bin/bash.

我可以 su 到 root 的唯一方法是:

su -s /bin/sh

由於看起來問題出在bash安裝本身,因此我嘗試在以 root 身份登錄時重新安裝bashapt-get install --reinstall bash但錯誤仍然存在。我怎樣才能使使用 bash 登錄到 root 成為可能su

我只是注意到,如果在輸入 root 密碼後按 enter 和被轉儲回我的原始使用者之間的時間跨度內,我嘗試按ctrl+ csu工作並且我在 bash 中以 root 身份登錄。

如果我root使用 shell 登錄並/bin/bash從那裡執行,它會返回一個分段錯誤錯誤。

我試著跑步/bin/bash -x。它似乎永遠執行列印/opt/spark//bin:/opt/spark//bin:/opt/spark//bin。當被迫用ctrl+停止時c,它會bashroot使用者一起執行,就好像什麼都沒發生一樣。strace /bin/bash似乎表明該命令試圖/root/.bashrc一遍又一遍地打開,直到它出現段錯誤。

您的問題源於~/.bashrc文件中的無限循環:

export SPARK_HOME=/opt/spark/ 
export PATH=$PATH:$SPARK_HOME/bin 
source ~/.bashrc

當放置在您的 ~/.bashrc 文件中時,您將成功地 su 到使用者並執行您的 shell,但您永遠不會得到提示。

最小的解決方法是註釋掉該source行。

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