Mac OS XでWebDAVサーバ

'02.5.24 ('04.12.8更新)

FTPに替わるものとして注目されているWebDAVですが、OS XではWebDAVサーバにするのも簡単です。

一般のApacheとの違いは、mod_davモジュールが最初から入っている点と、ディレクトリ構成が少し違うだけですから、OS X以外の人にも参考になるかもしれません。

ここでは、設定ファイルの書き換えやパーミッションの変更ができることを前提に、設定内容に絞って記述します。

(できない人は「超簡単 Mac OS XのローカルでCGI」を参考にして下さい)

(OS X Serverの人はAppleサイトの「Mac OS X ServerのWebDAVを設定」をどうぞ)

(自己責任で行ってください。インターネットへ公開するには、セキュリティの知識とスキルが必要です)


WebDAVって何?

WebDAV(Web-based Distributed Authoring and Versioning)とは、Webコンテンツの編集(Authoring)やリビジョン管理(Versioning)向けに規定されたプロトコルです。HTTP1.1の拡張として、RFC 2291で提唱されRFC 2518で定義されています。

FTPと比較すると、ロック機能があるので、多人数によるWebコンテンツ編集に向いていますし、ポート80だけを使うので、ファイアウォール越しに操作できる利点もあります。

一部のプロキシでうまく通らないことがあるようですが、基本的に従来のHTTPでできることはできます。サーバとクライアントが対応していれば、Basic認証、ダイジェスト認証、SSL/TLS等が可能です。

MacとWin等の異機種間のファイル交換にも使えますが、OS XのLANならSMBで繋ぐ方が簡単ですね。

読みは「ウェブダブ」か「ウェブダフ」。略して「ダブ」とも言います。

サーバ (Apache) の設定

モジュール読み込みの設定

mod_davはすでにインストールされているので、/etc/httpd/httpd.conf で下記を探して頭の#を消せば、読み込まれるようになります。

    #LoadModule dav_module         libexec/httpd/libdav.so

    #AddModule mod_dav.c

共有ディレクトリの作成

/Library/WebServer/Documents/ がOS Xのデフォルトの公開ディレクトリですが、その中にWebDAV用のディレクトリを作ることにします。各ユーザのSitesディレクトリに作ることもできます。WebDAVで書き込みできるようにユーザとグループを設定します。

% cd /Library/WebServer/Documents
% mkdir dav
% sudo chown www:www dav

(OS Xのデフォルトがwwwとwww。httpd.confのUserとGroupディレクティブの設定によってはnobody等になる。ユーザを変えずにパーミッションを777にするだけでも使えますが、Apache経由の書き込みに限定するこちらの方が安心です)

Windows XPのSP1のWebフォルダで、大文字のディレクトリ名に対して小文字でリクエストするバグがあります。なので「dav」という小文字のディレクトリ名にしてます。

ロックディレクトリ、ファイルの作成

書き込みロック (読み込みはロックしない) のためのロックファイルを置くディレクトリを作ります。書き込み許可しておけば、ロックファイルは自動的に作られます。これも場所はここでなくてもかまいません。

% cd /Library/WebServer
% mkdir lock
% sudo chown www:www lock

あらかじめロックファイルを作っておく方法もあります。これならディレクトリに書き込み権限は必要ありません。

% cd /Library/WebServer/lock
% touch DAVLock.dir
% touch DAVLock.pag
% sudo chown www:www DAVLock*

ロックファイルと共有ディレクトリの設定

下記の設定をhttpd.confに追加します。420行目あたりより下、どこでもいいのですが、<Directory></Directory>や<IfModule></IfModule>等に挟まれていない場所でないとダメです。

  1. ロックファイルの場所を書きます。ファイル名は「DAVLock」でなくてもかまいません。拡張子は書きません。(あらかじめ作ってあるならファイルと同じ名前ね)
  2. ロックの最小生存時間を秒単位で指定します。あまり短いとロックが消えたりします。
  3. 共有するディレクトリで DAV On します。

httpd.confの設定。

<IfModule mod_dav.c>
    DAVLockDB /Library/WebServer/lock/DAVLock
    DAVMinTimeout 600
    <Directory /Library/WebServer/Documents/dav>
        DAV On
    </Directory>
</IfModule>

もし、ユーザのディレクトリを共有するならこんな具合。nameはユーザ名に入れ替えること。

<IfModule mod_dav.c>
    DAVLockDB /Library/WebServer/lock/DAVLock
    DAVMinTimeout 600
    Alias /dav /Users/name/Sites/dav
    <Location /dav>
        DAV On
    </Location>
</IfModule>

ServerNameの設定

mod_davは、httpd.confのServerNameの設定と、実際に呼び出す名前 (あるいはIPアドレス) が違うとCOPYとMOVEができなくなります。

OS XのFinderだと、移動ができないだけでなく、名前を変えたりゴミ箱に入れて捨てることもできなくなります。(ゴミ箱に入らなくても、command+ドラッグでローカルへ持ってくればDAV上のファイルを消す事は出来ます。10.2のFinderだとゴミ箱に入れず直接削除します)

WindowsのWebフォルダ等クライアントによっては、COPYとMOVEが無効なサーバに対して、GET&PUTで疑似COPY、GET&PUT&DELETEで疑似MOVEを行い問題がでないものもあります。(無駄な送受信が増えるのは問題ですが)

というわけで、ServerNameの設定も欠かせません。

# デフォルト (指定しないと自分自身のIPアドレスになる(通常127.0.0.1))
#ServerName (fisheyeとかcontactとかedoとか書いてある)
# ローカルテストなら (10.2ならデフォルトでMacintoshでも可)
ServerName 127.0.0.1
# LANなら割り当てたIPアドレスかローカルドメイン名に
ServerName 192.168.0.2
# 公開するときはドメイン名でね
ServerName www.tomneko.jp

これで、Apacheを再起動すればWebDAVが使えるようになります。http://<サーバ>/dav/がURIになります。が、このままでは、誰もが書き込みも削除もできてしまうので、用途に応じた制限や認証が必要ですね。

さらに

サーバの設定を守る

自由にファイルをアップロードできるってことは、ユーザに.htaccessファイルを置かれて、サーバの設定を変えられてしまう可能性もあります。「AllowOverride None」で設定の上書きを禁止しておきましょう。さらに、「Options None」指定でCGI、シンボリックリンク、SSI等の機能もオフにしておくと安心ですね。WebDAVのファイル一覧表示の禁止はOptionsだけではできません。PROPFINDメソッドの制限も必要です。

<IfModule mod_dav.c>
    DAVLockDB /Library/WebServer/lock/DAVLock
    DAVMinTimeout 600
    <Directory /Library/WebServer/Documents/dav>
        DAV On
        AllowOverride None
        Options None
    </Directory>
</IfModule>

アクセス制限

LANで使うだけならLAN内のアクセスだけに制限します。Webサーバ自体がLANだけで使われるなら、このディレクトリだけでなく、/Library/WebServer/Documents/ や /Users/name/Sites/ の制限もしたいところ。

<IfModule mod_dav.c>
    DAVLockDB /Library/WebServer/lock/DAVLock
    DAVMinTimeout 600
    <Directory /Library/WebServer/Documents/dav>
        DAV On
        AllowOverride None
        Options None
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1 192.168
    </Directory>
</IfModule>

(localhostと192.168.*.*だけ許可。Order Deny,Allow の,の前後に空白はダメ)

Basic認証

インターネットに公開するなら認証が必要ですね。Basic認証だけだと暗号化されずにパスワードが送られるので、パスワード漏洩の危険回避には後述のダイジェスト認証が必要です。といっても、今まで単なるFTPを使ってきたのなら同じことですが。ファイル内容まで暗号化するならBasic認証 + SSLでしょうね。

まず、/usr/bin/htpasswd コマンドを使って /Library/WebServer/ ディレクトリにパスワードファイルを作ります。

.htpasswdはパスワードファイル名、user_nameはアクセスを許可するユーザ名

% cd /Library/WebServer
% htpasswd -c .htpasswd user_name
New password: パスワードを入力
Re-type new password: パスワードを入力
Adding password for user user_name

ユーザの追加の場合-cを付けない。付けると新しいファイルとして上書きされてしまいます。

% htpasswd .htpasswd user_name_2

(パスワードファイルはWebから読める権限になっていないといけません)

httpd.confの設定。GET HEAD OPTIONS以外のリクエスト時に認証を求めます(ブラウザで見るだけなら自由な設定)

<IfModule mod_dav.c>
    DAVLockDB /Library/WebServer/lock/DAVLock
    DAVMinTimeout 600
    <Directory /Library/WebServer/Documents/dav>
        DAV On
        AllowOverride None
        Options None
        AuthType Basic
        AuthName WebDAV
        AuthUserFile /Library/WebServer/.htpasswd
        <LimitExcept GET HEAD OPTIONS>
            require valid-user
        </LimitExcept>
    </Directory>
</IfModule>

上記設定なら、.htpasswdは公開ディレクトリ外なので、直接読まれることはありませんね。“.”を頭につけずにFinderから見えるようにしておいてもいいでしょう。

require valid-user だと有効なユーザ全てに公開しますが、下記のように書けばユーザを限定することもできます。

require user user_name user_name_2

Windows XPのWebDAVクライアントは、ユーザ名にサーバ名をくっつけて送ってくるので、下記のように設定しておかないと認証できません。

% htpasswd .htpasswd servername\\user_name

下記のmod_encodingを使うなら、「NormalizeUsername on」を指定すれば文字化け解消ついでに正常な認証に直すので、上記設定の必要はありません。

しかし、Basic認証では、OS X 10.2のFinderを繋ごうとすると、「セキュリティ保護されていないWebDAVサーバから情報を要求されました……」なんて言われるのが気になるところ。

ダイジェスト認証

パスワードが暗号化されるので、Basic認証よりずっと安全です。ファイル内容までは暗号化しません。しかし、ダイジェスト認証に対応していないクライアントもあります。(FinderはOS X 10.1.1から対応)

Apacheのモジュールには、mod_digestとmod_auth_digestと2種類あります。

OS Xに最初から入っているmod_digestは古い仕様 (RFC 2069) です。OS XのFinderとMac版IE (ページ表示) ではこちらでも認証できますが、WindowsのWeb フォルダやWin版IE (ページ表示) では認証できません。

使うには、httpd.confの以下の部分の#を消すだけです。

    #LoadModule digest_module      libexec/httpd/mod_digest.so

    #AddModule mod_digest.c

新しい仕様 (RFC 2617) に対応したのはmod_auth_digestです。Web フォルダWin版IE5以上 (ページ表示) やDAV Explorerはこちらだけに対応しています。Finderでも使えます。

これをインストールするには、Apacheのソースを新たにダウンロードしてきてモジュールだけコンパイルします。そのために、OS Xの開発環境であるデベロッパーツールのインストールも必要です。

(以下はApache 1.3.26の場合)

  1. OS XのApacheにバージョンを合わせてapache_1.3.26.tar.gzをダウンロード。
  2. 解凍
    % tar xzf apache_1.3.26.tar.gz
  3. モジュールのある場所に移動
    % cd apache_1.3.26/src/modules/experimental
  4. コンパイル
    % apxs -c -D DEV_RANDOM mod_auth_digest.c
  5. インストール(手動でもいい)
    % sudo apxs -i -a mod_auth_digest.so

以上でモジュールはインストールされ、-aオプションでhttpd.confに以下の行が書き加えられます。(httpd.conf.newとhttpd.conf.bakがすでにあると上書きされるので注意)

LoadModule digest_auth_module libexec/httpd/mod_auth_digest.so

AddModule mod_auth_digest.c

両方同時には使えないので、どちらかのLoadModuleとAddModuleは#を頭に付けてコメント化します。

ここから下は、どちらのモジュールでも同じです。

認証データファイルは /usr/bin/htdigest コマンドで作成します。

.htdigestはパスワードファイル名、WebDAVはrealm名、user_nameはアクセスを許可するユーザ名

% cd /Library/WebServer
% htdigest -c .htdigest WebDAV user_name
Adding password for user_name in realm WebDAV.
New password: パスワードを入力
Re-type new password: パスワードを入力

ユーザの追加の場合-cを付けない。付けると新しいファイルとして上書きされてしまいます。

% htdigest .htdigest WebDAV user_name_2

httpd.confの設定。GET HEAD OPTIONS以外のリクエスト時に認証を求めます(ブラウザで見るだけなら自由な設定)

<IfModule mod_dav.c>
    DAVLockDB /Library/WebServer/lock/DAVLock
    DAVMinTimeout 600
    <Directory /Library/WebServer/Documents/dav/>
        DAV On
        AllowOverride None
        Options None
        AuthType Digest
        AuthName WebDAV
        AuthDigestFile /Library/WebServer/.htdigest
        <LimitExcept GET HEAD OPTIONS>
            require valid-user
        </LimitExcept>
    </Directory>
</IfModule>

AuthNameはhtdigestのrealmで指定した文字列と同じにする。

不思議な事に、Finderとmod_auth_digestの組み合わせのときだけ、<Directory>指定のパスの末尾に/が必要です。<Location>なら無くても大丈夫。(OS X 10.1.5で/がいらなくなりました)

# 認証できない。
<Directory /Library/WebServer/Documents/dav>
# 認証できる。
<Directory /Library/WebServer/Documents/dav/>

Web フォルダを使うときは、OPTIONSリクエストで認証させるとエラーになります。必ず避けること。

<LimitExcept OPTIONS>
    require valid-user
</LimitExcept>

SSL (HTTPS) 接続

パスワードもファイル内容も暗号化するならSSL (HTTPS) があります。固定IPアドレスか独自ドメインが必要ですが。SSL上ではBasic認証でもパスワードは暗号化されます。

OS XではFinderがSSL未対応なので、GoliathDAV Explorerを使うことになります。WindowsのWeb フォルダはSSLに対応しています。

OS XでのSSLの設定方法は「Mac OS XでSSLサーバ」にあります。ここではWebDAV用にhttpd.confの設定例だけ書きましょう (mod_sslです)。SSLサーバのページにある設定にWebDAVとBasic認証を組み込んだだけです。SSLのクライアント認証ではありません。

下の設定でdavディレクトリは、HTTPS接続時はWebDAVオンで認証あり、HTTP接続時はブラウザ等での書き込みできないアクセスだけになります。SSLRequireSSLを追加すればSSLアクセスだけに制限できます。

ServerNameは実際に使うサーバ名に書き換えます。

# 下記2行を読み込まれるようにする
LoadModule ssl_module         libexec/httpd/libssl.so
AddModule mod_ssl.c

# 下記はコメントにする
# Port 80

# 以下は追加
<IfModule mod_ssl.c>
    Listen 443
    Listen 80
</IfModule>

<IfModule mod_ssl.c>
    # 証明書ダウンロード用のMIMEタイプ
    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl .crl
    # SSLの基本設定
    # SSLProtocol all -SSLv3
    SSLPassPhraseDialog builtin
    SSLSessionCache dbm:/var/run/ssl_scache
    SSLSessionCacheTimeout 300
    SSLMutex file:/var/run/ssl_mutex
    SSLRandomSeed startup builtin
    SSLLog /var/log/httpd/ssl_engine_log 
    SSLLogLevel info
    # 下記を加えればdavディレクトリはSSL接続以外拒否できる
    # <Directory /Library/WebServer/Documents/dav>
    #     SSLRequireSSL
    # </Directory>

    #
    # バーチャルホストでSSLとそうでないアクセスを分ける
    #
    <VirtualHost ServerName:80>
        # こちらは通常設定
        DocumentRoot /Library/WebServer/Documents
        ServerName ServerName
        # ServerAdmin メールアドレス
        # SSLオフ
        SSLEngine off
    </VirtualHost>
    <VirtualHost ServerName:443>
        # バーチャルホストの基本設定
        DocumentRoot /Library/WebServer/Documents
        # ServerNameはCSR作成時に書いたのと同じ名前にすること
        ServerName ServerName
        # ServerAdmin メールアドレス
        ErrorLog /var/log/httpd/error_log
        TransferLog /var/log/httpd/access_log
        # SSLを有効にする
        SSLEngine on
        # EXPORT56はIE用に無効になっている
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        # サーバ証明書と秘密鍵のパス
        SSLCertificateFile /etc/httpd/ssl.key/server.crt
        SSLCertificateKeyFile /etc/httpd/ssl.key/server.key
        # CGI等の環境変数にSSL標準のセットを追加
        <Files ~ "\.(cgi|shtml|php)$">
            SSLOptions +StdEnvVars
        </Files>
        <Directory /Library/WebServer/CGI-Executables>
            SSLOptions +StdEnvVars
        </Directory>
        # SSL接続がうまくないブラウザ用
        SetEnvIf User-Agent ".*MSIE.*" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0
        # カスタムSSLログファイル
        # SSLのコンパクトなエラーでないログファイルなら
        CustomLog /var/log/httpd/ssl_request_log \
        "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
        <IfModule mod_dav.c>
            DAVLockDB /Library/WebServer/lock/DAVLock
            DAVMinTimeout 600
            <Directory /Library/WebServer/Documents/dav>
                DAV On
                AllowOverride None
                Options None
                AuthType Basic
                AuthName WebDAV
                AuthUserFile /Library/WebServer/.htpasswd
                # SSL側はGET HEADアクセスも認証にする
                <LimitExcept OPTIONS>
                    require valid-user
                </LimitExcept>
            </Directory>
        </IfModule>
    </VirtualHost>
</IfModule>

実行ファイルのダウンロード

WebDAVをFTPの代わりとして、Webサイトのファイル操作に使う場合、CGI, SSI, PHP等の実行ファイル、あるいはパースされるファイルをダウンロードすると、実行結果が返されてしまいます。これは、Webブラウザと同じGETメソッドで呼び出しているからです。

<VirtualHost>を使って違うサーバ名や違うポートでアクセスするか、Aliasを使って違うURLでアクセスする事で、同じファイルに対するアクセスでも、WebブラウザからのアクセスとWebDAVクライアントからのアクセスを区別し、それぞれ異なる設定にして対処します。

<VirtualHost 12.34.56.78>
    DocumentRoot /Library/WebServer/Documents
</VirtualHost>

<VirtualHost 12.34.56.78:8080>
    DocumentRoot /Library/WebServer/Documents
    DAV On
    ForceType text/plain
</VirtualHost>
Alias /cgi-bin /Library/WebServer/CGI-Executables
<Location /cgi-bin>
    AddHandler cgi-script cgi
    Options ExecCGI
</Location>

Alias /cgi-source /Library/WebServer/CGI-Executables
<Location /cgi-source>
    DAV On
    AddType text/plain cgi
</Location>

PHPのファイルなら、ForceType (AddType) でテキストにしてソースが読めるようになります。CGIファイルは、CGIが有効なディレクトリやURLに対して、あとからForceTypeで指定しても読めるようになりません。CGIを有効にするときに、WebDAVと違うVirtualHostか違うAlias (ScriptAlias) にして有効と無効を分離する必要があります。WebDAVではパーミッションの設定も (今のところ) できませんが。

文字化け対策、mod_encoding

WebDAVで日本語ファイル名を使うときの文字セット (エンコード) はUTF-8です。OS X同士なら大丈夫ですが、サーバのファイル名やクライアントから送られるファイル名が、Shift_JISやEUC-JP等、他の文字セットだと文字化けが発生し、日本語名ファイルの操作ができなくなります。WindowsのWeb フォルダ (のShift_JIS送信版) 等、文字セットが違うクライアントと接続する場合mod_encodingを入れて文字化け解消します。

mod_encodingには、Windows XPでの認証時のユーザ名にサーバ名が付属して送られる問題を解消する機能もあります。

オリジナルのmod_encodingをOS Xに入れてもファイル名の一部 (かなの濁点半濁点等) が文字化けします。文字化け対策されたOS X専用mod_encodingがあります。OS X Serverではない一般OS Xにインストールするときは、Makefileの下記の部分を修正してmakeします。(03.10.19)

24行目
$(APXS) -c $(DEFS) mod_encoding.c vfs_utfconv.o 
↓
$(APXS) -c $(DEFS) mod_encoding.c vfs_utfconv.o -framework CoreServices

インストール方法はファイル付属のREADME-JP.txtにあります。

同じUnicodeでファイル名を扱うはずのWindows 2000のWebフォルダと繋いでも、オリジナルmod_encodingでは文字化けするのですが、それにはこんな理由があります。

OS Xは、UnicodeのNormalization (正規化) として、かなの濁点半濁点つきの文字等は合成文字として、基底文字と結合文字 (濁点半濁点) に分離して保持する方式 (Normalization Form D) を使っています。結合文字に未対応のコード変換ツールやクライアントだと、そのまま2文字として扱ってしまい、結合文字としての濁点半濁点がShift_JISやEUC-JPには無く、Unicodeでも結合文字未対応の実装では使えないため、そこだけ変換できずに化けます。(Shift_JISにある「゛゜」はUnicodeの309Bと309Cですが、結合文字の方は3099と309Aです)

濁点半濁点の結合文字は、Unicode 2.0にもあります。文字化けは、ひとえに結合文字に対応してるかどうかの問題で、OS XがUnicode 3.2の文字セットに対応したこととは関係ありません。JIS X 0221-1によれば、実装水準3でないと濁点半濁点の結合文字が使えません。Windows 2000はシステムレベルでは対応してるはずですが、Webフォルダの実装で未対応になってます。

オリジナルmod_encodingが対応していないのは、変換ツールのlibiconv (iconv) の実装によります。

(Normalizationの規則が正式に決められたのはUnnicode 3.0です。HFS+はUnicode3.0の前ですが、Normalizationを取り入れています。Normalization Form C (合成して保持する) を使えば従来のコードとの互換性が高いのに、Appleらしいと言うか)

以下はオリジナルmod_encodingのインストール方法ですから、ちと古いですが、参考までに残してあります。

「mod_encoding-20020611a.tar.gz」からはGNU autotools化されたので、configure, make, make installでインストールできます。OS X 10.2なら特別なことはしなくても大丈夫。10.1だとちょっと工夫が要ります。

  1. まずは文字セット変換を行うlibiconvをインストール。OS X用パッケージでなくソースをコンパイルしてインストール。
    % tar zxf libiconv-1.8.tar.gz
    % cd libiconv-1.8
    % ./configure
    % make
    % sudo make install
  2. OS X 10.1の場合は、/usr/sbin/apxsを書き換える必要があります。
    76行目の以下の部分に「-no-cpp-precomp」を追加します。バックアップを忘れずに。(もっといい方法がありそうですが)
    my $CFG_CFLAGS        = q( -no-cpp-precomp -DDARWIN...
  3. mod_encodingをダウンロードしてきて、
    % tar zxf mod_encoding-20020611a.tar.gz
    % cd mod_encoding-20020611a/lib
    % ./configure
    % make
    % sudo make install
    % cd ../
    % ./configure --enable-debug --with-apxs=/usr/sbin/apxs \
    --with-iconv-hook=/usr/local/include/iconv_hook
    % make
    % sudo make install
  4. httpd.confの設定。
    LoadModule headers_module  libexec/httpd/mod_headers.so
    LoadModule encoding_module libexec/httpd/mod_encoding.so
    
    AddModule mod_headers.c
    AddModule mod_encoding.c
    
    <IfModule mod_headers.c>
        Header add MS-Author-Via "DAV"
    </IfModule>
    
    <IfModule mod_encoding.c>
        EncodingEngine    on
        NormalizeUsername on
        SetServerEncoding     UTF-8
        DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
    
        AddClientEncoding "cadaver/" EUC-JP
    </IfModule>

おまけ。HFS+フォーマットの落とし穴と不可視ファイル

ここに記述していた、HFS+フォーマットでApachサーバを使う際の問題は、Security Update 2004-12-02 v.1.0 (OS X 10.2.8と10.3.6のServerとClient) にて、やっと解消されました。10.1は置いてけぼりですけど。

具体的には、httpd.confの下記の部分が書き換えられました。

# 対策前
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>
# 対策後
<Files ~ "^\.([Hh][Tt]|[Dd][Ss]_[Ss])">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

<Files "rsrc"> 
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

<DirectoryMatch ".*\.\.namedfork">
    Order allow,deny
    Deny from all
    Satisfy All
</DirectoryMatch>

アップデート適用前にhttpd.confファイルを変更してあると、自動で書き変わらないので自分で書き換えます。

MacのHFS+フォーマットでは、ディレクトリ、ファイル名の大文字小文字は区別しません。なので、abc.defでもABC.DEFでも同じとみなします。デフォルトのApacheでは設定の抜けが生じ、たとえば、hoge.CGIと呼び出してソース内容を見られてしまう、なんて事になります。そこで、Mac OS X 10.1からはhfs_apple_moduleを入れて対策しましたが、httpd.conf内の正規表現を使ったファイル指定までは対策されていませんでした。今回、「.ht〜」 だけでなく「.DS_Store」へのアクセスも禁止されました。

もう一つのHFS+フォーマット対策は、ここでは触れていませんでしたが、特別なファイル名を使うとファイルのデータとリソースフォークに直接アクセスできてしまう問題への対策です。
参考:Mac OS X Server: Protection for sensitive files when using Apache on an HFS+ volume

以下はSecurity Update 2004-12-02が出る前の記述です。参考までに残してあります。

本格的に公開するなら、大文字小文字を区別するUFSフォーマットにインストールしたほうがいいですね。

OS Xならではの不可視ファイルもあります。

他に未確認の問題が残っている可能性もあります。

WebDAVクライアント

他にもありますが、有名どころだけ。

TomcatのWebDAV

JavaサーバのTomcatにもWebDAV機能があって、あっちはインストールするだけで使えます。動作がちょっと遅いですけど、手軽に使えるのはいいですね。まあ、本格的に使うとしたら、それなりの手間はかかりそうです。
参照:Mac OS XでTomcat

参考文献

謝辞

このページのためにお世話になった方々です。ありがとうございます。