www-dataのroot権限によると

www-dataのroot権限によると

dhcpmanip.pl次の行を含むPerlスクリプトがあります。

system "hostapd /etc/hostapd-1.0/hostapd/hostapd.conf"`

これは起動コマンドhostapdで、次のエラーが発生します。

Insecure `$ENV{PATH}` while running setuid at `/var/www/cgi-bin/dhcpmanip.pl` line 46

オンラインで検索した後、www-dataユーザー(apacheユーザー)にroot権限を付与する必要があることに気づき、次の行を/etc/sudoers挿入してファイルを変更しようとしました。

www-data ALL=NOPASSWD: /var/www/cgi-bin/dhcpmanip.pl

しかし、まだ動作しません。この問題を解決する方法を知っている人はいますか?

答え1

Perlが実行されているため、このメッセージが表示されます。汚染パターン。明示的に設定するか(良い)、実行中のタスクが危険であるため、Perlはこれを有効にします(悪いですが、Perlはまだ良いタスクを実行します)。

PATHいずれにせよ、Perlは外部コマンドを実行する前にコードをクリーンアップする必要があります。

外部コマンドを実行する前に、$ENV{PATH}スクリプトのどこかに明示的に設定する必要があります。

良い練習のためには明示的に使用する必要があります。フルパス実行中のすべての外部コマンド。

答え2

Hostapdが実際に配置されている場所に応じて$ ENV {PATH}を設定する必要があります。たとえば、/usr/binコレクションに存在する場合は$ENV{PATH} = "/usr/bin"動作します。

答え3

私が理解したように、あなたはコンピュータの特定のWebページにアクセスして、コンピュータがdhcp設定を操作するスクリプトを実行できるようにしたいと思います。 SaveTheRbtzが言ったように、これはいいえ安全な方法。

Webサーバーを実行するときは、Webサーバーで実行されているスクリプトがサーバーで操作を実行するために非常に制限されたアクセス権を持っていることを確認する必要があります。そうしないと、スクリプトの間違いが小さいため、一部のスクリプトの子供がサーバーをハッキングして乱用する可能性があります。

したがって、rootアクセスを必要とするスクリプトがある場合、スクリプトは次のことを行う必要があります。いいえWebサーバーユーザーが実行します。もっと複雑な設定を使いましょう。

  • 単にエントリをファイルに書き込むCGIスクリプトを作成します。この操作には最小限の権限が必要であり、正しく完了した場合(つまり、前の項目を追加するのではなく上書きするように)、誰かが複数回クリックしてもディスクがいっぱいになる危険はありません。
  • クローンジョブを作成して、ファイルが変更されたことを定期的に確認します。その場合は、スクリプトを実行します。 cronジョブはrootで所有および実行できるため、追加のsudo設定は必要ありません。

このように、Web サーバーのユーザーは、root アクセスを必要とするスクリプトが実行する操作から完全に分離されます。

関連情報