「広告」

apache WebDAVの設定

「広告」
記事内に広告が含まれています。
「広告」

今の時代、WebDAVを使っている人は少ないと思いますが、覚え書きとして・・・

CentOS7 + httpd 2.4.x
で行っています。

「広告」

事前設定

apache2.4,php7.3 ソースインストール

の中の

aprとapr-utilをインストールします。

firewallを設定

を設定します。

「広告」

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」が見えなくなりました。

タイトルとURLをコピーしました