PHP shell_exec は Debian システムサービスを実行します。

PHP shell_exec は Debian システムサービスを実行します。

shell_execPHP機能を使用してシステムサービスを制御しようとしています。

shell_exec('sudo /usr/sbin/service icecast2 stop');

ただし、これを機能させる唯一の方法は、すべてのユーザーに次のサービスへのルートアクセスを許可することです/etc/sudoers

ALL ALL=(root) NOPASSWD: /usr/sbin/service

これは明らかに非常に悪い考えですが、別のものに設定しようとすると、サービスにroot権限が必要なため、実行が拒否されます。たとえば、次のようになります。

%www-data ALL=(root) NOPASSWD: /usr/sbin/service
%www-data ALL=NOPASSWD: /usr/sbin/service

また、echoはposix_getpwuid(posix_geteuid())['name'];実行中のプロセスにwww-data以外の名前を提供します。ただし、次のいずれも機能しません。

%myphpuser ALL=(root) NOPASSWD: /usr/sbin/service
%myphpuser ALL=NOPASSWD: /usr/sbin/service

また、サービスを制御し、shell_execから呼び出すためにbashスクリプトを書いてみましたが、うまくいきませんでした。

このようにサービスを開かないように他のソリューションを考えることができる人はいますか?

たとえば、この特定のサービスと機能へのアクセスのみを許可しますか?

編集する

ある程度進展がありました。これはうまくいきますが、十分に安全ですか?

myphpuser ALL=(ALL:ALL) ALL
myphpuser ALL=NOPASSWD: /usr/sbin/service

また、これを呼び出すPHPスクリプトは、とにかく公開されていないcronジョブによって実行されることにも注意する必要があります。

ベストアンサー1

おすすめ記事