Ubuntu 16.04에서는 모든 sudo 명령이 기록되며 그 중 일부에는 로그에 남기고 싶지 않은 민감한 매개변수(예: 일반 텍스트 비밀번호)가 포함되어 있습니다. 이를 방지하는 방법에 대한 몇 가지 아이디어가 있지만 이상적으로는 충분히 간단하고 일반적이어야 하는 공식적인 방법이 있는지 알고 싶습니다.
예를 들어 다음 명령을 사용합니다.
$ sudo set_account.sh --password SbdLb9W --pin-number 1234 --other-options
로그 로그는 다음과 같이 나타날 수 있습니다.
sudo set_account.sh --password ... --pin-number ... --other-options
감사해요.
매우 유용한 답변과 의견을 보내주신 모든 분들께 감사드립니다. 환경 변수와 래퍼 스크립트 방법을 계속 사용할 것 같습니다.
답변1
명령 옵션에 비밀번호를 입력하지 마세요.
올바른 방법은 다음과 같은 환경 변수를 사용하는 것입니다.
$ MY_PASSWORD=s3cr3t ./mycommand
그러나 mycommand
환경에서 비밀번호를 찾는 방법을 알아야 합니다.
비밀번호는 쉘 기록에 표시되지만 다른 사용자에게는 표시되지 않습니다.https://security.stackexchange.com/questions/138071/are-environment-variables-entered-directly-before-a-command-visible-to-other-
쉘 기록에 표시하지 않으려면 위 명령을 스크립트에 넣고 스크립트를 실행하십시오.
다른 프로세스를 호출하는 경우 자식 프로세스에 mycommand
전달하지 않도록 주의하세요.MY_PASSWORD
답변2
다음을 수행할 수 있습니다.
$ rm -f /home/somewhere/new_account_john
$ touch /home/somewhere/new_account_john
$ chmod 600 /home/somewhere/new_account_john
$ echo "--password SbdLb9W --pin-number 1234" > /home/somewhere/new_account_john
$ sudo set_account.sh --read-options-from /home/somewhere/new_account_john --other-options
$ rm -f /home/somewhere/new_account_john
이는 여전히 보안 위험을 초래하며 누군가 프로세스 목록을 읽고 명령을 ps
볼 수 있습니다. 두 번째 위험은 경쟁입니다. 누군가가 귀하보다 먼저 파일에 쓰거나 echo
귀하보다 먼저 파일을 변경 sudo
하거나 파일에서 읽는 경우입니다.
그러나 귀하의 직접적인 요청을 처리할 수는 있습니다.
set_account.sh
명령을 변경할 수 없으면 다음과 같이 시도해 볼 수 있습니다.
$ sudo sh -c 'set_account.sh `cat /home/somewhere/new_account_john` --other-options'
위의 다른 명령 대신 sudo
sudo 다음에 cat을 호출해 보십시오(그래야 하지만 이는 쉘의 인용 구문에 따라 다릅니다). 다른 명령은 변경되지 않습니다.