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 件のコメント:
コメントを投稿