sudo + execをどのように実行しますか?

sudo + execをどのように実行しますか?

sudo他のユーザーとしてプロセスを実行するために使用する必要があります。ただし、sudo次のようなものを使用する方法は次のとおりですexec

sudo -u www-data exec php -r 'sleep(2); echo 5;'

sudoプロセスを変更しますか?

理由と要件は何ですか?

  • 総プロセス数の最小化
  • コマンドは引き続き開始されるため、一度にすべて開始することはできません。sudo
  • 解決策は何もないようにexec、つまり背景がないかのように動作するはずです。

ベストアンサー1

sudo(8) のマニュアルページから:

特別な場合に、ポリシープラグインが閉じる機能を定義せずにptyを必要としない場合、sudoは最初にfork(2)を呼び出さずにコマンドを直接実行します。 sudoersポリシープラグインは、I / Oロギングが有効な場合、ptyが必要な場合、またはpam_sessionまたはpam_setcredオプションが有効になっている場合にのみシャットダウン機能を定義します。

一般的な状況では、これはプロセスがTTYから切断されていることを確認してもフォークされないことを意味します。たとえば、

sudo -u www-data php -r 'sleep(2); echo 5;' < /dev/null > /dev/null 2>&1

追加手順は省略されます。特定の出力が必要な場合は、TTY以外のファイルまたは同様のファイルに渡し、残りは上記の/dev/nullように残してください。

プロセスリストで元のsudoコマンドを見ている副作用がまだあることがわかりましたが、おそらく大丈夫でしょう。あるいは、これらの要件を補完するために、プロセスリストにプロセスの表示方法を変更するいくつかのPHP関数または同様の呼び出しがあります。

修正する:

多くのシステムでは、デフォルトでpamオプションが有効になっているようです。無効にできますが、「コマンドを実行してもリソース制限が更新されない可能性があります」などの副作用があることに注意してください。詳しくは sudoers(5) をご覧ください。グローバルに無効にするには、次の行を追加します/etc/sudoers

Defaults        !pam_setcred
Defaults        !pam_session

特定のユーザーまたは同様のユーザーに設定を制限する方法については、sudoers(5)のマニュアルページを参照してください。マニュアルページで「Default_Type」を探します。

おすすめ記事