0

exec() を介してスクリプトを呼び出す PHP コードを実行しています。このスクリプトは、svn commitユーザーを指定せずにコマンドを実行します。このスクリプトを実行するユーザー (彼を NICK と呼びましょう) ( への呼び出しによって検証されます) は、オプションで指定されwhoamiた証明書を持っています。この証明書ファイルには、ユーザー名が添付されています (証明書の内容を so のように出力することで確認できます)。~/.subversion~/.subversion/serversssl-client-cert-file

このスクリプトが NICK の crontab の cron ジョブを介して呼び出されると、コミットの SVN 作成者は、前述の証明書の作成者と同じになります。しかし、同じスクリプトが PHP の exec() 関数を介して呼び出されると、コミットの作成者は別のユーザーになります。この他のユーザーが使用されている理由を、一生理解できません。commit コマンドに--usernameオプションを指定しようとしsvn propset svn:authorましたが、無駄に使用しようとしました。なぜこれが当てはまるのか誰にもわかりますか?PHP / Apache は別の証明書を使用していますか? 何が起こっているか、またはこの動作を変更する方法に関する情報は大歓迎です。

4

2 に答える 2

0

exec でコマンドの前に sudo を付けてみましたか?

exec('sudo -u nick ./path/to/script');
于 2012-08-14T00:48:58.093 に答える
0

Apache は通常、nobody として実行するように構成されています。ブラウザからスクリプトを呼び出す場合。ユーザーApacheが構成されているとおりに実行されます。

于 2012-08-14T00:57:38.857 に答える