Raspberry piでWebDavサーバを立ててどこからでも使えるファイルサーバを設定する
はじめに
自前のファイルサーバを作って家の外からでもアクセスができるようにしたい。
google driveとかのオンラインストレージでもいいんだけども、使い勝手とか、容量制限とか、情報管理だとか。。。
ということで、自宅でWebDavを使ってファイルサーバを立てよう。
材料
- Raspberry pi zero WH: zeroでなくてもよいのだけれども、消費電力が少ないので。電源やらMicroSDやらUSBの変換やらも。
- Elecom EDC-FUA2H-B: USBハブとLANアダプタが一体となったもの。これでなくてもよいし、無線でつないでもよいのかも
- Buffalo SSD-PGM480U3-B: 消費電力の点からSSDにした。もちろん、これでなくてよい
設定
OSのインストール
普通にRaspbian 2019-09-26のliteをインストール。 起動したら
sudo raspi-config
でsshを有効に、timezone等を設定する。
ip addr
アップデート&必要なソフトのインストール
sudo apt-get update sudo apt-get upgrade sudo apt-get install gdisk xfslibs-dev \ apache2 libapache2-mod-encoding certbot nmap dnsutils
固定IPの設定
/etc/dhcpcd.confの
# Example static IP configuration:
以降の行を参考に固定IPを設定する。 static routersとstatic domain_name_serversは環境によって違うと思うが、 同じネットワークにつながっているwindowsPCのコマンドプロンプトの
ipconfig /all
で確認できると思う。自分の場合は、
# Example static IP configuration: interface eth0 static ip_address=192.168.1.101/24 #static ip6_address=fd51:42f8:caae:d92e::ff/64 static routers=192.168.1.1 static domain_name_servers=192.168.1.1
のように設定した。101の番号はたぶん、254より小さいある程度大きい数を設定すれば大丈夫なことが多い (本当はルーターのDHCP割り当てになっていない番号にする)。
SSDのフォーマットとマウント
パーティションの設定
ls /dev/disk/by-id/とかlsblkとかでSSDの名前を特定する。 /dev/disk/by-id/usb-BUFFALO_SSD-PGU3-A_0040501491102559-0:0なら、
sudo gdisk /dev/disk/by-id/usb-BUFFALO_SSD-PGU3-A_0040501491102559-0:0
でgdiskを起動してパーティションを設定する。 ?でヘルプが表示される。oで、新しいパーティションテーブルを作成する。 基本的にディフォルトどおり、全領域を使った8300 Linux filesystemのパーティションを作成すればよい。
フォーマット
/dev/disk/by-id/usb-BUFFALO_SSD-PGU3-A_0040501491102559-0:0-part1などが作られたら フォーマットする。
mkfs.xfs /dev/disk/by-id/usb-BUFFALO_SSD-PGU3-A_0040501491102559-0:0-part1
xfsでなくてもよい
マウント
/etc/fstabに
/dev/disk/by-id/usb-BUFFALO_SSD-PGU3-A_0040501491102559-0:0-part1 /share xfs defaults,nofail 0 0
を記述。/shareはマウント先なので好きなディレクトリ名にする。 nofailがないと起動時にこのSSDが見つからないとき起動しない。
sudo mkdir /share sudo mount -a
dfコマンドでマウントできているか確認する。
Webサーバの設定
とりあえず起動
sudo apache2ctl configtest # 設定ファイルのチェック sudo systemctl restart apache2 sudo systemctl enable apache2
でサービスを起動。同じネットワークにつながっているWindowsPCなどのブラウザから http://192.168.1.101/ で接続を確認する。
ルータの設定
プロバイダごとに使っているルータが異なるので、設定方法はそれぞれであるが、 とりあえず、先に確認したゲートウェイのIPアドレスに対して、 http://192.168.1.1 などと接続すれば設定画面に行くことが多い。 型番からマニュアルを探して初期パスワードを入れる。 外部からの80番ポートの接続を192.168.1.101番の80番へ転送する設定をする。 このとき、グローバルIPアドレスまたはFQD名も調べる。 自分の場合は、abcde.tkyc123.ap.nuro.jpのような形式であった。
スマホのwifiをoffにして、外からFQDNに接続して見られるか確認する。 http://abcde.tkyc123.ap.nuro.jp/
httpsの設定
ファイルをやり取りするときには通信を暗号化しておいた方がよい。 暗号化通信を行うときには認証局に登録する必要がある。 無料で利用できるletsencryptを使わせてもらう。
sudo certbot certonly --webroot -w /var/www/html/ -d abcde.tkyc123.ap.nuro.jp
メールアドレスを入力して質問に答えると、/etc/letsencrypt/live/の下に鍵ファイルが生成される。
apacheの設定をする。
cd /etc/apache2/sites-enabled/ sudo ln -s ../sites-available/default-ssl.conf sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.orig
/etc/apache2/sites-enabled/default-ssl.confの鍵ファイル設定部分を書き換える
SSLCertificateFile /etc/letsencrypt/live/fp7cdbcf49.tkyc627.ap.nuro.jp/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/fp7cdbcf49.tkyc627.ap.nuro.jp/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/fp7cdbcf49.tkyc627.ap.nuro.jp/chain.pem
起動
sudo a2enmod ssl sudo apache2ctl configtest sudo systemctl restart apache2
httpsで接続できるか確認する。 ルータも443番を先ほどと同様に設定する。
httpでつないだ時にhttpsに転送する。
vi /etc/apache2/sites-enabled/000-default.conf
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
を追加。
sudo a2enmod rewrite sudo systemctl restart apache2
httpでつないでhttpsに転送されるか確認する。
WevDavディレクトリの設定
http://abcde.tkyc123.ap.nuro.jp/e3davで接続できるようにする。 万が一のため、/davだと推測されて攻撃対象になることもあるかもしれないので、少し名前を変えた。 実体は/share/davとする。
default-ssl.confのVirtualHostのタグ内に
Alias /e3dav /share/dav <Directory /share/dav> Options Indexes FollowSymLinks AllowOverride None AuthType Digest AuthName davzone AuthUserFile /etc/apache2/htdigest Order deny,allow Require valid-user </Directory>
を追加。
digest認証ファイルを作成
sudo htdigest -c /etc/apache2/htdigest davzone username
とすると、パスワードを聞かれるので入力する。 davzoneは先ほどのAuthNameと一致させる。usernameは適当なユーザ名にする。
apacheを再起動してブラウザからダイジェスト認証で接続できるか確認する。 このときはダウンロードしかできない。
Webdavの設定
default-ssl.confのDirectoryのタグ内に
DAV On
を追加。
作成したファイルの所有者がapacheを動かしているユーザ(www-data)になってしまう。 www-dataに書き込み権限を与えてもよいが、一般ユーザでapacheを動かすことにする。 /etc/apache2/envvarsで
#export APACHE_RUN_USER=www-data #export APACHE_RUN_GROUP=www-data export APACHE_RUN_USER=pi export APACHE_RUN_GROUP=pi
起動
sudo a2enmod dav sudo a2enmod dav_fs sudo systemctl restart apache2
WindowsエクスプローラのPCからコンピュータ、ネットワークドライブの割り当て、 https://abcde.tkyc123.ap.nuro.jp/e3dav/ で接続できるか確認する。