以下の内容はhttp://sonic64.com//2004-01-09.htmlより取得しました。


Landscape トップページ | < 前の日 2004-01-08 2004-01-09 次の日 2004-01-10 >

Landscape - エンジニアのメモ 2004-01-09

* シンボリックリンク先が 403 forbidden

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Apache]

/usr/share/analog/images にある画像を表示させたいので、/home/tails/public_html/log/images からシンボリックリンクを張ったが表示されないという相談を受けた。ブラウザでアクセスしてみると、403 forbidden が返ってきているようだ。エラーログを確認すると、Symbolic link not allowed とあった。
[Fri Jan  9 19:23:25 2004] [error] [client 10.5.25.1] Symbolic link not allowed: /home/tails/public_html/log/images/

私自身も /home/hiroaki/public_html/log/images から /usr/share/analog/images にシンボリックリンクを張っているが、問題なくアクセスできている。なぜ私の方は問題なく使えてるんだろう? httpd.conf に特別な記述をして私のシンボリックリンクを特別に許可しているか、逆に問題となる記述をこのユーザが加えてしまっているのではないかと考え、httpd.conf と .htaccess を確認したが、とくにめぼしいものはなかった。

うーん、何でだろう、ともう一度 シンボリックリンクを ls -al したところ、違いが見つかった。
私のシンボリックリンクはオーナーが root になっているが、問題のあるユーザのシンボリックリンクはオーナーがそのユーザ自身になっている。
[hiroaki@pro images]$ ls  -al /home/hiroaki/public_html/log/images
lrwxrwxrwx    1 root    root          24 Apr 19  2003 /home/hiroaki/public_html/log/images -> /usr/share/analog/images/
[hiroaki@pro images]$ ls  -al /home/tails/public_html/log/images
lrwxrwxrwx    1 tails  tails        24 Jan  9 16:38 /home/tails/public_html/log/images -> /usr/share/analog/images/

場当たり的な対処だが、シンボリックリンクを chown して解決した。
[root@pro /root]# chown root /home/tails/public_html/log/images

- パフォーマンスやセキュリティ的にシンボリックリンクってどうなんだろう?

Google で apache シンボリックリンク SymLinksIfOwnerMatch を検索したところ、山ほどヒット。さすが シェアトップだけのことはある。

Web サーバーとしてのチューニング
http://www.asi.co.jp/info/unix/webserver.html
2.4. Option の FollowSymLinks と SymLinksIfOwnerMatch
シンボリックリンク先の参照を許可する FollowSymLinks は、シンボリック先を参照するのは安全性に問題があるので利用しない方が良いと考えます。しかし、ファイルやディレクトリーがシンボリックされているかどうかチェックするためにそれぞれのファイルやディレクトリーに対して lstat 関数を実行します。さらに、lstat の結果はキャッシュされないのでリクエストのたびに発生します。これは、パフォーマンスを考えると非常に問題になります。また、シンボリックリンクファイルの持ち主とリンク先ファイル/ディレクトリの持ち主が同じだった場合にリンク先を参照することを許可する SymLinksIfOwnerMatch は、設定されるとパフォーマンスに影響します。でも、どうしてもセキュリティーチェックが必要なら以下のような設定をお勧めします。

    DocumentRoot /home/httpd/html
    <Directory />
        Options FollowSymLinks
    </Directory>
    <Directory /home/httpd/html>
        Options -FollowSymLinks +SymLinksIfOwnerMatch
    </Directory>
このように設定することで、少なくとも DocumentRoot までの余分なパスのチェックが要らなくなります。Alias や RewriteRule で設定したパスに対しても同様な処理をする必要があります。最高のパフォーマンスを引き出すには、全ての箇所に FollowSymLinks を設定し、SymLinksIfOwnerMatch を絶対に設定しないことです。

セキュリティ的には SymLinksIfOwnerMatch を使うのが良いが、パフォーマンスの点で不利とのこと。でも、オーナーが root のシンボリックリンクって、なんか不安だなあ・・・。

* ファイルディスクリプタとリダイレクト/パイプ

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [bash]

シェルのファイルディスクリプタ操作 Shell file descriptor manipulation
http://home.catv.ne.jp/pp/ginoue/memo/sh-fd.html
リダイレクトやパイプがどんな仕組みで成り立っているのかを図解つきで解説。普段は抽象化された入出力ライブラリに頼りっきりでファイルディスクリプタをあまり意識していないが、非常にわかりやすかった。



以上の内容はhttp://sonic64.com//2004-01-09.htmlより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14