ここ最近、サーバーを構築する機会が何度かあったのですが、Apacheの構築中しばしば同じところでハマることがあったので備忘録。
Apacheでは通常、公開するディレクトリ(ドキュメントルートとするディレクトリ)のアクセス権限を下記のように与えてやれば、Webブラウザからのアクセスが可能になります。
例えば、
#2.2系 <Directory /var/www/html> Order Deny,Allow Deny from All </Directory> または #2.4系 <Directory /var/www/html> Require all granted </Directory>
とすれば
/var/www/html
配下がアクセス可能になるはずです。
勿論、OS側のアクセス権限も調整する必要がありますが、Directoryディレクティブを設定し、なおかつOS側のファイルアクセス権限も問題ないはずなのに、ブラウザで開くと何故かステータスコード403(Forbidden)が返され、コンテンツが見えない、といった事情が起こりました。
ドキュメントルートのディレクトリよりもさらに上のディレクトリに、実行権限がついてるかどうかを確認したり、権限を一括で書き換えたりなど行いましたが、一向にアクセスできず。
いろいろ調べたところようやく原因に多とりつきました。
SELinuxです。
SELinuxはアクセス制御を行うモジュールで、米国NSAがオープンソースで提供しています。
非常に強力なのですが、サーバーのように一般的によくアクセスされる場合は障害になることも多いので、基本的には無効にします。
ただ最近は、インストール時に既に無効になっているものも多いのですが、今回使ったCentOSの場合はデフォルトで有効になっていたようで、SELinuxが動いていることに気づかずにそのまま作業してしまっていました。
SELinuxの設定の確認は
getenfotce
とすると確認ができます。
無効化すは
setenfotce 0
でできますが、これだけだとOSを再起動した際に復活してしまうので、
/etc/selinux/conf
の
SELINUX=enforcing
の記述を
SELINUX=permissive
に変更しておきます。
これで、再起動時もSELinuxが無効のままにしておくことができます。
なんど設定しなおしてもうまくいかない…!という方は一度SELinuxの設定を確認してみてください。