ホームページ  >  記事  >  バックエンド開発  >  PHPで特定のユーザーとして外部コマンドを実行するにはどうすればよいですか?

PHPで特定のユーザーとして外部コマンドを実行するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-31 11:55:01963ブラウズ

How to Execute External Commands as a Specific User in PHP?

PHP で特定のユーザーとして外部コマンドを実行する

サーバーサイド環境で作業する場合、外部コマンドライン プログラムを実行する必要がある状況がよく発生します。 PHP スクリプトから。ただし、PHP を実行するデフォルトのユーザーには、特定のアプリケーションへの十分な権限またはアクセス権がない可能性があります。

問題

ローカルホストで Apache を実行し、Rhythmbox の再生を制御しようとしているシナリオを考えてみましょう。 www-user として実行される PHP スクリプトから。コマンド rhythmbox-client --pause の実行は、手動で実行すると完全に機能しますが、www-user として実行すると失敗します。これは、Rhythmbox がユーザーのインスタンスを認識またはアクセスしないためです。

解決策

有効な 1 つの方法解決策は、sudo コマンドを利用して、特定のユーザーとして外部プログラムを実行できるようにすることです。これには、sudoers ファイル (visudo) を変更して、Web サーバー ユーザー (wwwuser など) に特定のコマンドを実行する権限を付与することが含まれます:

wwwuser ALL=/usr/bin/rhythmbox-client

これにより、必要なコマンドのみを実行する Apache の機能が制限され、潜在的なセキュリティ リスクが防止されます。 .

拡張ソリューション

この特定のケースでは、PHP が www-user として実行されているため、Rhythmbox はまだユーザーのインスタンスを認識できない可能性があります。これに対処するには、rhythmbox-client を呼び出す bash スクリプトを作成し、実行ユーザーの環境から DBUS_SESSION_BUS_ADDRESS を取得します。

<code class="bash">#! /bin/bash
DBUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/*/environ 2>> /dev/null| sed 's/DBUS/\nDBUS/g' | tail -n 1`
if [ "x$DBUS_ADDRESS" != "x" ]; then
        export $DBUS_ADDRESS
        /usr/bin/rhythmbox-client --pause
fi</code>

この bash スクリプトは、PHP によって wwwuser として実行され、Rhythmbox の再生を制御できるようになります。 PHP アプリケーションからユーザーとして。

以上がPHPで特定のユーザーとして外部コマンドを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。