2011年5月1日日曜日

apache webdav

on debian squeeze は省略。ユーザディレクトリ配下に方法変えつつ色々と
https アクセス。いわゆる$HOME/public_html はそのまま。その下の private は
mod_authz_owner でRequire file-owner。.webdav は文字通り webdav で。


1. apache などのインストール
       # aptitude install apache2 libapache2-mod-auth-pam \
       > libpam-radius-auth libapache2-mod-encoding
   

2. https:443 のみ有効として、ソレナリのモジュール準備
   サイトファイル? と言うのかしら?

       # a2dissite
       Your choices are: default
       Which site(s) do you want to disable (wildcards ok)?
       default
       Site default disabled.
       Run '/etc/init.d/apache2 reload' to activate new configuration!

       # a2ensite
       Your choices are: default default-ssl
       Which site(s) do you want to enable (wildcards ok)?
       default-ssl
       Enabling site default-ssl.
       Run '/etc/init.d/apache2 reload' to activate new configuration!

   次にモジュール

       # a2enmod
       Your choices are: actions alias ...
       Which module(s) do you want to enable (wildcards ok)?
       auth_pam authz_owner dav* ssl userdir
       Module auth_pam already enabled
       Enabling module authz_owner.
       ...
       Enabling module ssl.
       See /usr/share/doc/apache2.2-common/README.Debian.gz on how to
           configure SSL and create self-signed certificates.
       Enabling module userdir.
       Run '/etc/init.d/apache2 restart' to activate new configuration!

   オレオレ証明書の説明はまぁデフォルトでも動くので割愛、ごめんなさい。
   こちらリスンポートのファイルでも無効に

       # cd /etc/apache2/
       # cp ports.conf ports.conf.dpkg-dist
       # emacs ports.conf
       # diff -uw ports.conf.dpkg-dist ports.conf
       --- ports.conf.dpkg-dist 2011-04-30 20:48:43.000000000 +0900
       +++ ports.conf 2011-04-30 20:49:11.000000000 +0900
       @@ -5,8 +5,8 @@
        # Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
        # README.Debian.gz
 
       -NameVirtualHost *:80
       -Listen 80
       +# NameVirtualHost *:80
       +# Listen 80
 
        <IfModule mod_ssl.c>
            # If you add NameVirtualHost *:443 here, you will also have to change

   一応再起動 /etc/init.d/apache2 restart して確認。http://servername や
   https://servername にアクセスしたり、その他として

       # netstat -aptn | grep apache
       # lsof -i | grep apache

   で TCP 80 番で聞き耳たてていないか


3. libapache2-mod-auth-pam の設定
   /usr/share/doc/libpam-radius-auth/examples/pam_example などを眺めつつ

       # cd /etc/pam.d/
       # cp apache2 apache2.dpkg-dist
       # emacs apache2
       # diff -uw apache2.dpkg-dist apache2
       --- apache2.dpkg-dist 2011-04-30 20:56:02.000000000 +0900
       +++ apache2 2011-04-30 20:56:52.000000000 +0900
       @@ -1,2 +1,4 @@
       +auth    sufficient      pam_radius_auth.so
       +account sufficient      pam_radius_auth.so
        @include common-auth
        @include common-account

   apache 〜 PAM 〜 freeradius 〜 PAM と、とっても遠回りだけど。


4. libpam-radius-auth の設定
   前回の FreeRADIUS を使うとして

       # cd /etc
       # cp pam_radius_auth.conf pam_radius_auth.conf.dpkg-dist
       # emacs pam_radius_auth.conf
       # diff -uw pam_radius_auth.conf.dpkg-dist pam_radius_auth.conf
       --- pam_radius_auth.conf.dpkg-dist 2011-04-30 20:54:40.000000000 +0900
       +++ pam_radius_auth.conf 2011-04-30 20:54:48.000000000 +0900
       @@ -23,8 +23,7 @@
        #  deciding that the server has failed to respond.
        #
        # server[:port] shared_secret      timeout (s)
       -127.0.0.1 secret             1
       -other-server    other-secret       3
       +127.0.0.1 ZkPbwZ17bCDEx7Kx 2
 
        #
        # having localhost in your radius configuration is a Good Thing.

   apache が、この pam_radius_auth.conf を読む必要があるので

       # ls -l pam_radius_auth.conf
       -rw------- 1 root root 1257 Apr 30 20:54 pam_radius_auth.conf
       # chgrp www-data pam_radius_auth.conf
       # chmod 0640 pam_radius_auth.conf
       # ls -l pam_radius_auth.conf
       -rw-r----- 1 root www-data 1257 Apr 30 20:54 pam_radius_auth.conf

   /etc/shadow を www-data グループにして読み取らせるよりは、少し安心で
   きる気がしてる

5. ユーザディレクトリ作成
   一般ユーザで

       $ cd
       $ mkdir -p public_html/private
       $ ls -ld public_html
       drwxr-xr-x 3 chamaken chamaken 4096 Apr 30 21:02 public_html
       $ ls -ld public_html/private/
       drwxr-xr-x 2 chamaken chamaken 4096 Apr 30 21:02 public_html/private/
       $ echo 'My private content works!' \
       > > public_html/private/index.html
   
   最後の一行が Require file-owner で必要になるのか、ならないのかはっき
   りせず。Options Indexes を指定しても...


6. public_html アクセスの設定 - mod_authz_owner だけ
   バックアップ取りつつ 

       # ls -l userdir.*
       lrwxrwxrwx 1 root root  30 Apr 30 20:47 userdir.conf -> ../mods-available/userdir.conf
       -rw-r--r-- 1 root root 604 Apr 30 21:06 userdir.conf.dpkg-dist
       lrwxrwxrwx 1 root root  30 Apr 30 20:47 userdir.load -> ../mods-available/userdir.load
       # mv userdir.conf userdir.conf.dpkg-dist
       # cp userdir.conf.dpkg-dist userdir.conf
       # ls -l userdir.*
       -rw-r--r-- 1 root root 604 Apr 30 21:07 userdir.conf
       lrwxrwxrwx 1 root root  30 Apr 30 20:47 userdir.conf.dpkg-dist -> ../mods-available/userdir.conf
       lrwxrwxrwx 1 root root  30 Apr 30 20:47 userdir.load -> ../mods-available/userdir.load

   設定ファイル編集。private はディレクトリインデックスせず、PAM 認証で
   ファイルオーナーが同じ場合のみアクセス可

      # emacs userdir.conf
      ...
      # diff -uw userdir.conf.dpkg-dist userdir.conf
      --- userdir.conf.dpkg-dist 2011-03-23 06:13:14.000000000 +0900
      +++ userdir.conf 2011-04-30 21:10:29.000000000 +0900
      @@ -5,6 +5,9 @@
               <Directory /home/*/public_html>
                       AllowOverride FileInfo AuthConfig Limit Indexes
                       Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
      +
      +               IndexIgnore private
      +
                       <Limit GET POST OPTIONS>
                               Order allow,deny
                               Allow from all
      @@ -14,5 +17,20 @@
                               Deny from all
                       </LimitExcept>
               </Directory>
      -</IfModule>
 
      +       <Directory /home/*/public_html/private>
      +               AllowOverride FileInfo AuthConfig Limit Indexes
      +               Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
      +
      +               AuthPAM_Enabled On
      +               AuthPAM_FallThrough Off
      +               AuthBasicAuthoritative Off
      +               AuthUserFile /dev/null
      +
      +               AuthType Basic
      +               AuthName "Your Private Contets"
      +
      +               Require file-owner
      +               Satisfy All
      +       </Directory>
      +</IfModule>

   AuthBasicAuthoritative Off が結構ハマった。AuthUserFile /dev/null は
   ログがうるさいので

7. ちょっと確認
   また再起動 /etc/init.d/apache2 restart してから、ブラウザ何でも良いので

       https://servername/~chamaken
       Index of /~chamaken
       [ICO]   Name    Last modified   Size    Description
       [DIR]   Parent Directory                -        
       Apache/2.2.16 (Debian) Server at decoh4 Port 443/

   うん。private がインデックスされず

       https://servername/~chamaken/private
       My private content works! 

   うん、ちょーさみしーコンテンツ


8. webdav 設定
   なかなか悲しいかな、どうしたって apache 稼動ユーザ権限が必要な模様。
   
   mod_dav がファイルを操作できるようにするためには、 管理下のディレクト
   リとファイルとに Apache が実行されている User と Group で書き込み可能
   である必要があります。 新しく作成されるファイルもこの User と Group に
   所有される ことになります。この理由から、そのアカウントへのアクセスを
   制御することは 重要です。DAV リポジトリは Apache 専用のものだとみなさ
   れています。 Apache 以外の方法でファイルを修正すること (例えば FTP や
   ファイルシステム 用のツールなどを使って) は許可されていません。

   suexec じゃないけど sudir とかないのかしら。これができれば quota とか
   ローカルアカウントのユーザが気にせず読み書き... と思ったけど webdav
   プロトコルでのロックとか考えると、ローカルファイルとして操作するので
   はなく webdav としてマウントして使うべきか。

   ローカルユーザのホームディレクトリ配下なんだけど root になって

       # mkdir /home/chamaken/public_html/.webdav
       # chown www-data.www-data /home/chamaken/public_html/.webdav
       # ls -ld !$
       ls -ld /home/chamaken/public_html/.webdav
       drwxr-xr-x 2 www-data www-data 4096 Apr 30 21:04 /home/chamaken/public_html/.webdav

   userdir 設定の更新

       # cp userdir.conf userdir.conf.private
       # emacs userdir.conf
       ...
       # diff -uw userdir.conf.private userdir.conf
       --- userdir.conf.private        2011-04-30 21:45:04.000000000 +0900
       +++ userdir.conf        2011-04-30 21:45:15.000000000 +0900
       @@ -6,7 +6,7 @@
                       AllowOverride FileInfo AuthConfig Limit Indexes
                       Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
 
       -               IndexIgnore private
       +               IndexIgnore private .webdav
 
                       <Limit GET POST OPTIONS>
                               Order allow,deny
       @@ -33,4 +33,31 @@
                       Require file-owner
                       Satisfy All
               </Directory>
       +
       +        <Directory /home/*/public_html/.webdav>
       +                AllowOverride FileInfo AuthConfig Limit Indexes
       +                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
       +
       +                AuthPAM_Enabled On
       +                AuthPAM_FallThrough Off
       +                AuthBasicAuthoritative Off
       +                AuthUserFile /dev/null
       +
       +                AuthType Basic
       +                AuthName "Your WEBDAV Authentication"
       +
       +                DAV On
       +
       +                <LimitExcept GET POST OPTIONS>
       +                        Order allow,deny
       +                        Allow from all
       +                </LimitExcept>
       +                Satisfy All
       +
       +                ForceType text/plain
       +        </Directory>
       +
       +       <Directory /home/chamaken/public_html/.webdav>
       +               Require user chamaken
       +       </Directory>
        </IfModule>

   最後の方の Require user を個々ディレクトリ毎に指定するのが少々切ない。


9. webdav アクセス
   手元の環境なら nautilus webdav。Windows からならば

       # a2enmod encoding
       Enabling module encoding.
       Run '/etc/init.d/apache2 restart' to activate new configuration!
       # emacs /etc/apache2/mods-enabled/encoding.conf適切に設定した後の方が良いのかしら。~/chamaken/.webdav はちょっと見
   栄えが悪かったりするので、その他 Tips は次回に

0 件のコメント: