- ベストアンサー
apacheでmod_userdir.c
apacheを使っています。設定ファイルhttpd.confには LoadModule userdir_module modules/mod_userdir.so という記述があるにも関わらず、 $ httpd -lコマンドを実行しても、 mod_userdir.c が表示されていません。 これでは、httpd.conf中に、 UserDir /home/*/public_html を記述しても、public_htmlにアクセスされても Pages not found となってしまいます。 mod_userdir.cを組み込む方法をご教授ください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> 今度は、 > Forbidden > You don't have permission to access ~ > というエラーが出てしまいました。 > > 対象のディレクトリやファイルは > chmod 755 > としているのでアクセス権はあるはずなのですが・・・。 うむすばらしい。一歩前に進んだじゃないか。さて、クライアント側にこいつ(403)が返る時、原因は2つある。 1.apacheがファイルシステムにアクセスできない。 質問者が言っているchmod 755のことで、確実に755になっているのであれば問題ない。が、ひょっとしたら/home/mksa/public_htmlは755だけど、/home/mksaが700になっていて、そっちで弾かれているという可能性もある。この辺も、ネット上に「/home/mksa/public_htmlが755ならその親がどうであろうと関係ない」という情報も流れているが、私個人は親が700だったらダメなんじゃないかなぁと思う。 ちなみにapacheは普通ユーザーnobodyさん辺りが所有するプロセスになるため、ユーザーmksaが所有するファイルから見ればothersになる。 ところで、今/home/mksa/public_htmlも/home/mksaも755じゃないといけないと言ったけど、そうすると一般ユーザーがお互いのhomeを見れる事になるので、実際にシステムを構築する際には/var/www/users/*/public_htmlなどとhome以外を使うというのも手だ。 2.apacheの設定でクライアント(Webブラウザ)にアクセスさせない。 これはhttpd.confで<Directory>ディレクティブや<Location>ディレクティブの設定によりアクセス制御を行うもので、例えば ~~~~~~~~start <Directory /> order deny,allow deny from All </Directory> UserDir /home/*/public_html ~~~~~~~~end となっていると、ファイルシステム全体が全て拒否されている状態で/home/mksa/public_htmlもその庇護下に置かれる。 ~~~~~~~~start <Directory /> order deny,allow deny from All </Directory> UserDir /home/*/public_html <Directory "/home/*/public_html"> order deny,allow deny from All allow from All </Directory> ~~~~~~~~end として、ユーザーごとのディレクトリー以下は基本全て許可するという風に設定してみると良い。ただ、大抵のディストリビューションの標準のhttpd.confはこの辺りは最初から設定されていると思うんだけどね。 これでも403になるようなら、apacheが吐き出すアクセスログを調べてみると良いだろう。
その他の回答 (3)
- cynthia4
- ベストアンサー率51% (186/358)
user 名 が mksa ならば # chmod o+x /home/mksa とすれば良いはずですが。
- cynthia4
- ベストアンサー率51% (186/358)
# httpd -l Compiled in modules: core.c prefork.c http_core.c mod_so.c # httpd -M --------------------- --------------------- speling_module (shared) userdir_module (shared) alias_module (shared) rewrite_module (shared) ------------------------ $ man httpd -l Output a list of modules compiled into the server. This will not list dynamically loaded modules included using the LoadModule directive. public_html の 下に、index.html が有れば 特に問題はないと思うし、問題は無かった。
- anmochi
- ベストアンサー率65% (1332/2045)
$ httpd -l というコマンドは、Apache 1.3.4~、Apache 2.0.x、Apache 2.2.xの場合、「httpdという実行ファイルの中に直接埋め込まれている*.cを表示する」ものだ。なので、LoadModuleで動的にロードするモジュールの*.cは表示されない。変わりに $ httpd -M とすると、ロードされるモジュールが全て表示される。この時、右にstaticと書かれているものが、先ほどのhttpd -lで表示されたものと一致しているはずだ。LoadModuleで動的にロードされるモジュールはsharedと書かれているだろう。このsharedの中にuserdir_moduleがあれば、mod_userdirは正しく動的に組み込まれている事になる。 UserDir /home/*/public_html というディレクティブが設定されている場合、そのOS中にmksaというユーザーが居たとして、OS自身から http://127.0.0.1/~mksa/public_html ・・・(1) にアクセスしてるなんて事はないよね? http://127.0.0.1/~mksa/index.html にアクセスすると/home/mksa/public_html/index.htmlを返すので、(1)だと/home/mksa/public_html/public_htmlを探しにいってNot Foundになる。ブラウザでURLを正しく打ってるのにダメとなるとhttpd.confがおかしい事になるのでもう一度確認されたし。
補足
ご回答ありがとうございます。今度は、 Forbidden You don't have permission to access ~ というエラーが出てしまいました。 対象のディレクトリやファイルは chmod 755 としているのでアクセス権はあるはずなのですが・・・。