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


15

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

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

私は、クロンコマンドでファイルを作成し、CRONで読み取ることができますが、解決策はかゆいです。

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

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


@MadHatter、モナリザが挨拶を送信します
;

回答:


27

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

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

そしてsudo /usr/lib/nagios/plugins/check_md_raid、RAIDをチェックする必要があるときに、監視ユーザーとしてコマンドを実行します。

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

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

次に、phpを実行しsudo /etc/rc.d/init.d/myservice restartます。


2
これがIMOへの道です。このプロセスを同様のタスクに使用しました。現在、3年以上生産されています。アプリケーションロジックで適切にトリガーするPHPコードを保護する限り、何も失敗したことはなく、セキュリティリスクはほとんど存在しません。
アンドリューエンスリー

1
おかげで、私の新しい初心者とターゲットを強打します。@Andrew、追加情報をありがとう。
user65297

1
user65927、これがあなたにとってニュースではないなら許してください。しかし、地元のエチケットは、あなたが質問に満足のいく答えを持っているとき、その隣のチェックアウトラインをクリックすることでそれを受け入れるということです。
-MadHatter

1
sudoersファイルの「Defaults requiretty」行をコメント化する必要がある場合もあります。このステップは私に数回得ました。(たとえば、「Defaults requiretty」を「#Defaults requiretty」に変更します)
-steve.lippert

6

sudoを見てください:別のユーザー(この場合はルート)として実行できるアクションを指定できます。

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

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

参照man sudoファイルの詳細と構文について


2
/etc/sudoersファイルを編集するときは十分に注意してください。構文的に何らかの誤りがある場合、元に戻すのは悪夢のようなB / Cですが、sudoSudoを完全に消去することはできません。最終的にレスキューCD / DVDを使用し、パーティションを手動でマウントする必要があります。
プーク

1
@puk実際にshuddersを編集するには、rootアクセスが必要です。ファイルが破損した場合は、rootとしてログインし、(バックアップコピーから)復元するか、手動で修正します。visudoは、ファイルを書き込む前にファイルの健全性チェックも実行します。
マッテオ

なにshudders?visudoは健全性チェックを行いますが、損傷が行われた後は役に立ちません:P
puk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.