ブラウザでPHPでシステムコールを実行するには?

私はファイルを暗号化するためにシステムコール(centOS 6.0)を作るCプログラムを持っています、私のコードは次のとおりです:

#include 
int main() {
 system ("gpg -c --batch --passphrase mypass file.txt");
 return 0;
}

実行可能オブジェクトは、encrypt_file ./encrypt_fileをCLIで直接実行すると、file.txt.gpgが完全に実行されますが、ブラウザで実行しようとすると応答がありません。 phpのコード:

shell_exec("./encrypt_file");

私がCプログラムを作成する理由は、パスフレーズがコードに含まれていても表示されないようにすることです。パスフレーズを含む.cファイルを削除すると、.exeファイルとパスフレーズは表示されません。

私はすでに次のコードを発行して、アクセス権をapacheユーザーに変更しました。

chown apache.apache /var/www/html/

/ etc/sudoersに次の行を追加しました:

apache   ALL=(ALL)    NOPASSWD:ALL

NOTE: The only command I have issues is gpg, I can make a system call with any other command that I needed to use, I can even run python scripts, and other C programs that doesn't contain anything related to gpg.

私は速い返信を願っています!私はこのencrypt_fileをたくさん使う必要があります!

1
nl ru de
実際にバイナリ上で文字列を実行するだけで、その内部にプレーンテキストのパスフレーズが表示され、バイナリにコンパイルしてもそれを難読化することはありません。
追加された 著者 complex857,
gpgへの絶対パスを使用するか、それがApacheの PATH にあることを確認してください。
追加された 著者 dev-null-dweller,
それはあなたの理由は、Cファイルは、水を保持していないPHPファイルに入れて、それを削除後。
追加された 著者 user557846,
少し具体的にお願いしますか?私は "水を保持しない"部分を理解していません。
追加された 著者 HIDS2013,
@ dev-null-dweller私はそれを試みたが、何もしなかった、どこでApache Webサーバーで使用されているPATH変数を変更できますか? complex857情報をありがとう!それでも私はそのコマンドを実行する必要があります。
追加された 著者 HIDS2013,

1 答え

/ var/log/httpd/error_logのerror_logを確認するこの行を見ました:

gpg: Fatal: can't create directory `/var/www/.gnupg': Permission denied

Then I found a solution at this site -> http://gnupg.10057.n7.nabble.com/Exi...pt-td7342.html

私はgpgコマンドにApacheのerror.logで見つかったPATHに--homedirオプションを追加しました。これは完全に動作します!

ありがとうございます!

0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com