我尝试通过 Emacs 的 Tramp 访问新安装的系统,就像我访问其他所有系统一样:
C-x C-f /ssh:server|sudo:root@server:/etc/network/interfaces
此命令超时。经过一番调查,我发现sudo
和dash
似乎不兼容,尽管我的命令sudoers
很简单:
# grep -P -v '^(#.*)?$' /etc/sudoers
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
当我使用像 Bash 这样的普通 shell 时,以下命令可以正常工作:
env SHELL=/bin/bash sudo -u root -s -H
但是当我使用链接到 /bin/sh 的破折号时,以下命令
env SHELL=/bin/sh sudo -u root -s -H
产生无限循环
/bin/sh: 0: Bad substitution
/bin/sh: 0: Bad substitution
/bin/sh: 0: Bad substitution
/bin/sh: 0: Bad substitution
/bin/sh: 0: Bad substitution
...
只有 才能阻止kill -9
。
我希望这样做apt-get purge dash
,但操作系统坚持保留它。
如何解决这个问题?
答案1
我做到了:
cd /bin
rm sh
ln -s bash sh
apt-get purge dash
apt-mark hold dash
机器仍在启动。