sudo -S가 대화형 쉘을 차단하는 이유

sudo -S가 대화형 쉘을 차단하는 이유

sudo를 사용하여 다른 사용자로 전환하려고 하는데 해당 -S옵션을 사용하여 stdin에서 비밀번호를 읽으면 원래 사용자로 돌아갑니다.

예를 들어

콘텐츠 ~newuser/.profile:

echo "Welcome to newuser's account"

다음 없이 sudo를 사용하는 경우 -S:

$ whoami
origuser
$ sudo -iu newuser
[sudo] password for origuser:
Welcome to newuser's account
$ whoami
newuser

그러나 사용할 때 -S:

$ whoami
origuser
$ sudo -Siu newuser < password.txt
Welcome to newuser's account
$ whoami
origuser

따라서 보시다시피 을 사용하면 -S셸이 호출되고 해결되지만 .profile셸은 원래 사용자에게 반환됩니다.

왜 이런거야?

이 문제를 해결할 수 있습니까?

답변1

의 경우 sudo -Siu newuser < password.txt명령의 표준 입력 sudo -Siu newuser은 에서 가져옵니다 password.txt. 이 -S옵션을 사용하면 sudo표준 입력 및 에서 비밀번호를 읽을 수 있습니다 password.txt.그러나 후속 쉘의 표준 입력은 계속 리디렉션됩니다.

입력이 셸로 리디렉션되고(대화형 모드에서 실행 중인지 여부) 입력 끝에 도달하면 셸이 종료됩니다. 이는 스크립트를 실행하여 파일 끝에 도달하도록 하거나 Ctrl+를 눌러 D터미널에 입력 끝을 표시하도록 하는 것과 유사합니다.

따라서 내용이 대부분 읽혀진 파일에서 입력이 리디렉션되는 쉘을 시작합니다. 끝에 도달하고 종료됩니다. 사실상, 여러분의 목표는 쉘이 sudo이 파일이 아닌 터미널에서 입력을 받기 시작하도록 하는 것입니다.

추가 파일 설명자와 더 많은 간접적인 방법 및 기타 방법을 사용하여 이 문제를 해결할 수 있지만,먼저 별도의 단계로 인증을 수행하는 것이 좋습니다, 쉘을 실행하기 전에:

sudo -Sv < password.txt

완료되면 다음을 실행할 수 있습니다.

sudo -iu newuser

첫 번째 명령 직후에 두 번째 명령을 실행하면 타임스탬프가 여전히 유효하므로 암호를 전혀 입력할 필요가 없습니다.

sudowith를 사용하여 지정된 사용자로 명령을 실행하는 경우 루트(일반적으로 사용되지 않음 ) -u로 명령을 실행할 때와 동일한 방식으로 작동합니다 . -u입력하라고 요구하는 비밀번호는너의 비밀번호, 대상 사용자의 사용자가 아니기 때문에 인증만 수행하는 명령( 사용 -v)에서 다른 사용자를 언급하지 않습니다. 이것은가능한대상 사용자의 비밀번호를 예상하도록 구성 sudo하지만 실제로는 그렇게 하는 사람이 거의 없으며 언급하지 않았기 때문에 귀하(및 대부분의 다른 독자)가 관심을 가질 내용은 아닌 것 같습니다.

(물론 해당 파일에서 비밀번호를 읽는 것과 관련된 보안 위험에 대한 일반적인 경고는 이전과 동일하게 적용됩니다.)

답변2

쉘이 실행 중이고 쉘의 표준 입력이 터미널이 아닌 다른 장치에 연결되어 있으면 표준 입력에서 명령을 읽고 표준 입력이 닫힐 때까지 실행합니다.

당신이 달릴 때

sudo -Siu newuser < password.txt

sudo읽기의 표준 입력은 password.txtsudo이 시작될 때까지 변경되지 않으므로 쉘도 에서 읽을 것입니다 password.txt. 그런 다음 두 가지 일이 발생할 수 있습니다: sudo비밀번호가 필요한 경우 비밀번호를 읽고 쉘이 즉시 도달합니다 . 파일의 끝(다른 내용이 없다고 가정)을 종료하고 그렇지 않으면 쉘이 비밀번호를 구문 분석하고 실행하려고 시도합니다.

이 문제를 해결할 수 있는 신뢰할 수 있는 방법이 있는지 잘 모르겠습니다. 어쨌든 이중 처리는 (토큰을 비활성화하지 않은 한) 이 작업을 수행하고 싶지 않을 것임을 의미합니다. 너할 수 있는에 설명된 대로 셸을 시작하기 전에 토큰을 준비합니다.엘리아 케이건의 답변, 토큰을 비활성화하지 않은 경우.

관련 정보