一般ユーザのウェブ表示 †Apache の設定 †一般ユーザのウェブを公開するには Apache の設定ファイルである httpd.conf の調整、ディレクトリの作成が必要です。加えて SELinux を有効にしている場合、一般ユーザのウェブ表示を行うときには注意が必要です。 httpd.conf の 340 行目前後を書き換えます。 <IfModule mod_userdir.c> # # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # UserDir disable # # To enable requests to /~user/ to serve the user's public_html # directory, remove the "UserDir disable" line above, and uncomment # the following line instead: # #UserDir public_html </IfModule> 【 UserDir disable 】と初期状態では一般ユーザのウェブ表示が不許可です。 変更後) <IfModule mod_userdir.c> # # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # #UserDir disable # # To enable requests to /~user/ to serve the user's public_html # directory, remove the "UserDir disable" line above, and uncomment # the following line instead: # UserDir public_html </IfModule> また、この状態ではウェブの公開ができても CGI や SSI の許可がされません。.htaccess を扱うことができるように 360 行目前後を適時書き換えます。以下は設定例です。 <Directory /home/*/public_html> AllowOverride All Options MultiViews -Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory> httpd.conf の編集が終わったら Apache の再起動を実行し、設定を反映させます。 # /sbin/service httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ] ディレクトリの確認 † 次にユーザディレクトリのパーミッションを確認します。 # chmod o+x /home/アカウント名 こちらのコマンドを実行して、「その他」のユーザ権限に対して「実行(x)」を許可します。 次に公開用ディレクトリを作成します。 $ mkdir public_html $ echo test > public_html/test.html あとはブラウザから http://192.168.11.253/~アカウント名/test.html として表示できる事が確認できれば問題ありません。 SELinux 導入時の注意点 †もし SELinux が有効になっている場合は【 Forbidden 】とエラーが出てしまいます。You don't have permission to access 対象ファイル、のエラーです。 Apache のエラーログにも以下のような記録が残ります。 [Sun Jun 19 21:05:42 2005] [error] [client 192.168.11.102] (13)Permission denied: access to /~akane/test.html denied 原因は SELinux の【 タイプ遷移 】によるセキュリティーポリシーの制限を受けるからです。SELinux では新しくディレクトリを作成すると、その親ディレクトリのセキュリティコンテキストを継承します。 $ ls -lZ こちらのコマンドを実行すると、ディレクトリ内のセキュリティコンテキストが表示されます。以下は akane アカウントのホームディレクトリ「 /home/akane 」のリストです。 $ ls -alZ /home/akane/ drwxr-xr-x akane users root:object_r:user_home_dir_t . drwxr-xr-x root root system_u:object_r:home_root_t .. -rw-r--r-- akane users user_u:object_r:user_home_t .bash_logout -rw-r--r-- akane users user_u:object_r:user_home_t .bash_profile -rw-r--r-- akane users user_u:object_r:user_home_t .bashrc -rw-r--r-- akane users user_u:object_r:user_home_t .canna -rw-r--r-- akane users user_u:object_r:user_home_t .emacs -rw-r--r-- akane users user_u:object_r:user_home_t .gtkrc drwxr-xr-x akane users user_u:object_r:user_home_t .kde -rw-r--r-- akane users user_u:object_r:user_home_t .zshrc drwxr-xr-x akane users user_u:object_r:user_home_t public_html public_html には user_u:object_r:user_home_t というセキュリティコンテキストが割り当てられています。apache ではルール上、public_html を表示出来ません。 # /sbin/ausearch -m AVC こちらのコマンドを実行して SELinux のログを見ると、実行できない旨のエラーが確認できます。 time->Sun Jun 19 21:05:42 2005 type=AVC msg=audit(1119182742.782:6278950): avc: denied { getattr } for pid=6090 comm="httpd" name=public_html dev=dm-1 ino=5625101 scontext=root:system_r:httpd_t tcontext=user_u:object_r:user_home_t tclass=dir type=SYSCALL msg=audit(1119182742.782:6278950): arch=40000003 syscall=196 success=no exit=-13 a0=95e58a0 a1=bfca1564 a2=32cff4 a3=bfca1564 items=1 pid=6090 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 comm="httpd" exe="/usr/sbin/httpd" type=AVC_PATH msg=audit(1119182742.782:6278950): path="/home/akane/public_html" type=PATH msg=audit(1119182742.782:6278950): item=0 name="/home/akane/public_html" inode=5625101 dev=fd:01 mode=040755 ouid=501 ogid=100 rdev=00:00 Fedora Core 4 では予め /home/ユーザ名/public_html に対するセキュリティコンテキストが設定されています。/sbin/restorecon コマンドを用いて、public_html へ適切なラベルを割り当てなくてはいけません。 今回の例では /home/akane/ 以下を適切にラベル割り当てをしたいので、 $ /sbin/restorecon -R /home/akane このようにコマンドを実行します。コマンド実行後、再度 ls に Z オプションをつけてセキュリティコンテキストを確認すると、次のようにセキュリティコンテキストの"タイプ"が先ほどの「user_home_t」から「httpd_user_content_t」に変更されている事が確認できます。 # ls -alZ /home/akane/ drwxr-xr-x akane users root:object_r:user_home_dir_t . drwxr-xr-x root root system_u:object_r:home_root_t .. -rw------- akane users user_u:object_r:user_home_t .bash_history -rw-r--r-- akane users user_u:object_r:user_home_t .bash_logout -rw-r--r-- akane users user_u:object_r:user_home_t .bash_profile -rw-r--r-- akane users user_u:object_r:user_home_t .bashrc -rw-r--r-- akane users user_u:object_r:user_home_t .canna -rw-r--r-- akane users user_u:object_r:user_home_t .emacs -rw-r--r-- akane users user_u:object_r:user_home_t .gtkrc drwxr-xr-x akane users user_u:object_r:user_home_t .kde -rw-r--r-- akane users user_u:object_r:user_home_t .zshrc drwxr-xr-x akane users user_u:object_r:httpd_user_content_t public_html 少々面倒ですが、SELinux を有効にして一般ユーザのウェブ表示を行うときには注意が必要です。 |