やりたいことは、
ブラウザからhttp://190.xxx.xxx.3/~taro/index.html にアクセスしたら、
/home/taro/public_html/index.html が表示されるようにしたいのですがエラーが表示されます
[error]404エラー
File does not exits: /home/taro/public_html/index.html が表示されます
環境:
[サーバ]
OpenBSD3.8
Apache1.3.29
[クライアント]
winxp home
[作業した手順]
1.OpenBSD3.8をインストール
2.adduserでtaroを追加
#adduser -home /home
Name: taro
Group: taro
HOME: /home/taro
3./var/www/conf/httpd.confの設定
ServerRoot "/var/www" ←defaultの設定
User www ←defaultの設定
Group www ←defaultの設定
DocumentRoot "/home"
<Directory "/home">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
UserDir "/home/*/public_html"
<Directory "/home/*/public_html">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
4.apacheの起動
#apachectl configtest
Syntax OK
#apachectl start
/usr/sbin/apachectl start: httpd started
どうすれば/home/taro/public_html/index.htmlが表示されるようになるのでしょう??
なにかヒントをいただければ助かります。
ファイルそのものは、/home/taro/public_html/index.htmlに確かに存在するのでしたら、ファイルindex.htmlとその上のディレクトリpublic_htmlのアクセス権を確認してください。
Apahceは、設定からuser:www group:wwwで動作し、あなたのユーザはuser:taro group:taroで作られているので、アクセス権のotherの読み込み権がある必要があります。
確認の仕方は、
ls -l /home/taro
で出てくるpublic_htmlの行の一番左側が
drwxr-x--- 3 xxxx xxxx 102 Apr 21 17:13 public_html
のパターンでなく
drwxr-xr-x 3 xxxx xxxx 102 Apr 21 17:13 public_html
になっていることを確認し、これがOKなら同様に
ls -l /home/taro/public_html/index.html
で
のパターンでなく
になっていればOKです。
もしNGのパターンになっていたら、chmodコマンドを使って、public_htmlなら
chmod 755 /home/taro/public_html
で、index.htmlなら
chmod 644 /home/taro/public_html/index.html
で変更できます。
うちの Vine + Apache1.3.31 では
UserDir "/home/*/public_html"
のところが
UserDir public_html
になってますが?
ご指摘のように
UserDir public_htmlにしてみましたが、
やはり404エラーが出ます。
[error]File does not exist: /home/~taro/index.html
がエラーログに表示されております。
また、上記の1番の返信に"すべてに対して
chmod 644を実行しました。"は755の間違いです。
http://httpd.apache.org/docs/2.0/ja/mod/mod_userdir.html
UserDirの記述ですね。
UserDir public_html
の記述でいけると思います。
2の返信に書きましたとおりのエラーが出てしまします。
UserDir "/home/*/public_html" を
UserDir "public_html" に変更して下さい。
やはり2の返信に書きましたとおりの404エラーがでます。
何が原因なのでしょうか??
http://hotwired.goo.ne.jp/webmonkey/2002/46/index3a.html
HTTPエラー404はファイルが見つからないというエラーですので、情報から判断すると
[error]404エラー
File does not exits: /home/taro/public_html/index.html
が表示されるのでファイルが見つかっていないようです。
大文字小文字とかの不一致はないですか?(単純なことなんですが・・・)
http://www.xxxxxxx.xx/index.html
なら表示するが
http://www.xxxxxxx.xx/Index.html
は表示しないような現象は起こるんですが。一度確認してみてください。
ご指摘のとおり今一度確認いたしましたが、
/home/taro/public_html/index.html
は実際に存在し、すべて小文字であることを確認いたしました。
いまだに原因がつかめないでいます。
素人が使いこなせるOSではないことはよくわかっているのですが興味があっていじくっております。ゴールデンウィーク期間中になんとか、Apacheの設定だけでも終わらせることを目標としておりますが、行き詰まってしまいました。
(このサーバの公開を予定しているわけではありません。とてもそんな能力がありません。そのあたりはご心配なくよろしくお願いします。)
何かヒントになる書き込み等ご存知でしたらお知らせいたければたすかります。
モジュールが有効になっていないのでは?
LoadModule userdir_module modules/mod_userdir.so
または、
LoadModule userdir_module libexec/apache/mod_userdir.so
AddModule mod_userdir.c
1.3系が試せる環境がないのですが、2.x系だと、server-infoで有効になっているモジュールが確認できます。
有益な情報たすかります。
参考ページにありましたように、
#httpd -l をためしたところ
mod_userdir.cが確認できました。
また、server-infoはモジュールがインストールできていないらしく、機能しませんでした。
また、http://httpd.apache.org/docs/1.3/mod/mod_alias.html#alias
これかなとおもい、
Alias /~taro /home/taro/public_html
としてみましたが、
404エラー[error]File does not exist: /home/taro/public_html/index.html
が出ました。
taro以下のファイルを/var/www/htdocsいかに配置した場合は、(Documentツリー内というのでしょうか?)正常にindex.htmlが表示されるのですが、/homeいかに配置したばあい、表示されません。
[追加]
http://190.xxx.xxx.3/~hanako/index.htmlが表示される環境
#adduser -home /var/www/htdocs
Name: hanako
Group: hanako
HOME: /var/www/htdocs/hanako
#cd /var/www/htdocs/hanako でhanakoのディレクトリが作成されているのを確認。
#mkdir public_html
#chmod 755 public_html
#cd public_html
#vi index.html
<HTML><HEAD></HEAD><BODY>
hanako page
</BODY></HTML>
#chmod 644 index.html
/var/www/conf/httpd.confファイルの修正
ServerRoot "/var/www" ← defaultのまま
User www ← defaultのまま
Group www ← defaultのまま
DocumentRoot "/var/www/htdocs" ← defaultのまま
UserDir public_html
Alias /~hanako /var/www/htdocs/hanako/public_html
以上のように修正して,
#apachectl configtest
Syntax OK
#apachectl start
として、LANでつながったクライアントのWinXPのブラウザから
http://190.xxx.xxx.3/~hanako/index.html
とするとhanako pageのHTMLが表示されます。
っと、ここでおもったのですが、
Alias /~hanako /var/www/htdocs/hanako/public_html
これを入れないと404エラーになるんです。
[error]File does not exist:/htdocs/~hanako/index.html
ということは、mod_userdirの動作がおかしいというか動作していないことになるんでしょうか??
ということは、mod_aliasによって表示されていることになるんでしょうか?
でも、#httpd -l とすると
mod_userdir.cがきっちり表示されているのですが?いったい何なんでしょう??
/var/www/htdocs に移したら見る事が出来る
とありましたが、どうやってアクセスしたのですか?
サイトのホームディレクトリは /home のはずでは?
ディレクトリ名を(”)で括っているのが気になります。
まずは、基本からチェックしましょう。
(コメント等からわかる事もありますが)
1. オリジナルの httpd.conf に替えて、(httpd)サーバを再起動し、 http://190.xxx.xxx.3/ へのアクセスでapacheのテストページが表示されますか?
2. 変更後の httpd.conf に替えてサーバ再起動後、 http://190.xxx.xxx.3/ へのアクセスはどうなりますか?
/home に何も用意していなければ403エラーが表示されるか、ディレクトリが表示されるものと思います。
/home にテスト用の index.html を用意しておくとよいと思います。
都合があるかもしれませんが、 DocumentRoot は、/home/www とでもして、他のユーザディレクトリと分けておいた方が見苦しくないでしょうね。
3. 1と同じ表示(キャッシュが残っているので再読込が数回必要かもしれませんが)になる場合はh httpd.conf の変更が反映されていません。文法的なエラーがあるかもしれません。(質問文から、OKなようですが。)システムのログ、あるいはエラーログに何かヒントがあると思います。
サーバが機能している事がわかったら、ユーザのホームページについて調べます。
4. 「質問2」のコメントのログだと、OS上に taro が登録されていない事が疑われます。
su taro とするとか /etc/passwd を調べるかして登録されている事を確認してください。
5. ユーザのホームディレクトリ(今回は/home/taro)のパーミッションは、701 以上が必要。(OKですね)
6. mod_userdir が有効になっているか確認する(OKですね)
UserDir/home/*/public_html の指定はフルパスでもいいようですね。
これとその後の <Directory /home/*public_html>の記述を合せます。
ここまで来れば、大抵taroのホームページを見る事が出来るはずなんですが。
OpenBSD は使った事が無い(RedHat と Vine だけしかない)のですが、Linuxはそんなに難しいOSでは無いと思います。
少なくても、Vine ではhttpdサーバのインストールはコマンド一発で、ユーザの設定も躓いたのはパーミッションだけでした。
いろいろご指摘していただいてありがとうございます。表示できる場合は[6]の返信に書かせていただきました。
私も、混乱していて、あと、httpd.confファイルもぐちゃぐちゃになってきましたので、OSを再インストール、一から設定しなおしてみました。
OSインストール
#adduser -home /home
Name: taro
Group: taro
HOME: /home/taro
#cd /home/taroに移動、ディレクトリが作成されているのを確認。
taro以下にpublic_html/index.htmlを作成
home 755,taro 755,public_html 755,index.html 644を設定して確認
httpd.confファイルの設定
ファイルの設定をもう一度おこなってみました。
ServerRoot "/var/www" ←defaultの設定
User www ←defaultの設定
Group www ←defaultの設定
DocumentRoot "/home"
UserDir public_html
以上のように編集し、一番最初に記入した<Directory>~</Directory>
などは一切記入しない状態で保存。
#apachectl configtest
Syntax OK
#apachectl start
でブラウザからアクセス
http://190.xxx.xxx.3/~taro/index.html
404エラー
[error]File does not exist:/home/~taro/index.html
6の返信にも書きましたが、mod_userdirが正常に動作していないように思えてきました。
#find / -name '*.so' | more
としてみても、
mod_userdir.soは見つからりませんでした。
mod_userdir.cも同様にして探してみましたが、見つかりませんでした。
ただ、#httpd -lをすると
mod_userdir.cがきっちり表示されてるんですが。
Apacheのサイトから1.3.x用のmod_userdir.soとmod_userdir.cの最新版をダウンロードすることはできるのでしょうか??
[追加:質問の答え]
1. 何も手を加えていないdefaultのhttpd.confの状態で、ブラウザからhttp://190.xxx.xxx.3/にアクセス。アパッチのテスト画面が表示されることを確認。
2.httpd.conf修正。/homeにindex.htmlを作成chmod 644する。ブラウザからアクセス。http://190.xxx.xxx.3/
404エラー[error]File does not exist:/home/
3.#apachectl configtest
Syntax OK
#apachectl startしております。
4.su taro , su hanako どちらもプロンプトの前の#が$に変わりユーザが変更されている模様です。su kintaroとadduserしていないユーザ名で試してみるとsu: unknown login kintaroになります。
5.OKです。
6.httpd -lでmod_userdir.cが表示されている。
Userdir public_htmlとしています。
<Directory /home/*/public_html>の記述は削除しております。
以上のような状態です。
せっかくのご指摘に対しての回答が遅くなってしまいました。ごめんなさい。
いまだに原因がはっきりしません。
mod_userdirが動作していないように見えるのですが、また、いろいろ試してみます。
2度目です。
httpd -lで見れるのは、動的モジュールとしてではなく、組み込みでインストールされているモジュールです。なので、findで探しても出てきません。
ということは、
LoadModule userdir_module modules/mod_userdir.so
まではOKということと同じです。
"AddModule mod_userdir.c"が効いてない様な感じに見れますね。
UserDir disabled
という記述が有ると無効になるようですがないですよね?
繰り返しになりますが、server-infoで有効になっているモジュールとその設定が確認できると思うので、紹介しておきます。
LoadModule info_module libexec/apache/mod_info.so
AddModule mod_info.c
も必要です。LoadModuleは組み込みで入っているなら要らないです。
お世話になっております。
ご指摘の、UserDir disabledの件ですが、
#でコメントアウトしてあるのを確認しました。
コメントアウトするだけではだめなのか?と思い、UserDir disabledを削除し、
#apachectl stop
#apachectl configtest
#apachectl start でブラウザからアクセスしましたが、404エラーです。
また、明示的にユーザを指定する方法もあるようですので、
UserDir enabled taro
UserDir public_html
の部分だけを変更し、あとはすべて返信7の環境での場合もだめでした。
404エラー[error]File does not exist:/home/~taro/index.html
hanakoの場合の返信6の環境でも、
UserDir enabled hanako
UserDir public_html
の部分を変更し以下Aliasの部分をコメントアウトしてみました。が404エラーです。
#Alias /~hanako /var/www/htdocs/hanako/public_html
[error]File does not exist: /htdocs/~hanako/index.html
やはり、Aliasを書かないと/var/www/htdocs/hanako/public_html/index.html
のhanako以下のフォルダを探しにいっていないようです。
やはり、組み込まれているmod_userdir.cの動作がおかしいのかもしれません。
ですので、apacheのサイトからmod_userdir.cとmod_userdir.soをダウンロードして、
サーバの適切な場所にこの2つのファイルを配置して、
先ほどkai10さんがご指摘の
LoadModule userdir_module modules/mod_userdir.so
または、
LoadModule userdir_module libexec/apache/mod_userdir.so
AddModule mod_userdir.c
をhttpd.confファイルに記入すれば(探してみましたが、現在はどこにも書かれていません記入するとSyntax errorがでます)、ひょっとして動作するかと思いまして、
先ほどからApacheのサイトをみにいっているんですが、いまだ見つかっておりません。
がんばって探してみます。
その後いろいろやってみたら、
httpd.confのなかにchrootに関することがかかれていて、chrootについて調べてみたら、しっかりマニュアルに書いありました。
恥ずかしい限りです。
まだ、意味がよくわかってないのですが、どうもDocumentRootを/homeにおいても動作しないような仕組みになってる模様です。
もうちょっと勉強しなおします。http://www.openbsd.org/faq/faq10.html#httpdchroot
回答ありがとうございます。
書き忘れたのですが、
インストール時にパーティションわけしております
a: / 4GB
b: swap 4GB
e: /tmp 4GB
f: /var 4GB
g: /usr 16GB
h: /home 80GB
早速ですが、ls -lで確認した結果を書きます。
[home]
#ls -l /
drwxr-xr-x 7 root wheel 512 Apr 27 22:58 home
[/home/taro]
#ls -l /home
drwxr-xr-x 2 taro taro 512 Apr 22 21:15 taro
[/home/taro/public_html]
#ls -l /home/taro
drwxr-xr-x 2 taro taro 512 Apr 22 21:16 public_html
[/home/taro/public_html/index.html]
#ls -l /home/taro/public_html
-rwxr-xr-x 1 taro taro 51 Apr 22 21:16 index.html
この状態でよろしいんでしょうか??
念のため home,taro,public_html,index.html
すべてに対して
chmod 644を実行しました。
httpd.confは上記に書いたとおり、手を加えない状態で、ブラウザからhttp://190.xxx.xxx.3/~taro/index.htmlにアクセスしてみましたが、404エラーが出ます。
[error]File does not exist: /home/taro/public_html/index.html
これはアパッチの記述の問題なのでしょうか?OpenBSDの固有のセキュリティみたいなものが関係しているのでしょうか??