web-dev-qa-db-ja.com

非rootアカウントからrootアクションを実行するにはどうすればよいですか?

Phpスクリプトからサービスを再開できるようにしたい。 www-userアカウントで実行されています。

これらのアクションを実行するための好ましい方法は何ですか?

Que'dコマンドを使用してファイルを作成し、CRONで読み取ることができると思いますが、解決策がかゆくなります。

私が考えているのは、ルートの下で実行される小さなサービスであり、事前定義された「メソッド」を許可して、任意のルートアクションを実行できないようにします。

このためのツールはありますか?

15
user65297

車輪の再発明をすることもできますが、正直なところ、これにはパスワードなしのSudoを使用します。たとえば、私の監視システムは、ハードウェアRAIDをチェックするコマンドを実行できる必要があります。これにはroot権限が必要ですが、監視システム全体をrootとして実行したくないので、代わりにsudoersに次のような行があります。

nagios  ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_md_raid

次に、RAIDを確認する必要があるときに、監視ユーザーとしてコマンドSudo /usr/lib/nagios/plugins/check_md_raidを実行します。

あなたは言ったsudoersラインを持つことができます

www-user    ALL=(root) NOPASSWD: /etc/rc.d/init.d/myservice

次に、phpにSudo /etc/rc.d/init.d/myservice restartを実行させます。

27
MadHatter

Sudo を見てください:別のユーザー(あなたの場合はroot)として実行できるアクションを指定できます。

たとえば、your/etc/sudoersに追加できます(visudoを使用してファイルを直接編集しないでください)

www-user-account ALL= NOPASSWD: /usr/bin/mypredefinedaction

ファイルの詳細と構文については、man Sudoを参照してください。

6
Matteo