대화형 쉘로 sudo, 비밀번호 필요 없음

대화형 쉘로 sudo, 비밀번호 필요 없음

비슷한 질문이 있었다는 것을 알고 있지만 정확한 상황에 대한 답변을 찾지 못했습니다(중복된 것으로 보이면 언제든지 닫으시기 바랍니다).

회사 네트워크에 있으므로 파일을 수정할 권한이 없습니다 /etc/sudoers.

우리는 이를 사용하여 sudo -u svc_produser -i사용자를 대화형 셸로 전환합니다. 매번 비밀번호를 묻는 메시지가 나타납니다. 비밀번호를 자동으로 전달하고 가능하다면 서비스 사용자로 로그인하자마자 명령을 실행하는 방법을 원합니다.

-i비밀번호가 작동하지 않아서 파이핑할 수 없습니다 -S( --stdin).

이전 회사에서는 스크립트를 통해 이를 달성했지만 expect사용 가능한 스크립트도 없었습니다.

Python을 사용할 수 있지만 이를 수행할 수 있는 간단한 Bash 방식이 있기를 바랐습니다.

답변1

예, Askpass 옵션을 사용하여 이를 수행할 수 있습니다. 에서 man sudo:

-A, --askpass

일반적으로 sudo에 비밀번호가 필요한 경우 사용자 터미널에서 비밀번호를 읽습니다. -A(askpass) 옵션이 지정되면 (가능한 그래픽) 도우미 프로그램이 실행되어 사용자의 비밀번호를 읽고 비밀번호를 표준 출력으로 출력합니다. SUDO_ASKPASS 환경 변수가 설정된 경우 도우미 프로그램의 경로를 지정합니다.

따라서 가장 간단한 형태로 비밀번호를 출력하는 스크립트를 작성할 수 있습니다.

$ cat ~/scripts/foo.sh
#!/bin/sh
printf '%s\n' this_is_my_password

그런 다음 SUDO_ASKPASS변수가 이를 가리키도록 설정합니다.

export SUDO_ASKPASS=/home/terdon/scripts/foo.sh

그럼 넌 달려가

sudo -A -u svc_produser -i 

대화형 셸의 경우 명령만 실행하려는 경우 다음을 수행할 수 있습니다.

sudo -A -u svc_produser command

예를 들어 내 시스템에서는 다음과 같습니다.

$ sudo -A whoami
root

이제 이것은 분명히 매우 안전하지 않은 것 같습니다. 자신만 읽을 수 있는 파일을 만들고 그 안에 비밀번호를 저장하면 좀 더 나은 결과를 얻을 수 있습니다.

$ printf 'this_is_my_password\n' > ~/.hidden_file
$ chmod 600 ~/.hidden_file

더 나은 방법은 사용하지 말고 printf편집기 창을 열고 비밀번호를 쓰는 것입니다. printf위의 방법을 사용하면 비밀번호가 기록에 일반 텍스트로 표시됩니다. 더 나은 방법은 부팅 시에만 해독되는 암호화된 볼륨에 저장하는 것입니다. 더 안전하게 만들기 위해 다양한 조정과 개선이 가능합니다.

관련 정보