web-dev-qa-db-ja.com

ApacheおよびユーザーごとのWebDAVDocumentRoot

現在、MySQLデータベースからユーザー名とパスワードを取得するWebDAVユーザーを設定しています。大きなファイルのアップロードにWebDAVを使用するオプションをユーザーに提供します(これは現在開発中のファイル共有サービス用です)が、理解できないように見える小さな問題に達しました。

まず第一に、他のユーザーのファイルを調べられないように、各ユーザーが独自のWebDAVルートを持っているとしたらどうでしょうか。 WebDAVを有効にしたユーザーをチェックし、適切なアクセス許可でディレクトリを自動的に作成するcronジョブをすでに実行しています。 Apacheにこれを伝える方法が必要です。

助けてくれてありがとう、本当に感謝しています。

また、毎分cronjobを実行してApache構成を生成し、Apache構成をリロードできることも知っていますが、これはオーバーヘッドが多すぎて、さらに柔軟性が必要です。

6
Tristan Seifert

Apacheの設定がnginxの設定ほど柔軟ではないのは残念です。そのため、次のようなことができます。

Alias /dav /path/to/dav/store/$REMOTE_USER

しかし、あなたはcan書き換えルールでREMOTE_USERを使用します。

RewriteEngine On
RewriteRule ^/dav(.*)$ /__davinternal/%{LA-U:REMOTE_USER} [PT]

次に、すべてのauth/DAVishの愛らしさを<Location /__davinternal>に入れて、ボブはあなたの叔母の同棲愛好家です。

これは、すべてのユーザーに対してファイルシステム内の場所が一貫している場合にうまく機能します(/path/to/dav/store/<username>など)。ファイルシステム全体にユーザーフォルダーが散在している場合(MySQLのマッピングを使用)、ユーザーの場所をマップすることはできますが、RewriteMapを使用する必要があります。

RewriteMap davdirs txt:/path/to/user/dir/map.txt
RewriteRule /^dav(.*)$ /__davinternal/${davdirs:%{LA-U:REMOTE_USER}}

(外部スクリプトを介して)MySQLから直接RewriteMapを実行できますが、マッピング情報が変更されるたびにアプリでdbmファイルを更新し、代わりにdbmマップを使用するようにします。パフォーマンスが大幅に向上します。データベースを地面に打ち込みます。

この回答では、これらの設定のセキュリティへの影響については説明していません。これは、自分自身が完全にわからないため、および正確なセキュリティポリシーが何であるかがわからないためです。

4
womble