apacheユーザーの権限を少し上げて、nodeコマンドなどを動かす方法

こんにちは、ヱビス(@evisu_phper)です。

今日は、緊急処置的に権限が弱い、「apacheユーザー」に強めの権限を付与する処理方法をご紹介します。

環境は下記のとおりです。
・Apache2.4.6
・CentOS7

apacheユーザーとは

ApacheでWebサーバーを用意したとき、http経由でシステムを動かすのが「apacheユーザー」です。
※CentOS7標準のApacheでは初期設定

そのため、PHPのプログラムで作成されたディレクトリやファイルの所有者は「apacheユーザー」として記録されます。

apacheユーザーの権限を強める必要性

本来は、セキュリティの関係上「apacheユーザー」の権限を上げる必要性はなのです。

ですが、稀に「apacheユーザー」では実行できない処理をさせる必要がある場合があります。

例えば
PHPの「exec関数」で「nodeコマンド」を実行したい!

この場合、nodeコマンドを実行する権限が「apacheユーザー」にないために失敗します。

visudoで権限の設定をする

問題解決の方法としてあるのが、「apacheユーザー」にroot権限を付与するというものですが、これはやり過ぎ感があります。

通常のユーザー権限程度があれば、問題がないです。
※既に何らかのユーザーが、サーバーに作成されている前提

今回は「hogeユーザー」と同じ振る舞いを「apacheユーザー」にできるようします。

まずは、rootに切り替えてコンソールから「visudo」を実行します。

$ sudo -s
# visudo

「visudo」は「vi /etc/sudoers」と同じ意味で実行されます。

このファイルの中に「hogeユーザー」の記述があるので検索します。

「hogeユーザー」の後に下記を追記します。

apache ALL=(hoge) NOPASSWD: ALL

この設定は下記の意味を持ちます。

apacheユーザーに、hogeユーザーのすべての権限(パスワード入力なし)で与えるという内容になります。

保存すれば、内容が適用されます。

別段、Apacheの再起動等は不要です。

権限を持ってPHPを実行

「apacheユーザー」はパスワード無しで「hogeユーザー」の権限を持てるようになりました。

後は、「hogeユーザー」に変わり、プログラムを実行するだけです。

例えば、下記のようなプログラムになります。

<?php
exec("sudo -s hoge node test.js");

このような形で、PHPのプログラムを実行しているのは「apacheユーザー」のままで、「node」コマンドを実行しているのは「hogeユーザー」というようなことができます。

まとめ

「apacheユーザー」の権限を上げるのは緊急処置的な部分が強く、乱用には注意が必要です。

コマンドラインで実行して動くプログラムが、PHP経由だと動かない時は「apacheユーザー」の権限を疑ってみてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です