こんにちは、ヱビス(@Evisu0414)です。
今日は、緊急処置的に権限が弱い、「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ユーザー」の権限を疑ってみてください。
コメントを残す