今の時代、WebDAVを使っている人は少ないと思いますが、覚え書きとして・・・
CentOS7 + httpd 2.4.x
で行っています。
事前設定
の中の
を設定します。
httpd (apache) インストール
# wget https://www-us.apache.org/dist//httpd/httpd-2.4.43.tar.gz # tar xzvf httpd-2.4.43.tar.gz # cd httpd-2.4.43/ # ./configure --enable-dav --enable-dav-lock --enable-suexec --enable-ssl --with-suexec-caller=www --with-suexec-userdir=web --with-suexec-docroot=/home --with-suexec-logfile=/usr/local/apache2/logs/suexec_log --with-suexec-uidmin=100 --with-suexec-gidmin=100 --with-suexec-safepath=/bin:/usr/bin --enable-module=so --enable-module=rewrite --enable-modules=ssl --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr # make # make install
↑–enable-dav –enable-dav-lock
のオプションがDAVの指定
httpd (apache) 基本設定
# vi /usr/local/apache2/conf/httpd.conf #ServerName www.example.com:80 ServerName 127.0.0.1:80 <Directory /home> Options All -Indexes +SymLinksIfOwnerMatch -FollowSymLinks AllowOverride All </Directory>
↑加えます。
httpd (apache) DAV設定
# vi /usr/local/apache2/conf/httpd.conf #LoadModule dav_module modules/mod_dav.so LoadModule dav_module modules/mod_dav.so #LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule dav_lock_module modules/mod_dav_lock.so LoadModule dav_lock_module modules/mod_dav_lock.so
↑dav関係を有効にします。
# Virtual hosts Include conf/extra/httpd-vhosts.conf # Distributed authoring and versioning (WebDAV) Include conf/extra/httpd-dav.conf
↑2つを有効にします。
# vi /usr/local/apache2/conf/extra/httpd-dav.conf DavLockDB "/usr/local/apache2/var/DavLock" ↓ DavLockDB /var/lock/apache_dav2/DAVLock
↑ロックファイルの変更。変更をしなくてもいいですが、趣味的な感じです・・・
# vi /usr/local/apache2/conf/extra/httpd-dav.conf Alias /uploads "/usr/local/apache2/uploads" ↓ # Alias /uploads "/usr/local/apache2/uploads" <Directory "/usr/local/apache2/uploads"> Dav On AuthType Digest AuthName DAV-upload # You can use the htdigest program to create the password database: # htdigest -c "/usr/local/apache2/user.passwd" DAV-upload admin AuthUserFile "/usr/local/apache2/user.passwd" AuthDigestProvider file # Allow universal read-access, but writes are restricted # to the admin user. <RequireAny> Require method GET POST OPTIONS Require user admin </RequireAny> </Directory>
↑最初に設定されていた、設定を無効にします。
<Directory “/usr/local/apache2/uploads”>
のブロックも無効にします。(削除か、コメントに)
# vi /usr/local/apache2/conf/extra/httpd-dav.conf <Directory "/home/test1/web/dav"> Dav On Options None </Directory>
↑上記を追加します。
# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf <VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/usr/local/apache2/docs/dummy-host.example.com" ServerName dummy-host.example.com ServerAlias www.dummy-host.example.com ErrorLog "logs/dummy-host.example.com-error_log" CustomLog "logs/dummy-host.example.com-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@dummy-host2.example.com DocumentRoot "/usr/local/apache2/docs/dummy-host2.example.com" ServerName dummy-host2.example.com ErrorLog "logs/dummy-host2.example.com-error_log" CustomLog "logs/dummy-host2.example.com-access_log" common </VirtualHost>
↑上記の初期設定を消すか、コメントにします。
# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf <VirtualHost XXX.XXX.XXX.XXX:80> ServerName (FQDN) DocumentRoot /home/test1/web/ CustomLog /home/test1/logs/access_log combined ErrorLog /home/test1/logs/error_log </VirtualHost>
↑dav用のディレクトリを設定します。
/var/以下のディレクトリ(2020/08/01追記)
DavLockDB /var/lock/apache_dav2/DAVLock
と、Lockファイルを指定しましたが、「/var/」以下、CentOS7,CentOS8では、再起動すると、作成していたディレクトリが元に戻ってしまいます(消えてしまいます)。
この場合、「/etc/tmpfiles.d/」以下に設定ファイルを作成しておきます。
# vi /etc/tmpfiles.d/dav.conf D /var/lock/apache_dav2/ 0777 root root - D /var/lock/apache_dav2/DAVLock 0777 root root -
↑「dav.conf」のファイル名、「dav」部分は、任意です。
ファイル自体のパーミッションの変更も必要ありません。
最初の「D」がディレクトリ。次に、作成したいディレクトリ名。パーミッション、ユーザ、グループの順で指示を書いておきます。
# man 5 tmpfiles.d
↑上記で、マニュアルが出てきます。
WebDAV用ディレクトリ 設定
# cd /home/ # mkdir test1 # mkdir test1/web # mkdir test1/web/dav # mkdir test1/logs # chmod 777 /home/test1/web/dav/
↑実際のディレクトリを作成します。
# mkdir /var/lock/apache_dav2/ # chmod 777 /var/lock/apache_dav2/
↑ロックファイル用ディレクトリを設定します。
# vi /home/test1/web/dav/.htaccess <Limit GET PUT HEAD POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> AuthUserFile /home/test1/auth/.htpass_up AuthGroupFile /dev/null AuthName DownFolder AuthType Basic Require user upuser01 Require user upuser02 </Limit> <LimitExcept PUT POST DELETE MKCOL COPY MOVE LOCK UNLOCK> AuthUserFile /home/test1/auth/.htpass_dn AuthGroupFile /dev/null AuthName DownFolder AuthType Basic Require valid-user </LimitExcept>
↑「アップロード用」「ダウンロード用」のユーザを設定します。
前半が、アップロード用
後半が、ダウンロード用
となります。
# mkdir /home/test1/auth # /usr/local/apache2/bin/htpasswd -c /home/test1/auth/.htpass_up upuser01 New password: Re-type new password: Adding password for user upuser01 # /usr/local/apache2/bin/htpasswd /home/test1/auth/.htpass_up upuser02 New password: Re-type new password: Adding password for user upuser02 # cat /home/test1/auth/.htpass_up >> /home/test1/auth/.htpass_dn # /usr/local/apache2/bin/htpasswd /home/test1/auth/.htpass_dn dnuser01 New password: Re-type new password: Adding password for user dnuser01
↑アップロード、および、ダウンロード用のユーザを登録します。
アップロードとして指定したユーザは、ダウンロード用にも、設定が無いとエラーとなります。
httpd (apache)起動
# /usr/local/apache2/bin/apachectl configtest Syntax OK
↑apacheのテストでOKとなりました。
# /usr/local/apache2/bin/apachectl start
↑apacheを起動させます。
WebDAVテスト
実際に、WebDAVとしてアクセスしてみます。
WebDAVのクライアントとして様々なものがありますが、今回は、「CarotDAV」を使ってみます。
↑上記の「ダウンロード」から、ソフトをダウンロードします。
↑このような初期画面が出てきます。
↑「File」メニューから「New Connection」「WebDAV」を選びます。
↑「URI」に「http」から始まるURLを記入します。
下の「Username」と「Password」に設定したユーザ名とパスワードを入れます。
下の「Test」を押してみます。
↑このようになれば、OKです。「OK」を押して、実際にアクセスをしてみます。
↑このように、サーバー上のファイルが見えます。
↑「test.png」を、ドラック&ドロップで、アップロードさせます。
上記のように「test.png」がアップロードされました。
WebDAVは、この「ドラック&ドロップ」ができるのが、特徴ですね・・・
↑一度、接続を切って、「ダウンロード用」のユーザでログインしてみます。
↑同じようにファイルをアップロード仕様とすると、エラーが返ってきて、アップロードができません。ダウンロードはできます。
WebDAV改造 .htaccessを見えないように・・・
今回、ファイル一覧に、「.htaccess」が見えてしまいます。
一般的にブラウザでは、見えませんが、DAVクライアントからは見えてしまいます。
今回、ソースに手を加えて、見えないようにしてみます。
# vi modules/dav/fs/repos.c /* skip the state dir and temp files unless a HIDDEN is performed */ if (!(params->walk_type & DAV_WALKTYPE_HIDDEN) && (!strcmp(dirent.name, DAV_FS_STATE_DIR) || !strncmp(dirent.name, DAV_FS_TMP_PREFIX, strlen(DAV_FS_TMP_PREFIX)))) { continue; }
↑httpdのソースの一部、上記、1567行目あたりの上記のブロックのあとに
if (!(params->walk_type & DAV_WALKTYPE_HIDDEN) && !strcmp(dirent.name, ".htaccess")) { continue; } if (!(params->walk_type & DAV_WALKTYPE_HIDDEN) && !strcmp(dirent.name, ".htpasswd")) { continue; }
↑を入れます。これは、「.htaccess」と「.htpasswd」を見えないようにしています。
# make # make install
↑と、再コンパイルをして、再インストールをします。
# /usr/local/apache2/bin/apachectl restart
↑再起動します。
↑「.htaccess」が見えなくなりました。