1

を含むPHPスクリプトがありshell_execute()、それが実行するコマンドには通常sudoが必要です。visudoを使用してsudoersを編集し、次のものを含めました。

www-data ALL = NOPASSWD: /var/root/node/npm/node_modules/less/
%users ALL = NOPASSWD: /var/root/node/npm/node_modules/less/

どちらもうまくいくと思いますが、確かにベルトとサスペンダーのアプローチを採用しました。

私はvimでetc/sudoersを編集しているので、これらの行を追加した後、:xを実行すると、すべてが機能します。私のPHPスクリプトは、想定どおりの動作をします...約10〜15分間。その後、スクリプトは機能しなくなります。具体的には、shell_exec()動作を停止します。

もう一度やるsudo visudoと、新しい行はまだそこにあります。ただし、再度保存した場合にのみ、スクリプトが再び機能し始めます。

なぜこれが起こっているのか誰か教えてもらえますか?私にはあまり良くない2つの推測があります:

  1. 私のときに始まるある種の猶予期間がsudo visudoあり、これが私のスクリプトを機能させるものです(ただし、期限が切れるまでのみ)。
  2. etc / sudoersの新しいデータはsudoers.tmp(「ロックファイル」)に残っています...これらのどちらも私には加算されません。
4

2 に答える 2

1

これが役立つと思います:

パスワードの再入力が必要になるまでの sudo 時間を増やします

Happy sudoing :D

于 2011-12-11T17:03:28.437 に答える
0

PHPドキュメントのコメントによると、これは機能します。

system('echo "PASS" | sudo -u root -S COMMAND');

私はそれをテストしていません。

于 2011-12-11T17:48:33.063 に答える