sudo를 사용할 때 중요한 CLI 매개변수가 Journalctl에 기록되는 것을 방지하는 방법은 무엇입니까?

sudo를 사용할 때 중요한 CLI 매개변수가 Journalctl에 기록되는 것을 방지하는 방법은 무엇입니까?

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'

위의 다른 명령 대신 sudosudo 다음에 cat을 호출해 보십시오(그래야 하지만 이는 쉘의 인용 구문에 따라 다릅니다). 다른 명령은 변경되지 않습니다.

관련 정보