Raspberry PiでセキュアなNASを作ろう

みなさんこんにちは。
先輩からRaspberry Pi 3B+を御馳走して頂いたので、自宅で使うためのセキュアなNASを調理していきます。

#環境と目標
- Raspberry Pi 3B+
- Raspberry Pi OS （Debian 10.4ベース）
- 500GB USB-HDD
- ファイル暗号化にはVeraCrypt
- ファイル共有にはSamba

***LAN内にはWin10マシンとラズパイ、Androidスマートフォンがあり、各デバイスでNASにアクセス可能にする***

#やってみよう
Raspberry Pi OSをインストールし、SSHでデフォルトユーザにログインした直後から話を進めていきます。

###前準備
まずはSambaをインストールします。
```sudo apt install samba```
Sambaを使用すると、WindowsやSMBプロトコルに対応したAndroidファイルマネージャなどでNASにアクセスできるようになります。

USB-HDDをマウントするためのディレクトリを作成します。
```mkdir /home/pi/share```
デバイス名は```lsblk```で確認できます。

マウントしましょう。
```sudo mount /dev/sda1 /home/pi/share```

###Sambaの設定
続いてSambaの設定をしていきましょう。
**/etc/samba/smb.conf** がSambaの設定ファイルです。（念のためホームディレクトリ等にバックアップしておくことをお勧めします。）

Vimなどのテキストエディタで開くと、

```console:smb.conf
workgroup = WORKGROUP
```

という行があるので
各自のワークグループ名を入力してください。
（LAN内のWindowsマシンでWin+Rキーを押して名前を指定して実行にて```sysdm.cpl```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269735/545c1184-08c0-8133-be85-22254ad8f716.png)
で、確認できます。）

そして共有したいディレクトリを指定します。
smb.confの末尾に書きましょう。

```config
[share] #表示名
  path = /home/pi/share  #共有したいディレクトリを入力
  writable = yes
  read only = no
  force create mode = 777
  create mask = 777
  force directory mode = 777
  directory mask = 777
```
以上でSambaの設定は終了です。

Windowsマシンの```エクスプローラー > ネットワーク > RASPBERRYPI```からNAS内に読み書き可能なことを確認しましょう。

###Veracryptとは
AES等の暗号化アルゴリズムで暗号化されたボリュームを作成できるソフトウエアです。
パーティション自体も暗号化することができるという優れものです。

###実際にやってみましょう
Veracrypt自体はGUI、CLIどちらでも利用可能ですが、暗号化ボリュームの作成はGUIの方が分かりやすいと思うのでWindows側で進めていきます。

Veracryptを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269735/2e17297d-d3b1-a619-77f0-1284c4121881.png)

左上の「ボリューム」より、新規ボリュームの作成を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269735/29c3d13b-fcbb-9436-71e7-030a904464d4.png)

暗号化されたファイルコンテナの作成を選択し、次へをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269735/b3bb365a-e086-f214-66e2-3f954eb4f5d8.png)

ここでは隠しボリュームを使用しないので、このまま次へをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269735/15da1c8e-8998-4b92-0862-b4a751baa90d.png)
ボリュームを作成する位置は、先程構築したNAS内にしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269735/df0dc74b-30a0-3d1e-2597-33eee9a62c78.png)
こちらもそのまま次へをクリックしてください。

あまり大きな容量を指定するとRaspberryPiは非力なのでマウントする際に時間がかかるので容量は小さめにすることをおすすめします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269735/cde2b0b6-2251-b01c-86f0-3513004e94fc.png)
パスワードは複雑で長いものを使用することをおすすめします。

次のウィンドウで暗号化作業が始まり、完了するとNAS内に暗号化されたボリュームができていると思います。

SSHでの作業へ移ります。

###実は
Veracryptは標準のリポジトリには存在しません。（ソースコードの一部がオープンソースでないため）

なので、マウントにはZulucryptを使用します。（いちいち公式サイトに取りに行くのがめんどい）
```sudo apt install zulucrypt-cli```

インストールが終了したら、暗号化ボリュームをマウントするディレクトリも作成しておきましょう。
```mkdir ~/volume```

オープンとマウントを別々に行います。

```sudo zuluCrypt-cli -O -d /(共有フォルダ)/(ボリューム名)  -t vcrypt```

パスワードを入力し、オープン終了までしばらく待ちます。
オープンが終了し、```lsblk```で確認するとzuluCryptから始まるデバイス名が確認できると思います。

```sudo mount -o uid=(uid) -o gid=(gid) /dev/mapper/(デバイス名) /home/pi/volume```でマウントします。

uidとgidは```id```コマンドで確認できます。

###最後に

マウントした暗号化ボリュームをLAN上に共有してみましょう。

smb.confを開き、末尾に新しく設定を追加していきましょう。


```config
[volume] #表示名
  path = /home/pi/volume  #共有したいディレクトリを入力
  writable = yes
  read only = no
  force create mode = 777
  create mask = 777
  force directory mode = 777
  directory mask = 777
```

```sudo systemctl smbd nmbd```でSambaを再起動し、確認してみましょう。