![대화형 쉘로 sudo, 비밀번호 필요 없음](https://linux55.com/image/225565/%EB%8C%80%ED%99%94%ED%98%95%20%EC%89%98%EB%A1%9C%20sudo%2C%20%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8%20%ED%95%84%EC%9A%94%20%EC%97%86%EC%9D%8C.png)
비슷한 질문이 있었다는 것을 알고 있지만 정확한 상황에 대한 답변을 찾지 못했습니다(중복된 것으로 보이면 언제든지 닫으시기 바랍니다).
회사 네트워크에 있으므로 파일을 수정할 권한이 없습니다 /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
위의 방법을 사용하면 비밀번호가 기록에 일반 텍스트로 표시됩니다. 더 나은 방법은 부팅 시에만 해독되는 암호화된 볼륨에 저장하는 것입니다. 더 안전하게 만들기 위해 다양한 조정과 개선이 가능합니다.