PHP を介した root コマンドの実行
CentOS サーバー上の PHP コードから root 権限でコマンドを実行したいとのこと。問題を調査し、考えられる解決策を提示しましょう。
問題:
exec() 関数を使用して sshd サービスを再起動しようとしましたが、それにはroot アクセス。Apache ユーザーには許可されません。 root 権限で Apache を実行したり、sudoers ファイルを変更したりするなどの解決策を試しましたが、問題は解決されていません。
バイナリ ラッパーを使用した解決策 (Suid ビットあり):
所有権と権限の設定: root ユーザーがスクリプトを所有し、それが次の権限があります:
作成バイナリ ラッパー: シェルを実行するバイナリ ラッパーを作成しますroot権限を持つスクリプト。以下にラッパーの例を示します:
# cat > wrapper.c <<CONTENT #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main (int argc, char *argv[]) { setuid (0); system ("/bin/sh /path/to/php_shell.sh"); return 0; } CONTENT
コンパイルと権限の設定: バイナリ ラッパーをコンパイルし、suid ビットを使用して設定します:
この php_rootラッパーは、次の場合に php_shell.sh で指定されたコマンドを root 権限で実行します。
代替解決策:
外部シェル スクリプトを使用する代わりに、バイナリ ラッパーにコマンドを直接埋め込むことができます。手順 3 の内容を、root 権限で実行したいコマンドに置き換えるだけです。
注意:
実行したいスクリプトへの絶対パスを使用することが重要です。悪意のあるユーザーがバイナリを悪用して任意のコマンドを実行するのを防ぎます。
以上がCentOS 上の PHP から root コマンドを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。