VistaにApacheをインストールする方法の迷信

UACとApacheインストーラ - なんたらノート 第二期
では、うそを言いました。

Windows VistaApacheをインストールするとき、UACをオンにしたままでも、オフの場合と変わらずインストールでき、途中で権限昇格は問われますが、管理者コマンドプロンプトから実行する必要もありませんでした。もしかしたら、必要な状況もあるかもしれませんが、少なくとも自分の環境では不要でした。

本当に必要なのは、Apacheのインストール先として、デフォルトの C:\Program Files を選択するのを避け、開発者ユーザが共有可能なセキュリティレベルの低いフォルダにインストールすることです。ほんとこれだけ。

Windows Vistaでは、C:\Program Filesへのファイルアクセスは仮想化されます。Vistaでは、たとえAdministratorsであろうと、Program Filesに書き込みする権限がありません。Program Files以下をメンテナンスするには、(盾のマークが付いている、あの)管理者権限が必要になります。管理者権限で実行していないユーザプログラムが C:\Program Files 以下に書き込みをすると、その場にあるファイルに書き込んでいるかのように見せかけて、実は、プログラム実行ユーザのホームにある、AppData\Localフォルダ以下に実体が作られます。そして、そのプログラムがProgram Files下のファイルを読み取るときは、本当のファイルではなく、ユーザホーム以下に格納されているだましファイルを読まされます。だましファイルがなければ、素直にProgram File以下から読み取りします。これで、非管理者権限で実行するユーザプログラムは、まんまとだまされてくれて、いくら乱暴な操作をしようが、Program Filesはインストーラが構成した初期状態に維持されるという仕掛けです。そして、プログラム構成への変更操作がユーザ間で分離されることとなり、他のユーザと意図せず環境を共有する(悪意あるプログラムがインストール構成を書き換えたとき、それを他ユーザにまで感染させる)ことがなくなるというわけ。これは確かに、Application DataやLocal Settingの代わりに、安易にProgram Filesにユーザ設定を保存していたレガシーデスクトップアプリには、そこそこ有効な作戦です。

ところが、Apacheの場合は3つのユーザが同じ設定を共有しなければなりません。

  • サービスを起動するシステムユーザ
  • 設定ファイルやコンテンツを編集する一般ユーザ
  • UAC上の特権を持つ管理者ユーザ

これらがすべて、異なる仮想ファイルにアクセスしているとしたら、わけがわからない状態になります。ユーザ間でファイル操作が分離されてしまうと、普通にテキストエディタで変更した設定ファイルをサービスが認識できません。管理者権限で操作し始めると、いったい誰がどのファイルにアクセスしているのか、もうわけがわからなくなります。すべてのトリックを把握したうえで管理するのは、不可能ではないけれど、余計な困難を招き入れるでしょう。

これさえなければ、他はだいたいXP以前と同じです。不具合があっても、純粋に何が問題かを追うとができるでしょう。

Apache以外にも、Program Filesにユーザファイルを置くソフトがあれば、そこから脱出させるだけで問題が解消するかもしれません。

いやぁ〜。なぜ権限昇格が必要なのかわからない状況で突然選択を迫られたかと思えば、逆に、だまって嘘をついてうまくいったフリをしたり、で、実際は何が起こっているのかについて、開発者資料見ないとわからない、というように、UACは本当に出来が悪いです。そのくせ、Vistaの癖を知った悪意あるプログラムにとっては、裏をかこうと思えば簡単にできそうに思える。カスペルスキーさんに追及された手前、「機能上はUACウザいだけで本質的な防衛手段ではない」とMSも認めちゃってて、ただ、MSはそのウザさがVista対応までサポートし続けない素性の悪いソフトのユーザシェアを縮小させることを重視している、とかなんとか言い訳してるんだけど…。許可と禁止をユーザに選ばせることで同意を得るという対話を省き、悪いこととは何かという定義をあいまいにしたまま、ちゃんと調べようとした人に対しても説明をごまかす、なんていうのはもっとも素性がわるいソフトだ、という気がするぞ。それ自体がお手本にならないでどうするの?