今日は、Apache サーバー上でユーザー ディレクトリを構成してみます。難しい問題が発生しました。構成プロセス、問題、およびその解決策を以下にまとめます。
1. 従来の構成:
ユーザー Web を追加します。
ユーザーウェブを追加
パスワードウェブ
Web ユーザー ディレクトリに public_html ディレクトリを作成し、アクセス許可を 755 に設定します。
mkdir public_html
chmod 755 public_html -R
/etc/http/httpd.conf を変更します。
#
# UserDir: ユーザーのホームに追加されるディレクトリの名前
# ~user リクエストを受信した場合はディレクトリ。
#
# エンド ユーザー アカウントの「public_html」ディレクトリへのパスは次のようにする必要があります。
# Web サーバーのユーザー ID にアクセス可能 これは通常、~userid を意味します。
# 711 の権限が必要です、~userid/public_html には権限が必要です
# 755 であり、そこに含まれる文書は世界中で判読可能でなければなりません。
# それ以外の場合、クライアントは「403 Forbidden」メッセージのみを受け取ります。
#
# 関連項目: http://httpd.apache.org/docs/misc/FAQ.html#forbidden
#
<IfModule mod_userdir.c>
#
# UserDir は存在を確認できるためデフォルトでは無効になっています
システム上のユーザー名の # (ホーム ディレクトリに応じて)
# 権限)。
#
#UserDir を無効にする
#
# /~user/ へのリクエストを有効にしてユーザーの public_html を提供するには
# ディレクトリで、上記の「UserDir disable」行を削除し、コメントを解除します
# 代わりに次の行を追加します。
#
ユーザーディレクトリ public_html
</Ifモジュール>
2. テストすると問題が発生します。
http://127.0.0.1/~web
===============================
禁断
このサーバー上の /~web にアクセスする権限がありません。
さらに、ErrorDocument を使用してリクエストを処理しようとしたときに、403 Forbidden エラーが発生しました。
-------------------------------------------------- ----------------------------------
Apache/2.0.54 (Fedora) サーバー (127.0.0.1 ポート 80)
一般に、この問題が発生した場合に思い浮かぶのは、ディレクトリのアクセス許可の問題です。時間が経っても問題が解決されませんでした。この間、Selinux に問題があるのではないかと考えて調べてみましたが、何も変わりませんでした。 (後の事実は、直感が時々非常に正確であることを証明します。答えを見つけられるかどうかの違いは、多くの場合、直感をより深く掘り下げるかどうかです)。
3. 問題の解決策 Google で Apache 403 を長い間検索した後、ついに著者が私とまったく同じ問題に遭遇したことをブログで知りました。Apache の構成とディレクトリには問題はありませんでしたが、ページには問題があったのです。表示されない。解決策は、Selinux のアクセス制御を public_html に変更することです。
次のコマンドを使用してフォルダーのセキュリティ属性を変更します。
chcon -R -t httpd_user_content_t public_html/
4. 関連知識の要約:
Fedora Core 5 SELinux FAQ
http://fedora.redhat.com/docs/selinux-faq-fc5/#faq-entry-public_html Q: ユーザーの public_html ディレクトリを SELinux で動作させるにはどうすればよいですか?
A: このプロセスでは、Apache 構成ファイル /etc/httpd/conf/httpd.conf でユーザーのパブリック HTML ディレクトリが有効になっていることを前提としています。このプロセスでは、静的 Web コンテンツの提供についてのみ説明します。Apache HTTP および SELinux の詳細については、「」を参照してください。 http://fedora.redhat.com/docs/selinux-apache-fc3/。
~/public_html ディレクトリーがまだない場合は、それを作成し、提供するファイルとフォルダーをそこに追加します。
cd ~mkdir public_htmlcp /path/to/content ~/public_html
この時点で、httpd はコンテンツを提供するように構成されていますが、依然として 403 禁止エラーが表示されます。これは、httpd がユーザーのホーム ディレクトリに作成されるディレクトリとファイルのセキュリティ タイプを読み取ることができないためです。 -R オプションを使用して、フォルダーとその内容のセキュリティ コンテキストを再帰的に取得します。
ls -Z -d public_html/drwxrwxr-x auser auser user_u:object_r:user_home_t public_htmlchcon -R -t httpd_user_content_t public_html/ls -Z -d public_html/drwxrwxr-x auser auser user_u:object_r:httpd_user_content_t public_html/ls -Z public_html/- rw-rw-r-- ユーザー auser user_u:object_r:httpd_user_content_t bar.html-rw-rw-r-- ユーザー auser user_u:object_r:httpd_user_content_t baz.html-rw-rw-r-- ユーザー auser user_u:object_r:httpd_user_content_t foo.html
後で、ここで user_u に設定されている user フィールドが system_u に変更されることに気づくかもしれませんが、これは対象のポリシーの動作には影響しません。重要なフィールドは type フィールドです。
これで、静的 Web ページが正しく提供されるようになります。引き続きエラーが発生する場合は、system-config-securitylevel を使用して設定できるブール値が有効になっていることを確認してください。次に、「SELinux の変更」を選択します。ポリシー領域で、[HTTPD によるホーム ディレクトリの読み取りを許可する] を選択します。変更はすぐに有効になります。
使用されたコマンドの分析:
ls -Z -d public_html/
#ファイル/ディレクトリのセキュリティコンテキストを表示 -Z, --context
ほとんどのディスプレイに適合するようにセキュリティ コンテキストを表示します。-d、--directory はモード、ユーザー、グループ、セキュリティ コンテキスト、およびファイル名のみを表示します。
コンテンツの代わりにディレクトリ エントリをリストし、シンボリック リンクを逆参照しない
chcon -R -t httpd_user_content_t public_html/
#ファイル/ディレクトリのセキュリティ コンテキストを変更する -R, --recursive
ファイルとディレクトリを再帰的に変更します-t、--type
ターゲットセキュリティコンテキストでタイプ TYPE を設定します