Ubuntu 14.04とWindows7でファイル共有

WindowsとLinuxの間でファイル共有するとなると、
もっともメジャーなのはsambaを利用することだと認識しています。
ところが、企業などでドメイン認証しているような環境では、
中央サーバで認証が行われるため、
勝手に作ったsambaサーバにローカルアカウントでログインできません。
いや、何か方法があるのかもしれませんが、私にはできませんでした。

まあLinuxにsftpでログインすれば特に問題はないのですが、
他に何か方法はないかなということで思いつくのはWebDAVです。

ということでUbuntu 14.04をWebDAVサーバにしてみます。
まずは以下を実行します。

# apt-get install apache2
# a2enmod dav
# a2enmod dav_fs
# a2enmod dav_lock
# cd /var/www
# mkdir dav
# chown -R www-data:www-data dav/
# chmod 775 dav/

設定ファイル”/etc/apache2/apache2.conf”に

Alias /dav "/var/www/dav"
<Location /dav>
        DAV on
        Options Indexes
        Require all granted
</Location>

ここで”Require all granted”をつけているのは

[authz_core:error] [pid ****] [client ***.***.***.***:*****] AH01630: client denied by server configuration: /***/***/***

の様なエラーになりのを防ぐためです。
また”Options Indexes”をつけないと
通常のウェブブラウザからアクセスした時に”403 forbidden”エラーになります。
最後に

# service apache2 restart

で再起動して完了です。

ローカルでならこれでも十分ですが、もしSSL化したいなら、追加で

# a2enmod ssl
# a2ensite default-ssl 

を実行します。これで”http:”でも”https:”でも接続できるようになります。
本来なら”make-ssl-cert”で少なくともオレオレ証明書を作るべきですが、
ローカル利用ならまあ影響はないでしょう。
さらにセキュアにするため”http:”でのアクセスを禁止したければ、
“/etc/apache2/apache2.conf”の先に追加したLocationディレクティブの内に
“SSLRequireSSL”を追加すればいいでしょう。
なお下記の様にbasic認証するような場合も、
パスワードがバレないよう”http:”は止めた方がいいです。

で、そのパスワード認証をかけたい場合ですが、

# apt-get install apache2-utils

でツールをインストールして

# htpasswd -c <パスワードファイル> <ユーザ名> <パスワード>

でパスワードファイルにアカウントを追加し、
“/etc/apache2/apache2.conf”の先に追加したLocationディレクティブの内の
“Require all granted”を削除し、

    AuthUserFile <パスワードファイルへのフルパス>
    AuthName "<領域名>"
    AuthType Basic
    Require valid-user

を追加すればいいでしょう。
ちなみにパスワードファイルはウェブサーバで公開されないディレクトリへ格納ください。
もしディレクトリごとにアクセスするユーザを変えたいという様なことであれば、
“/etc/apache2/apache2.conf”に各ディレクトリで
別々のLocationディレクティブを書けばいいのですが、もっと複雑にしたければ
先のLocationディレクティブに追加した分は代わりに”/var/www/dav/.htaccess”へ書き込み、
“/etc/apache2/apache2.conf”へは

<Directory /var/www/dav>
        AllowOverride All
</Directory>

を追加します。
別設定にしたいディレクトリごとに適切な”.htaccess”とパスワードファイルを作ることで、
そのディレクトリへのアクセスユーザを制限できます。
カレントディレクトリに”.htaccess”がなければディレクトリを親方向に遡って
最初に現れたものが採用されます。
“.htaccess”を使うことの難点はDAVクライアントで
“.htaccess”の存在自体が見えてしまうことです。
まあどんなパーミッションにしようとも(たとえwww-data所有の0777でも)
DAV経由での”.htaccess”の読み書きはできないので、
気にしなければいいだけではあるのですが。

個人的なサーバならこれでも充分ですが、
大規模なユーザアカウントを管理する必要があるなら、
ldapなどと連携させるべきでしょう。

最後にパーミッションについて。
WebDAVクライアントからサーバ上にファイルを作成(コピーによるものも含む)すると、
そのファイルの所有ユーザは”www-data”、所有グループは”www-data”、
パーミッションは”644″になります。
サーバが単なるファイルの保存場所であるならこれでも特に問題はないのですが、
そのサーバが動作しているマシンでもローカルで
それらファイルを編集したい場合は一般ユーザからアクセスできず役に立ちません。
rootユーザになってパーミッション等を変更するのが解決策になりますが面倒です。
実はこれを簡単に解決する方法があります。
“/etc/apache2/envvars”設定ファイルの最後に

umask 000

の行を追加してウェブサーバを再起動するだけで、
ファイルのパーミッションが”666″になるようになり、そのままで編集や削除が可能となります。