Passenger はどのユーザーアカウントで動くのか?
先日ちょっとしたトラブルがあり、ふと Passenger はどのユーザーアカウントで動くのかな? と思い調べてみまいした。 下の ps の表示では Passenger は アプリ(ここではRedmine)を UID=1001 のユーザーで実行しています。このUIDは私のログインアカウントです。
しかし、Passengerの設定に私のユーザー名やUIDは書いてありません、どうやってPassengerは私のUIDを使ったのでしょうか?
% ps alx F UID PID PPID PRI NI VSZ RSS ... TIME COMMAND ... 1 0 366 6960 20 0 93060 34044 ... 0:02 Passenger FrameworkSpawner: 2.1 0 0 6960 6959 20 0 45896 12332 ... 0:05 Passenger spawn server 5 1001 367 366 20 0 116396 54444 ... 0:02 Passenger ApplicationSpawner: / 1 1001 374 1 20 0 156988 70532 ... 0:15 Rails: /home/rails_app/redmine ...
Phusion Passenger users guideのUser switching に書いてありました。アプリがRailsの場合は config/environment.rb ファイルのオーナーでアプリを実行するそうです。なぜこのように成っているのかは、ここに書かれているように共有サーバーのホスティングサービスでPassengerを利用した場合に、他の利用者のファイルをRailsアプリからアクセス出来ないようにする為だそうです。
ちなみに、専用サーバーで使っている場合は、固定のユーザー(例えば apache)で動いている方が便利な場合もあります。そのような場合は、設定ファイルに
PassengerUserSwitching off PassengerDefaultUser appache
と書くことで apache ユーザーでアプリを実行する事が出来ます。