俺の報告

RoomClipを運営するエンジニアの日報(多分)です。

ApacheユーザでPHPからsudo権限のシェルをたたく - 日報 #130

さて話すことないので、
お互い(?)のためにもさっさと終わらせましょう。

注意深く使用すればPHPスクリプトからシェルを叩くというのはとても強力です。
Apacheモジュールで起動したPHPスクリプトから叩ければなお可能性は広がります。
もちろんセキュリティに関しては要注意で、
変数をコマンドに挿入することは極力避けて、実行コマンドは静的にすべきですが。

より強力な活用をするために、sudo権限というか、
apacheユーザに結構強めの権限を与えるシーンも出てくると思います。
これはとても躊躇することですが、
本当に限定的に使うのであればやってみたいものです。

ということで、その手順を。
超簡単ですが。
sudo visudo
これで、
apache-user-name ALL=(ALL) NOPASSWD: /hoge/hoge.sh
こんな感じのテキストを挿入するだけ。

もうちょい詳しく。

sudo visudo
ってのは
/etc/sudoers
に存在する設定ファイルをいじる専用のエディタです。
vimとかでいじっちゃうとsudo権限がなくなったままどーしようもなくなっちゃうので、
間違ってもファイルを直接いじらないようご注意。
で、
apache-user-name ALL=(ALL) NOPASSWD: /hoge/hoge.sh
これですが、書式としては下記の通り。

  • apache-user-name : これは付与権限が与えられるユーザ名(www-dataとかhttpdとか)。これはグループ名でもOKです。
  • ALL=(ALL) : 最初のALLはWhereのことでホスト名かIPアドレス。ちょっと複雑だけど、sudoersをどのホストからでも共有する場合はALLでいい。2番目のALLはAs_Whomのことで、誰の権限で?ということを記述すr。指定しなければrootになるので最強権限だが、ALLとかいておけばまず間違いなく誰かの権限で通過できるはず。
  • NOPASSWD: /hoge/hoge.sh : これがWhatの部分。起動させたいコマンドを書く。これをALLにしちゃうとちょい危険なので、特定のものにしておくとよいと思います。

という感じ。
ホスト名のところとか結構きわどいけど、多くのサンプルでALL指定なので、
深く考えずにならっております。

あぁ、明日も元気出していこう。