LoginSignup
0
0

More than 3 years have passed since last update.

俺様サーバー構築記 - Arch Linux から FreeNAS への ssh 接続@デスクトップパソコン

Last updated at Posted at 2019-05-12

俺様サーバー構築記 - 基本方針で書いたやりたい事の内「データの自動バックアップシステムの確立」に着手し、ZFS データ送受信の機能を使って FreeNAS にバックアップする方針にしたのは前回書いた通りです。

前回は ssh 互換ソフトの dropbear を使えるように整備しました。

今回はデスクトップパソコン(我が家のサーバ)から FreeNAS へ dropbear で接続できるようにします。

デスクトップパソコン(サーバ側)

以下、デスクトップパソコン(我が家のサーバ)のマシン名を server0 とします。

デスクトップパソコン(サーバ側)
# hostname
server0

root ユーザで秘密鍵と公開鍵を作成します。暗号強度の観点から、楕円曲線暗号 ecdsa を使用します。2007年における推奨(予想)では、2019年は 224 ビットの鍵長で十分と考えられていたようです。しかし dropbearkey コマンドでは 224 ビットを指定できません。今回は 256 ビットにしました。

参考文献: 図2 暗号の安全性指標 - 暗号の安全性評価 - NICT NEWS

# whoami
root
# mkdir -p ~/.ssh
# cd ~/.ssh
# dropbearkey -t ecdsa -s 256 -f id_dropbear >authorized_keys
Generating 256 bit ecdsa key, this may take a while...
# cat authorized_keys
Public key portion is:
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLuuIEvB1ZufKyyHUDqrYiieeXyyfX7fsw6kI1Dflpvmj/2CqpwPcNLTHtxrwtYDQXae3HvCepykAu9WQz5gM3c= root@anju
Fingerprint: sha1!! 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:01:23:45:fd

FreeNAS 設定

ssh

FreeNAS の Web インターフェイスを操作して、下記のように設定します。SSH の TCP ポート番号はデフォルトの 22 ではない方が良いと言われています。悪人にとってわかりにくい番号にしましょう。

  1. メニュー>サービス>SSH を選択
  2. SSHの設定:
    • TCP ポート番号: 60022
    • パスワード認証の許可: OFF (セキュリティを考慮するとやっぱりOFFの方が良いでしょう)
    • TCPポートフォワーディングの許可: OFF (これもセキュリティ的にOFFの方が…)
  3. SSH サービスを ON

グループ作成

複数のマシンをバックアップする為に、マシン毎にユーザを作成する事にします。そのユーザ群の為のグループを下記の条件で作成します。

  • グループ名: bak_zfs
  • sudoを許可: ON
  • グループIDの繰り返しを許可: OFF

zfs のスナップショット作成その他のコマンドは root 権限が無いと実行できません。その為 bak_zfs グループは sudo コマンドを使用できるように設定します。

sudo 実行の際のパスワード要求は抑制しておきます、自動化する際の問題になってしまうので。その代わり zfs コマンドしか実行できないように制限します。

念の為 zfs コマンドのフルパスを確認。

FreeNAS
# which zfs
/sbin/zfs

FreeNAS の Web インターフェースでシェルを起動して、 sudoers ファイルを編集する為に visudo コマンドを実行。

FreeNAS
# visudo

%bak_zfs ALL=(ALL) ALL と書かれている行がありますので、これを下記のように書き換えて保存終了します。

%bak_zfs ALL= NOPASSWD: /sbin/zfs

これらの一連の操作を一行野郎 one liner にまとめて自動化したくて調べたんですが、その為には sudoers ファイルを直接操作するしか無さそうです… 可能ではありますが、まあ、行儀は悪いですね。vi マクロを作成する手もありますけど、そこまでする事は無いかなと。そんな訳で今回は素直に手作業しました。

ユーザ作成

バックアップ用のユーザを下記の条件で作成。

  • ユーザ名: bak_server0
  • ユーザーのプライマリーグループを作成: OFF
  • プライマリグループ: bak_zfs
  • Create Home Directory In: /mnt/tank/home/bak_server0 (/mnt/tank の下のどこかにします)
  • シェル: bash (何でも良い筈です)
  • フルネーム: user to backup server0
  • メール: (空欄)
  • パスワード: (空欄)
  • パスワードでのログインを無効にする: OFF
  • Microsoft Account: OFF
  • SSH公開鍵: (上述の、デスクトップパソコン server0 の root ユーザの ~/.ssh/authorized_keys から、ssh-rsa の行を行頭から行末までコピペ)
  • 補助グループ: (空欄)

これで、ユーザ bak_server0 として FreeNAS に ssh 接続可能になります。

デスクトップパソコン(サーバ側)再び

まずは接続テストから。FreeNAS マシンのIPアドレスが 10.0.0.108 の場合:

デスクトップパソコン(サーバ側)
# hostname
server0
# whoami
root
# dbclient -l bak_server0 -p 60022 10.0.0.108 "whoami"

Host '10.0.0.108' is not in the trusted hosts file.
(ecdsa-sha2-nistp256 fingerprint sha1!! 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:01:23:45:b7)
Do you want to continue connecting? (y/n) y
bak_server0

sudo コマンドの制限を確認します(zfs コマンド以外はエラー)

デスクトップパソコン(サーバ側)
# dbclient -l bak_server0 -p 60022 10.0.0.108 "sudo whoami"

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

sudo: no tty present and no askpass program specified
# dbclient -l bak_server0 -p 60022 10.0.0.108 "sudo zfs list" | head -n1
NAME                                                    USED  AVAIL  REFER  MOUNTPOINT

最後の sudo zfs list 実行結果にフィルタ処理をして最初の行だけ取り出したのは、チェックを自動化する為の布石です。

デスクトップパソコン(サーバ側)
# dbclient -l bak_server0 -p 60022 10.0.0.108 "sudo zfs list" | head -n1 | diff -bs <(echo "NAME USED AVAIL REFER MOUNTPOINT") - --label sudo_zfs_list
Files sudo_zfs_list and - are identical

という訳で、うまくいったようです。
やったね :thumbsup_tone2:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0