ユーザに提供するシステム管理者(PC環境の管理者)向けの内容として、ユーザ権限でXAMPP環境を使えるようにするための手順をご報告します。
発端はこんな依頼です。
「Web検証用に「XAMPP」インストールをお願いします。」
か、軽い…。
依頼の軽い感じとは逆にインストール・設定と動作確認は結構重い作業です。作業の重さに関係なく依頼は軽い感じで舞い込んでくるものです。
対象となる環境は下記です。
OS:Windows 7 Enterprise
※XAMPPを実際に利用するユーザはWindowsではUser権限。
※ユーザにAdministrator権限を付与しない。(Administratorsグループに所属しない)
インストール前に一工夫します。
今回ユーザ権限でXAMPPを動作させるためにインストールユーザのIDも実際に利用するユーザIDで実施します。
そのためにいったん仮にAdministratorsグループに利用ユーザを所属させAdministratorsグループに所属した利用ユーザIDでインストール作業を実行します。
この対象ユーザIDはこの文章内では仮にuser1とします。
ユーザID:user1でログオンします。
ダウンロードしたインストーラ:xampp-win32-5.5.27-1-VC11-installer.exeを実行します。インストールは容易です。ウィザードの示すまま進めてOKです。
インストールは他ページでもやっていますし他ページの方が詳しいですからここでは割愛です。
※インストール先はデフォルトの「c:\xampp」です。
インストール完了後、このXAMPP環境はユーザが利用するために、NTFSのアクセス権を付与することにします。
XAMPP環境のファイルをユーザが好きなように編集できるようにするために、ファイルのアクセス権を明示的にフルコントロールにします。
※ここは起動する・しないにはあまり関係しないことではありますが、ユーザに提供する際に必要になると思います。
インストールフォルダ「c:\xampp」をのプロパティを開きます。
画面中のセキュリティタブをクリックします。セキュリティタブ画面内にある詳細設定ボタンをクリックし、以下の画面(xamppのセキュリティの詳細設定)を表示します。
画面では「継承元 c:¥」となっています。まずはこの継承を外します。「このオブジェクトの親からの継承可能なアクセス許可を含める」チェックボックスを外します。以下のウィンドウが表示されます。
警告画面は「追加」ボタンをクリックします。
これで「継承元:継承なし」に変化します。続いて「子オブジェクトのアクセス許可すべてをこのオブジェクトからの継承可能なアクセス許可で置き換える」にチェックを入れます。
適用やOKボタンを押したくなるところを堪えて、画面中「追加」ボタンをクリックします。ユーザの追加画面が表示されます。
ユーザ選択画面で追加したいユーザ名を入力し「OK」ボタンをクリックします。ここではユーザID:user1を追加する必要があるので画面では「user1」と入力しています。追加したいユーザはフルコントロールででも追加しましょう。
ユーザを追加後上記のようになります。「OK」ボタンをクリックして画面を完了させます。
画面を完了させると、設定したアクセス権で子オブジェクトを置き換える処理が進捗するウィンドウが表示され、自動的に閉じます。
ここまでが完了したところで、NTFSアクセス権の処理は完了しているので、フォルダプロパティで開いた画面はすべて「OK」ボタンをクリックして閉じて構いません。
ポイントは、こんなところです。
- 「c:\xampp」フォルダについて標準ではc:¥から継承しているアクセス権設定を「継承なし」に変更する。
- 利用ユーザを追加し、追加された利用ユーザがフルコントロールでフォルダアクセス可能にするよう設定する
- 設定した「c:\xampp」フォルダのアクセス権を継承する子オブジェクトすべてに伝播させる
フォルダアクセス権設定はこの辺で完了です。
XAMPP設定でよくある話ですが、インストールが完了後にポート被りを解消させないとXAMPPが起動しません。
ポート80番を使用しているアプリケーションが存在するとApacheが起動できませんので、80番が使われていない状態に変更します。
ポート80番を使用するアプリケーションと言えばSkypeとIISが有名ですね。
どちらもインストールはしていないのですが、エラーになってしまいました。
⇒XAMPP起動直後のエラー之図
----------------------------------------------
15:41:32 [Apache] Problem detected!
15:41:32 [Apache] Port 80 in use by "Unable to open process" with PID 4!
15:41:32 [Apache] Apache WILL NOT start without the configured ports free!
15:41:32 [Apache] You need to uninstall/disable/reconfigure the blocking application
15:41:32 [Apache] or reconfigure Apache and the Control Panel to listen on a different port
----------------------------------------------
PID 4がポート80番を使っているというエラー。何もなかったはずなのですが…、ちょっと調べてみましょう。
SkypeとIISはインストールしていない(されていない)ことは確認できました。
Microsoft Web Matrixもインストールされていません。
VisualStudio系は一切入っていません。
サービス内に「World Wide Web Publishing Service」は存在しないのでWebサービス関連ではなさそうです。
次にプロセスの確認です。
⇒プロセス見てみた、之図
PID 4はsystemプロセスで使われていますが、その配下にあるのは「Interrupts」と「smss.exe」というプロセスです。このプロセス自体はOSの動作に必要となるプロセスですので、OS周りのサービスでポート80番が使われている、ということになりましょうか。
Windows Remote Management(Windows-RM、WinRM)サービスが起動していることでポート80番がバインドされる、という情報をもとに、Windows Remote Management(Windows-RM、WinRM)サービスは無効にして停止しました。
「services.msc」を起動し、Windows Remote Managementのプロパティを開きます。
初期は「自動(遅延開始)」になっています。
プロパティ画面から、「停止」ボタンでサービス停止、スタートアップの種類を「無効」と選択し「OK」ボタンをクリックします。
この画面で、試すためにサービス停止だけを実行する場合には「停止」ボタンをクリックしてサービスの停止だけを実行します。停止ボタンをクリックするだけだとPC再起動時に再びこのサービスが起動してきます。試した結果、影響するサービスだと判断できた場合、サービスが自動起動しないように「スタートアップの種類から無効を選択」します。
無効になった画面:
起動を確認してみました。解消せず…。
それでもApacheは起動しません。PID 4のsystemプロセスで使われているということは他にも80番ポートを利用するOSプロセスがあるということになります。
そこで、以下のコマンドで80番をバインドしていそうなサービスを洗い出すことにしました。
コマンドプロンプトを起動し、コマンド「net stop HTTP」と入力して実行します。こんな感じ、
----------------------------------------------
C:\Windows\system32>net stop HTTP
次のサービスは HTTP サービスに依存しています。
HTTP サービスを停止すると、これらのサービスも停止されます。
Windows Media Player Network Sharing Service
SSDP Discovery
Print Spooler
BranchCache
この操作を続行しますか? (Y/N) [N]:
----------------------------------------------
ここをいったんNで抜け、各々サービスを確認します。
順番に停止していくと、
- SSDP Discovery
- BranchCache
- Windows Media Player Network Sharing Service
の3つを停止するとApacheが起動することが分かりました。いったん止めてみます。
⇒Apacheが起動した之図
Apacheが起動することが分かったので、サービスが自動起動しないように無効化してしまいます。
⇒サービス×3無効化の図
停止と無効の方法についてはWindows Remote Managementのときに記載した操作方法を参照してください。停止で確認して影響すると分かれば無効化です。
ここまでで試しにXAMPP付属のnetstat画面でポート80番の状態を確認してみましょう。
ポート80番はsystem(PID4)だったのが、いまはhttpになっています。
ここまでで起動が確認取れましたのでXAMPPのスタートアップ設定を実施します。
必要なサービスが自動起動するように設定しました。
ここまでで、設定が完了しているはずです。
最後に、仮でAdministratorsグループに利用ユーザを所属させた状態を解除し、user1をUsersグループのみ所属した状態で再度起動し直します。user1でログオンしたのち起動することを確認します。
と、まあこのように起動するようになりました。見えにくいですがバックのコマンドプロンプト画面で「所属しているローカルグループ=Users」のみとなっているのが分かります。
ここまでで無事XAMPPがユーザ権限(Usersグループ所属ユーザ)で起動するようになりました。
このほかに必要な設定はあるかもしれませんが、いったんこの状態でユーザ側へ引き渡し、使えない機能があれば随時対処を実施することにします。
お疲れ様でした。