대시를 사용한 sudo는 잘못된 대체를 제공합니다.

대시를 사용한 sudo는 잘못된 대체를 제공합니다.

나는 다른 모든 시스템과 마찬가지로 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와 같은 일반 쉘을 사용하면 다음 명령이 제대로 작동합니다.

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 dashOS가 이를 유지하라고 고집합니다.

이 문제를 해결하는 방법은 무엇입니까?

답변1

나는 그것을 했다:

cd /bin
rm sh
ln -s bash sh
apt-get purge dash
apt-mark hold dash

머신이 아직 부팅 중입니다.

관련 정보