Apacheを介してroot権限を必要とするLinuxシェルスクリプトを実行しようとしていますが、Apacheのsuidおよびsudo権限を設定せずにroot権限を必要とするスクリプトを実行する方法はありますか?
コントロールパネルなどのファイルを編集しようとしています。たとえば、Pleskでは、sw-cp-serverはルートファイルを編集できます。
答え1
問題は、どのように分割しても権限のないユーザーができる場合書くスクリプトファイルを使用すると、そのユーザーがスクリプトを変更できるため、何でもできるステートメントが開きます。ただし、必要に応じてルーティングして0700に設定できるため、これを行う必要はありません。
Apache の suid と sudo 権限を設定する代わりに
何もsuidを設定する必要はなく、Apacheがスクリプトのみを実行できるようにsudoを使用できます。 Apacheがユーザーとして実行されている場合は、httpd
以下を追加します/etc/sudoers
。
httpd ALL = NOPASSWD: /foo/bar/scripts/foobar.sh
そこからスクリプトの実際のパスを置き換えます。その後、.を使用して呼び出す必要がありますが、これはユーザーに許可されているsudo /foo/bar/scripts/foobar.sh
唯一の操作です。httpd
man 5 sudoers
詳しくはこちらをご覧ください。
答え2
Apacheを介してroot権限を必要とするスクリプトを実行する唯一の方法は、必要な修正を実行するために必要な権限セットをApacheに提供することです。
別のオプション(そしてこれは汚い解決策)は、Apacheがファイルに書き込むようにし、Apacheが書き込んだファイルを確認し、Apacheがファイルに書き込んだ内容に従ってアクションを取るデーモンをサーバーで実行することです。
答え3
root権限でApacheを実行したくない場合(そうではありません)、SUID権限(chmod 4755
)を付与して所有者として機能するスクリプト用の小さなroot
ラッパーを作成できます。その後、ラッパーは正しい権限で実行されるスクリプトを呼び出すことができます。その結果、他のスクリプトは「昇格」されませんが、もちろんスクリプトの内容はとにかく変更できないことに注意してください。