![su 在 /etc/passwd 中默默地失败并显示 bash](https://linux22.com/image/129247/su%20%E5%9C%A8%20%2Fetc%2Fpasswd%20%E4%B8%AD%E9%BB%98%E9%BB%98%E5%9C%B0%E5%A4%B1%E8%B4%A5%E5%B9%B6%E6%98%BE%E7%A4%BA%20bash.png)
每当我在 Debian 机器上以普通用户身份登录时尝试使用 su 进入 root 权限su
时,它都会默默失败,将我转回原来的用户和 shell。在搜索这个问题时,我遇到了一些解决方案,这些解决方案解释了如果我尝试登录的用户在 中具有无效的 shell /etc/passwd
,则应该会发生这种行为,但情况似乎并非如此,文件的第一行是:root:x:0:0:root:/root:/bin/bash
。
我可以su到root的唯一方法是:
su -s /bin/sh
由于问题似乎出在bash
安装本身,因此我尝试以 root 身份登录时重新安装bash
,apt-get install --reinstall bash
但错误仍然存在。如何才能使用 bash 登录 root su
?
我只是注意到,如果在输入 root 密码后按 Enter 和转储回原始用户之间的时间间隔内,我尝试按ctrl+ c,su
工作,并且我在 bash 中以 root 身份登录。
root
如果我使用 shell登录并/bin/bash
从那里运行,它会返回一个分段错误错误。
我尝试跑步/bin/bash -x
。它似乎永远运行打印/opt/spark//bin:/opt/spark//bin:/opt/spark//bin
。当使用ctrl+强制停止时c,它会bash
与root
用户一起运行,就好像什么也没发生一样。strace /bin/bash
似乎表明该命令尝试/root/.bashrc
一遍又一遍地打开,直到出现段错误。
答案1
您的问题源于文件中的无限循环~/.bashrc
:
export SPARK_HOME=/opt/spark/
export PATH=$PATH:$SPARK_HOME/bin
source ~/.bashrc
当放入 ~/.bashrc 文件中时,您将成功 su 到用户并运行您的 shell,但您永远不会收到提示。
最小的修复方法是注释掉该source
行。