====== Apache2 ====== MacOS に標準インストールされている httpd である Apache2 の設定について. MacOS 10.9 になってから,デフォルトでは起動しなくなっている. 起動してもユーザの Sites ディレクトリが機能しない. 適切に設定を修正してやる必要がある. ===== 起動制御 ===== MacOS のシステム・デーモンは,launchd によって制御されているので, - 引数などを XML で記述した .plist ファイルを /System/Library/LaunchDaemons に配置し, - launchctl load しておく というのが基本の手順.Apache については標準で org.apache.httpd.plist が定義されており,さらに apache に特化した起動制御 apachctl が標準実装されている.これを用いて - apachectl start しておけば,システム起動時に自動的に httpd も起動するようになる. ===== サーバ設定 ===== サーバ全体に関わる設定は /etc/apache2 の下にある httpd.conf など設定ファイルを修正することで行う. 設定ファイルを書き換えたあとは必ず apachectl restart して変更を反映させること. 設定ファイルに誤りがあると httpd が起動せず,ウェブサーバに接続できなくなることが多いので, 設定ファイルの修正後に不具合が起きた場合には設定に誤りがないか確認すること. ==== httpd.conf ==== === ユーザディレクトリの有効化 === ユーザのホームディレクトリに HTML ファイルを配備しておき ~//username// でアクセスできるようにするには, 以下の設定を記述しておく.標準ではすでに記述されているはずなので,コメントアウトされていないかを確認しておく. * Include /private/etc/apache2/extra/httpd-userdir.conf === PHP5 の有効化 === Wiki など PHP を使ったコンテンツを扱うためには,PHP5 のモジュールをロードしておく. デフォルトではコメントアウトされている. * LoadModule php5_module libexec/apache2/libphp5.so === other 設定ファイルの読み込み === Include されたモジュール個別の設定は others ディレクトリの下にモジュール別に格納されている.例えば PHP5 の設定は other/php5.conf に記述されている.これらを適切に読み込めるよう,others ディレクトリまるごと Include する設定を httpd.conf に入れておく. * Include /private/etc/apache2/other/*.conf === SSL での通信 === SSL を使って HTTPS で通信するためには,extra/httpd-ssl.conf を Include しておく. デフォルトで Include されているはずなので,コメントアウトされていないかを確認する. * Include /private/etc/apache2/extra/httpd-ssl.conf SSL での通信には RSA 秘密鍵や証明書を生成し,適切な場所に配備しておく必要がある. [[hacks:mac:apache2:SSL|その詳細な手順については別に述べる.]] ==== extra/httpd-userdir.conf ==== ウェブページをユーザのホームディレクトリに配置して ~username で参照できるようにするための設定.ウェブページを配置するディレクトリの名前が UserDir で規定される.ディレクトリのアクセス権は, httpd.conf でデフォルト ArrowOverride None に設定されているので,ユーザ共通で ArrowOverride all しておくことで .htaccess を使った個別の設定が有効になる.AllowOverride に続く Order, Deny の設定については,後述のアクセス制御を参照のこと. UserDir Sites AllowOverride all Order deny,allow Deny from all ===== アクセス制御 ===== ServerRoot やユーザの Sites へのアクセス制御は,ディレクトリごとに .htaccess を配備して記述する. ==== Allow と Deny ==== IP アドレスでアクセス制御をするのは基本的な方法.Allow と Deny を適切に使って制限をかける. どちらを先にかけるかで期待した制限ができないことがあるので,Order を間違わないように注意すること. === Order allow,deny === 先に allow してから deny をかける.このときのアクセス制御は以下のように行われる. - allow で許可されていないアドレス空間からのアクセスならば拒否. - allow で許可されているアドレス空間のうち, - deny で拒否されているアドレス空間からのアクセスならば拒否. - そうでなければ許可. Allow で許可されたアドレス空間のなかで,deny によって制限されていないところからのアクセスを受け付けることになる. === Order deny,allow === 先に deny してから allow する.このときのアクセス制御は以下のように行われる. - deny で制限されていないアドレス空間からのアクセスならば許可. - deny で制限されているアドレス空間のうち, - allow で許可されているアドレス空間からのアクセスならば許可. - そうでなければ拒否. Deny によって制限されているなかで特別に allow で許可されたアドレス空間からのアクセスを受け付ける. 注意すべきは,deny によって制限されなかった空間からのアクセスは,allow に関わらず許可されているということ. ==== 認証 ==== Apache での認証には basic 認証と digest 認証がある.Basic 認証ではユーザ名・パスワードを Base64 エンコーディングで 送ってしまうので盗聴の危険があるが,ほとんどのクライアントが対応しているというメリットがある. 一方 digest 認証ではユーザ名・パスワードを MD5 で要約するので盗聴に強いが, 一部のクライアントが対応していないというデメリットがある. そもそも Apache では,digest 認証を用いなくても https によって通信をセキュアにすることができるので, 基本的には basic 認証でアクセス制御をすればよい. === Basic 認証の設定 === == パスワードファイルとグループファイル == まず認証に用いるパスワードファイルとグループファイルを作成する.パスワードファイルは htpasswd コマンドを使って作成する. パスワードファイルそのものを作成するときは -c オプションを付け,ファイルのパスは分かりやすく安全な場所を選ぶこと. ユーザの追加は htpasswd にオプションなしでパスワードファイルとユーザ名を指定すればよい. * htpasswd -c /Library/WebServer/passwd/passwd username パスワードファイルにはユーザ名と MD5 エンコードされたパスワードが保存される. グループファイルには,このファイルに登録されたユーザ名を引用してグループを記述する. まず先頭にグループ名を書き,コロンで区切ったあとにユーザ名をスペースで区切って列挙する. 例えばユーザ pita と gora を含むグループ staff であれば,以下のように記述する. * staff: pita gora == .htaccess での認証 == Basic 認証の設定は,上述のパスワードファイルとグループファイルを参照して以下のように .htaccess に記述する. AuthName は単にダイヤログに表示される文字列ではなく,同じ情報で認証される「認証領域」を意味しているので, 不用意に同じ文字列を使用すると誤って認証を通してしまうことがあるので注意すること. AuthType Basic AuthName "pitagora switch" AuthUserFile "/Library/WebServer/passwd/passwd" AuthGroupFile "/Library/WebServer/passwd/group" Require group staff