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
ことができます。 2番目のリスクは競争です。誰かがあなたの前にファイルに書き込んだり、echo
あなたの前にファイルを変更しsudo
たり、ファイルから読み取ったりする場合です。
ただし、直接の要求を処理することができます。
set_account.sh
コマンドを変更できない場合は、次のようにしてみてください。
$ sudo sh -c 'set_account.sh `cat /home/somewhere/new_account_john` --other-options'
上記の他のコマンドの代わりにsudo
sudoの後にcatを呼び出してみてください(しかしこれはシェルの引用構文によって異なります)。他のコマンドは変更されません。