• ベストアンサー

public_htmlについて

turbolinux server7.0でapacheの設定をしているんですが、ユーザwebuserのホームディレクトリにpubulic_htmlを作成し,適当なindex.htmlを置きました。 /home/webuser/public_htm/index.html です。 srm.confに UserDir public_html を追加すると http://ホスト名/~webuser/index.html でアクセスできますよね。 (ここまではよくすることですよね) ここから質問なんですが、 /home/webuser フォルダのアクセス権に その他 → “入る"のアクセス権をチェックしないとブラウザからアクセス権なしのエラーが返ってきます。 他人へは /home/webuser/public_htm/以下のみにアクセス権を与えたいのに、/home/webuser/の段階で“入る"のアクセス権の許可をしないといけないんでしょうか? NTや2000ならこんなこと無いのに・・・ これってLinuxの仕様ですか? ※ちなみに“入る”のアクセス権の意味を正確に理解できていません。(Linuxは初心者です)

質問者が選んだベストアンサー

  • ベストアンサー
  • selenity
  • ベストアンサー率41% (324/772)
回答No.5

どうやらIISはカレントディレクトリのパーミッションしか見ていない様子ですね。 失礼しました、、、というより非常にびっくりでした、、、 ただ、基本的には上位ディレクトリにアクセス権が無ければ下位ディレクトリに移動できないのが普通のアクセスコントロールに対する考え方だと思います。 これは「Linuxの仕様」というよりも「UNIX一般のアクセスコントロールの考え方」といったほうが正しいでしょう。 NTFS+IISならディレクトリ名さえ分かっていれば(既知ならば)、途中のディレクトリのアクセス権に関らず、目的のファイルにアクセスできるという事を意味します。かなり危険な気がしますよ。 (注:もちろん対象のファイルにアクセス権が無ければ開けませんが、そのディレクトリには移動可能です) 個人的に言えば「IISの挙動の方が非常に変」といった所でしょうか、、、 IISは、通常[IUSR_XXXX]というアカウントでアクセスしています。もし、アクセス権が無いディレクトリ/ファイルへアクセスしようとした際は、クライアント側のブラウザがIEなら、パスワード入力ダイアログボックスを開いてきます(ApacheのBasic認証のようなダイアログボックスです)。このダイアログボックスにNT/W2k上(IIS上)の実在するアカウント名を入力すれば、今度はその入力されたユーザ権限でアクセスするという奇妙な仕様になっています。 > できるとすれば根本的にIIS(NT)とApache(linux)は > 考え方が異なるという事になると思います。 そうですね。両者は明らかにアクセス権に対する考え方は異なりますね。 まぁ、この件は良い悪いの問題では無いので「どちらの挙動が普通か?」と問われれば「UNIXの挙動の方が普通だ」という回答をします。

holydevil
質問者

お礼

そうですよね。 やっぱりIISとApacheは考え方違いますよね。 なんかホッしました。 今思うのは、apache(UNIX)の考え方のほうがシンプルで管理しやすいということです。IISアクセス権の考え方はMSの共有フォルダの考え方を引きずっているからでしょうか。(きっとそうでしょうね) ありがとうございました。

その他の回答 (4)

  • Fooky
  • ベストアンサー率71% (59/82)
回答No.4

> このIISの実行ユーザの変化によってクライアントからアクセスが > できたりできなかったりする事はない ほんとうにそうですか?それはIISを自分のユーザアカウントで 実行してもAdministratorしかアクセスできないフォルダが 公開されてしまうということですよ。これは重大なセキュリティ設計上の 欠陥ですから、さすがにあの会社でもそれはないと思うんですがねぇ。 もしそうなら、Apacheはデフォルトではそうなっていないので、 この点は違いますね。ただ、Linuxでもそのようなアプリケーションを つくることは可能です。 あと、先程の最後にも書きましたが、ApacheはHTTPのサーバなので、 クライアントがどのユーザか、ということは関知しません。これは、 HTTPに関して言えば、IISも同じはずです。だってユーザ名を 送るようになってない同じブラウザでIISにもApacheにも接続できるん ですから。 例えばwww.goo.ne.jpに接続してユーザ名を聞かれないのは、 anonymousログインをしているのではなく、そもそもログインという 行為がないのです。 ただ、一部のホームページにユーザ認証がかかっていることがありますが、 これはシステムに存在するユーザアカウントとは独立のパスワードデータ ベースを使って認証が行われます。したがって、ディレクトリの所有者とは 関わりがなく、相変わらず実行ユーザであるnobodyがアクセスできる とこしかアクセスできません。 IISで、HTTPでのユーザ認証にOSに登録されてるのと同じアカウントが 使われるのか、という点は知りません。 クライアントのユーザ名が重要になるのは、FTPのときです。これは Linuxでは全く別のプログラムで管理されています。したがって、 相違点の2つ目としては、apacheはIISのようにHTTPとFTPを一緒に サービスするということはしない、ということですね。 あと、もちろん、DocumentRoot(このディレクトリより下の ディレクトリだけを公開する)は設定するので、実行ユーザを rootにしたとしても、DocumentRoot以下が全て見えるというだけで、 それより上の階層のディレクトリは見えません。

holydevil
質問者

お礼

非常に詳しくありがとうございました。 IISではDocumentRoot以外を公開する場合、 まず、公開するディレクトリを選択します。 で、そのディレクトリにAliasをつけます。 次に、そのディレクトリはanonymous接続許可するかどうかを選択します。 ■anonymous許可とした場合 IISはそのフォルダのアクセス権でIUSR_SEVERNAMEアカウントに読み込み権限があるか調べます。あった場合、全てのユーザは認証なしでアクセスが可能となります。 ■anonymous許可しないとした場合 IISはそのフォルダのアクセス権を調べます。クライアントがネットワークにログインしたとき(起動したとき)のID/PWが、アクセスされるフォルダに設定されたアクセス権と一致しておればパススルーでアクセスできます。もし、一致しなければ認証画面が出てきます。 この流れからみて、ApacheとIISはどう考えても仕様が異なると思います。 正直言ってIISよりApacheのほうが自然なアクセス制御だと思いますし、シンプルですね。

  • Fooky
  • ベストアンサー率71% (59/82)
回答No.3

IISはいじったことが無いし今後もいじるつもりも全く無いので推測ですが、 問題はサーバ(IIS or apache)の実行ユーザの問題ではないですか? > folder_Aを作成してAdministratorのみフルコン設定 というのは、他のユーザは全て読み取り禁止ってことですよね。 Administratorのみフルコンで後は読取りのみとかではないですね? (そうじゃないと、/home/webuserが他者に読み取り許可を 与えていない設定になっていることと比較する意味が無い) IISの実行ユーザがAdministratorsグループのメンバー(または Administrator自身)であるために、Administratorしか 読めないフォルダが読めてるだけじゃないですか? もちろん、apacheの実行ユーザを管理者(root)にすれば、どの ディレクトリでも読めるのでこの問題は発生しません。ただ、全く 推奨できる設定ではないです。万一セキュリティホールによって apacheが乗っ取られた場合、apacheがroot権限を持っていれば システム領域の破壊が簡単にできてしまいます。こういうことを 防ぐために、apacheはデフォルトで単なる一ユーザよりもさらに 制限されたユーザ(nobody)で実行されるようになっています。 IISでも同じことが言える、というかセキュリティホールの発見 頻度から見てさらに危険で、IISをAdministratorsグループで 実行するのは致命的でしょう。 > これだと、ブラウザからは誰でも接続できます。 認証はまた別の問題で、FTP認証はFTPサーバがやります。HTTPの 認証はapacheがやりますが、それはLinuxのユーザとは全く独立で、 ファイルのアクセス権とは無関係です。

holydevil
質問者

補足

> >folder_Aを作成してAdministratorのみフルコン設定 >というのは、他のユーザは全て読み取り禁止ってことですよね。 もちろんそうです。 IISの実行ユーザはデフォルトでは“system”アカウントを使用します。ただ、このIISの実行ユーザの変化によってクライアントからアクセスができたりできなかったりする事はないと思います。 LINUXの場合、apacheの実行ユーザを管理者(root)にした場合、どのユーザ(ブラウザ)からも全てのディレクトリにアクセスできるのですか?できるとすれば根本的にIIS(NT)とApache(linux)は考え方が異なるという事になると思います。

  • selenity
  • ベストアンサー率41% (324/772)
回答No.2

基本的に上位ディレクトリにアクセス権が無ければ、いくら下位ディレクトリにアクセス権があってもアクセスできないのは、普通だと思いますよ。 apacheは通常[nobody]ユーザとして動いているのでアクセス権的には「その他」に分類されます。 > NTや2000ならこんなこと無いのに・・・ Win2kでもNTFSを使っていれば同じことです。 "入る"のアクセス権はディレクトリに対しては「サブディレクトリへの移動の権利」を表しており、ファイルに対しては「そのファイルを実行する権利」を意味しています。

holydevil
質問者

補足

ありがとうございます。 ただ >> NTや2000ならこんなこと無いのに・・・ >Win2kでもNTFSを使っていれば同じことです。 の部分は納得行かないです。 NTやW2Kの場合、以下のように folder_Aを作成してAdministratorのみフルコン設定 folder_Aのサブディレクトリにfolder_BをEveryoneフルコン設定 folder_Bの中にindex.htmlを作成 folder_BをIISで公開 IISではfolder_BにAnonymous接続許可する これだと、ブラウザからは誰でも接続できます。 だから,NTやW2Kとは考え方が異なると思うのですが・・・。(少なくともブラウザからのアクセスに関しては)

  • Fooky
  • ベストアンサー率71% (59/82)
回答No.1

そりゃそうでしょう。 ディレクトリは階層構造になってるんですから。 /home/webuserに入れないってことは、 そこから下の階層には一切、入れません。 例えば会社という組織を考えると、「企画部第一庶務課」という 部屋に行きたい人は、その会社のビルの入り口の立ち入り許可を もらって、さらに企画部のフロアの立ち入り許可をもらって、 としないと、その課まではたどり着けないでしょう。窓から 縄梯子でも下ろさない限り。 このケースでも縄梯子を下ろす手があると言えばあるんですけどね。

holydevil
質問者

お礼

早速のご回答ありがとうございます。 やっぱりそうなんですか。 これだと、NT、2000に比べるとアクセス権のしくみは非常にシンプルですね。 その代わり、複雑なアクセス制御は基本的にはできないということでいいのでしょうか?

関連するQ&A

  • apache1.3でのUserDir設定について

    apache1.3.37を使用してます。 httpd.confを下記のようにして、UserDirを有効にしてます。 <IfModule mod_userdir.c> UserDir /home/*/public_html/index.html <Directory /home/*/public_html> AllowOverride All </Directory> </IfModule> ※UserDir関連では上記以外変更してません。 この設定で、http://www.xxxx.jp/~useridを開き /home/userid/public_html/index.htmlは表示されるのですが、 画像ファイル等だけ、DocumentRootに指定したディレクトリを 見に行ってしまいます。(エラーログにて確認) 当然、画像はDocumentRootで指定したディレクトリではなく 、/home/userid/public_htmlに入ってるので表示されず ×マークになります。 画像ファイル等も/home/userid/public_html直下から参照したいのですが どのようにすれば良いでしょうか? 設定が不足してるのでしょうか? また、/home/userid/public_html配下にcgiと言うディレクトリを 作成し、CGIを動作させたいのですが、その場合どのような設定を 追加すればよいのでしょうか? よろしくお願いします。

  • apache2でユーザーディレクトリが

    apache2でユーザーディレクトリを使いたいんですが ただのapacheではデフォルトでユーザーディレクトリがつかえるんですが 403でパーミッションを直して使えて apache2でいろいろ apache2.confなどにuserdir.cなどのモジュールを読み込ませたり sites-avalias/defaultに /home/*/public_htmlなど試してみたいんですが ダメみたいです ちょっと省略していますが ちなみにバージョンはApache/2.2.3です エラーは http://xxxxx/~ユーザー名 にアクセスすると 403ではなく404エラー フォルダが無いということは sites-avalias/defaultかapache2.confの設定がおかしいんでしょうか? ちゃんと /home/xxxx/public_htmlも作ってありますし パーミッションもあっています しかし <Directory /home/xxx/public_html>などの設定をしたいんですが sites-avalis/defaultに書くのか それともapache2.confに書くのかまぎらわしくて defaultのほうには<Directory /var/www>など書いてあって apache2.confにはmoduleなどいろいろ書いてあります apache2がhttpd.confではなくてまぎらわしくてよくわかりません それとバージョンなど古かったりなど違ったりして できないみたいです Apache/2.2.3でユーザーディレクトリを使っているかた 詳しく教えて下さいお願いします

  • ホームディレクトリのパーミッション!

    今日一日これに困っています。優しく教えてください♪m(0_0)m TurboLinux 7 & Apache についてです。 /etc/httpd/conf/httpd.conf を編集しています。 UserDir   www と記載しました(public_htmlも含めて) /home/user name/www/index.html (Linux) http://192.168.1.1/~user name/index.html (IE) You don't have permission to access /~user name/ on this server というメッセージが出ます。 おそらくパーミッションの設定が悪いと思って744,755,766,777と試して見たのですが結果は同じでした。 設定変更したと言えば linux側でwww(public_html)のディレクトリで設定変更しました。 (ディレクトリ内のファイルもすべて変更する) ftpソフトでありとあらゆる所を変更してみました。 どうしたらいいのでしょうか? 中に入ってるデータは単なるトップページとその次のページの2枚です。 (どちらもテキストで書いてある簡単なもの) お忙しいとは思いますが少しお知恵をお借りできないでしょうか? お願いします。

  • apacheのユーザーディレクトリの設定

    Fedora Core6のapacheのユーザーディレクトリの設定で悩んでいます。 設定ファイル(httpd.conf)には以下のように記述しています。 #UserDir disable UserDir public_html <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit 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> ユーザー登録をして/home/ユーザ名/にpublic_htmlフォルダを作成して、index.htmlページを作り、http://localhost/~ユーザー名/index.htmlにアクセスしましたが、「403 Forbidden」となってしまいます。 http://127.0.0.1/~ユーザー名/でアクセスしても「403 Forbidden」になります。 フォルダやファイルのパーミッションをいろいろと変えてみましたが表示されません。 こちらはLinux勉強中の初心者です。 よろしくお願いします。

  • 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を組み込む方法をご教授ください。

  • CentOS6でpublic_htmlの公開の仕方

    表題の件で困っています。 以下の作業を行いました。 1.CentOS6.2をインストールして、パケットフィルタリングを設定。 2.# mv /var/www /home/ 3.smb.confの以下を変更。   1.ServerNameをホスト名に変更   2./varを/homeに変更   3.UserDir disableをコメントアウトする   4.UserDir public_htmlを有効にする ここまでの設定で/home/www/html/においたindex.htmlファイルは http://ホスト名/ で見ることが出来るようになりました。 ところがユーザのホームディレクトリの直下に作った /home/(ユーザ名)/public_html/index.html を http://ホスト名/~(ユーザ名)/ で見ることが出来ません。 public_htmlのパーミッションは755にしてあります。 また、SELinux関連化と思い、 # semanage fcontext -a -t httpd_sys_content_t public_html # restorecon public_html も試してみました。 以上の作業をしたのですが http://ホスト名/~(ユーザ名) をブラウザから見ようとすると403 Forbiddenとなってしまいます。 ググって見たのですが、これというものが見つけられませんでした。 ぜひ、ご指導をお待ちしております。

  • Apacheでのユーザーディレクトリ生成

    現在fedora core4 -Apache- でサーバー構築を勉強中なのですが、どうしても解決できない問題が出ました。それはユーザーディレクトリを生成した後、そのディレクトリにアクセスできないという問題です。 ユーザー[testuser]を追加し、/home/testuser/public_htmlを作成後 /home/testuser/public_html/index.htmlを作成、 httpd.confの設定を <IfModule mod_userdir.c> #UserDir disable UserDir /home/*/public_html/ </IfModule> # # Control access to UserDir directories. The following is an example # for a site where these directories are restricted to read-only. # #<Directory /home/*/public_html> # AllowOverride FileInfo AuthConfig Limit # Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Directory /home/*/public_html> AllowOverride All Options IncludesNoExec ExecCGI FollowSymLinks <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory> とし、ttp://www.testsrv.net/~testuserにアクセスしたところ、 You don't have permission to access /~user1 on this server. アクセス権が無いとはじかれました。 この場合、アクセスできるようにするにはどのようにすれば良いのでしょうか?

  • Aapache の UserDir の設定

    RedHatでapacheを利用しています。 ・DocumentRootは 「/etc/apache/public_html」 UserDirで「disable」を指定するかわりに、 ・「UserDir /etc/apache/USERS/*/public_html」 としており、 ・http://127.0.0.1/~hoge/ とアドレス指定して ・「/etc/apache/USERS/hoge/public_html/index.html」 を参照しにいきたいのですが、どうしてもうまくいきません。 hoge,public_html,index.htmlのどれもパーミッションは777にしています。 ちなみに、 http://127.0.0.1/ も http://127.0.0.1/cgi-bin/ も 自分の思った通りに動いてはくれました。 ・「<Directory "/etc/apache/USERS/*/public_html">」 の中の表記は ・http://127.0.0.1/ で見ることができる ・「<Directory "/etc/apache/public_html">」 と同じにしています。 いろいろと調べたのですが、あっているような気がしてなりません。 どこがおかしいのでしょうか?お答えを宜しくお願いします。

  • RedHat7.3 apache-2 ユーザーのページが見れない。

    ブラウザを立ち上げて http://localhost/ ってやると/usr/local/apache2/htdocs/index.htmlが見えるのですが、 taroというユーザーを作ってホームディレクトリのしたに ~taro/public_html/index.html をつくってやると Forbidden You don't have permission to access /~taro on this server. Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request. Apache/2.0.39 Server at localhost Port 80 といわれちゃいます。ちなみに.httpd.confの中の所では #UserDir public_html <IfModule mod_userdir.c> UserDir public_html </IfModule> となっています。 どうすれば見れるようになるのでしょうか?

  • httpアクセスでNot Found

    自宅サーバをREDHAT 9.0からFC4にUPしました。そしたら、/home/(ユーザ名)/public_html/配下のindex.htmが http://マシン名/~(ユーザ名)/index.htm でNOT FOUNDになります。/var/www/html/の方に移すとhttp://マシン名/index.htmで、うまくいきます。httpd.confは 「Userdir public_html」を生かす様に直しました。REDHAT 9.0の時はこの修正でうまくいったのですが、同じようにしたのにうまくいきません。REDHAT9.0とFC4でhttpd.confの修正の仕方が変わったのでしょうか。どなたかご教授ください。