web-dev-qa-db-ja.com

PHP 5のsystem()またはexec()にはsudoが必須です

私たちの企業には、複数の労働者と協力者がいます。外部の共同作業者には、制限されたフォルダー(テストフォルダー)に対する特定のFTPアカウントと、権限を持つMySQLデータベースへのアクセスが制限されています。ただし、次のようにPHPファイルをアップロードできることを発見しました。

system("rm -r *");

fTPディレクトリの最上位を含むすべてのパスで完全に機能します。

どうすればこれを防ぐことができますか?上記のコマンドが失敗する可能性があり、使用する必要があるいくつかの設定ファイルに何らかの方法があります:

 system("Sudo -uUSER -pPASSWORD rm -r *");

そのため、これらのユーザーとパスワードの認証情報は信頼できる共同編集者にのみ提供し、他のユーザーは私たちが自分の役を演じることを恐れずに作業を続けることができますか?

2
Cesar

この場合に行う最も安全なことは、これらの一時的なユーザーアカウントがサーバー上でSudoアクセスできないようにすることです。 PHPファイルをサーバーにアップロードし、ブラウザで実行できる場合、これはあなたが理解するよりも大きなセキュリティホールです。第一に、サーバーは、PHPファイルをアップロードしたユーザーとして実行するように誤って設定されている可能性があります。この場合、これらの一時契約ユーザーはすべて、本来持ってはいけないルートレベルのSudoアクセス権を与えられていることを示しています。それ以外の場合、サーバーがすべてのPHPファイルをWebサーバーユーザー(www-userと同様)で実行している場合、www-userアカウントにSudoアクセスがあることを示すように構成する必要がありますWebサーバーに接続する誰もが、Sudoコマンドを実行できるので、危険なコマンドが渡されるのを妨げない、ひどく書かれたPHPファイルを介してフィードできる場合、これはさらに危険です。

ここでの最良の方法は、Sudoアクセスを絶対に必要とするスタッフに限定し、Apache wwwユーザーアカウントに対して絶対に無効にすることです。

1