Linux上のApacheでDocumentRoot以外の場所を参照できるようシンボリックリンクで接続したら、Forbiddenと表示されました。
Forbidden
You don’t have permission to access /user_dir/hoge.html on this server.
パーミッションや所有者をApacheに変更してみたり、色々試した結果SELinuxを無効にすることで正常に動作することを確認しました。
1 2 3 4 |
# setenforce 0 # getenforce Permissive # |
Permissiveになっていれば、SELinuxはモニタリング状態でありアクセス制御は掛かっていない状態になっています。
SELinux事態を無効(モニタリング状態)にしておくのは、あまり良いことではありません。
出来ればアクセス制御は正常に行われている状態にすべきです。
アクセスできない原因がSELinuxのアクセス制御に影響されることが確定されたら、以下の操作を行うことでこの問題を解決することが出来ます。
さて、一般にパーミッションの確認などをする際には、ls -laなど個人差はありますがlsコマンドを使います。
SELinuxコンテキストも同じように確認することが出来ます。
コマンドは以下になります。
1 |
# ls -Z [対象ファイル/ディレクトリ] |
通常のファイルはこんな感じです。
1 |
-rw-r--r--. root root unconfined_u:object_r:user_home_t:s0 hogehoge.txt |
さてSELinuxコンテキストを変更するには、まず最初に対象となるディレクトリに対して設定を行います。
1 |
# semanage fcontext -a -t httpd_sys_content_t "/user_dir(/.*)?" |
続いて、対象ディレクトリ内のすべてのファイルとフォルダーに対して設定を反映します。
1 |
# restorecon -R -v /user_dir |
対象ディレクトリ以下に多量のファイルがあると、時間が掛かる場合があります。
SELinuxを有効にします。
SELinuxの有効化は以下のコマンドを実行します。
1 2 3 4 |
# setenforce 1 # getenforce Enforcing # |
最後にブラウザで動作確認を行ってください。
これでもForbiddenが表示される場合は、上記の操作に問題があるか?本当にパーミッションが間違っていないか?確認してください。
ついでに確認方法を記載します。
上記でも記載したとおり以下のコマンドで確認します。
1 |
# ls -Z [対象ファイル/ディレクトリ] |
1 |
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 hogehoge.txt |
設定が変更されているのが解ると思います。