web-dev-qa-db-ja.com

sudoホワイトリストはperlをプログラムするだけです

Visudo Ubuntuでは、このプログラムをホワイトリストに登録します

myuser ALL=(root) NOPASSWD:/myuser/program.pl

私が走るとき

Sudo /myuser/program.pl

パスワードの設定を求めるプロンプトが表示されます。解決策はvisudo/usr/bin/Perlに追加することです

myuser ALL=(root) NOPASSWD:/myuser/program.pl,/usr/bin/Perl

これで、パスワードを尋ねることなく実行できます。

ここに問題があります。ユーザーをmyuserとしてWebサービスシステムを実行すると、Webサービスは/usr/bin/Perlなどのコマンドを実行できます。

/usr/bin/Sudo  /usr/bin/Perl -e 'system ("cat /etc/shadow");'

私の主張は正しいですか?この問題の解決策は何ですか?

1
The nothing

この問題を解決するには、次の行を変更する必要があります:myuser ALL=(root) NOPASSWD:/myuser/program.pl,/usr/bin/Perlこの行に:myuser ALL=(root) NOPASSWD:/usr/bin/Perl /myuser/program.pl

1
Marco Nappi

まず、インタラクティブに使用するユーザーIDでWebサーバーを実行しないでください。それは非常に悪い習慣です。特に、インタラクティブセッションでSudo-sを使用する場合。

通常、Sudoはttyごとの認証を使用するため、Sudoingを実行しているのと同じttyからWebサーバーを起動した場合、またはsudoersDefaults !tty_tickets

自分の名前でWebサーバーを実行する必要があり、同じttyから実行する必要がある場合は、Sudoのタイムアウトを0に設定する必要があります。man sudoersから:

sudoersは、資格情報のキャッシュにユーザーごとのタイムスタンプファイルを使用します。ユーザーが認証されると、認証に使用されたuid、端末セッションID、およびタイムスタンプ(使用可能な場合は単調クロックを使用)を含むレコードが書き込まれます。その後、ユーザーはパスワードなしでSudoを短期間(timestamp_timeoutオプションでオーバーライドされない限り5分)使用できます。デフォルトでは、sudoersはttyごとに個別のレコードを使用します。つまり、ユーザーのログインセッションは個別に認証されます。

0
Ljm Dullaart