VirtualDomain別のWebDAV設定を自動化

ホスティングサービスのftpアカウントサービスのようなものを、ftpの代わりにWebDAVで実装できないかいろいろ試してみたところ、出来たのでまとめておく。 やりたいことは、「/webdav/{VirtualHost名}/」でサーバにアクセスすると、DBに保存してあるVirtualHostに対応したBasic認証のID/PWでログインでき、他のディレクトリは参照出来ないというもの。 厄介なのはmod_vhostsを使ってVirtualHost設定を自動化していたため、「%v」でVirtualHostが取れない点。 以下はCentOS5.5の環境で、mod_vhostsとmod_davとmod_auth_mysqlを組み合わせた場合の手順になります。 [code] # yum install mod_auth_mysql # vi /etc/httpd/conf.d/webdav.conf &lt;Location /webdav/&gt;  Dav On  Order deny,allow  Deny from all  ### 管理用サーバのIPからは、一覧表示を許可  Allow from 192.168.11.100 &lt;/Location&gt; &lt;LocationMatch /webdav/*/&gt;  ### Basic認証もしくは、管理用サーバのIPからのみ許可。  Satisfy any  AuthName "Please enter your ID and password"  AuthType Basic  equire valid-user  AuthMySQLSocket /var/lib/mysql/mysql.sock  AuthMySQLUser apacheuser  AuthMySQLPassword apachepass  AuthMySQLDB auth  AuthMySQLNameField user_name  AuthMySQLPasswordField user_passwd  AuthMySQLUserTable users  AuthMySQLUserCondition "’%U’ REGEXP CONCAT(‘^/webdav/’,virtual_domain,’/’)"  AuthMySQLNoPasswd Off  AuthMySQLPwEncryption none  AuthMySQLEnable On &lt;/LocationMatch&gt; [/code] Apacheを再起動して設定を読み込み、後はユーザー情報を保存するDBを作成する。 [code] # mysqladmin create auth -p # mysql -u root -p auth CREATE TABLE users (   user_name CHAR(30) NOT NULL,   user_passwd CHAR(20) NOT NULL,   virtual_domain CHAR(64) NOT NULL,   PRIMARY KEY (user_name, virtual_domain) ); GRANT SELECT ON auth.users TO apacheuser IDENTIFIED BY ‘apachepass’; GRANT SELECT ON auth.users TO <a href="mailto:’apacheuser’@’localhost’">’apacheuser’@’localhost'</a> IDENTIFIED BY ‘apachepass’; FLUSH PRIVILEGES ; [/code] そして以下のようにして、アカウントを登録する。 [code] INSERT INTO users (user_name, user_passwd, virtual_domain) VALUES (‘admin’, ‘testadmin’, ‘www.sample.com’); INSERT INTO users (user_name, user_passwd, virtual_domain) VALUES (‘admin2’, ‘testadmin2’, ‘www2.sample.com’); [/code] 動かないときは、my.cnfにlogオプションを追加し、実行されているクエリをしらべます。
カテゴリー: Technology タグ: , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)