自宅サーバ群の ssh 設定メモ

自宅サーバは WANに port:80 しか公開していなかったので、LAN内では ftpssh も root でログインしてやりたい放題だった。
リモートでどうこうする必要に迫られたこともなかったし、特にそれが原因で大災害が起きるようなこともなかったと思う。
まあだけど、最近必要だなあと思うようになってきたので、重い腰を上げて sshd まわりの設定を見直した。

やること

  • root ログインをやめる
  • リモート(LAN外)からつなげるようにする
  • パスワードなしでログインできるようにする
  • LAN内サーバでパスワードなしの ssh を可能にする

レシピ

  • ユーザ管理 (useradd(adduser) userdel passwd)
  • ルータの設定
  • SSH (/etc/ssh/sshd_config ~/.ssh/*)
  • アクセス管理 hosts.allow/hosts.deny
  • hosts でも何でも良いので、予めサーバにホスト名でアクセスできるようにはしておく

root ログインをやめる

root でログインしないことにするので、代わりの一般ユーザを作成する。

# useradd -g users -d /home/bayashi -s /bin/bash bayashi
# passwd bayashi
Changing password for user bayashi.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

useradd と adduser は混同しやすいが、Vine Linux ではそもそも同じコマンド(# ls -l adduser)。
「useradd -D」とすると、引数なしで useradd した時のデフォルト設定が見える。
当初、デフォルト確認せずにオプションなしで実行してたら、シェルが /sbin/nologin となっていて、ログインできずにはまった。
useradd をやり直すときは、「userdel -r USERNAME」とすると、ホームディレクトリごと消してくれて楽ができる。


さて、
代わりのユーザができたところで、root によるログインをやめるわけですが「root でログインしない」ということはつまり「root でログイン出来ないようにする」わけです。
設定は、 /etc/ssh/sshd_config にディレクティブを書きます。
(まあ、むしろ root でログインできるようにしたときの逆をするわけですね)

# root によるログインを許可(yes:する no:しない)
PermitRootLogin no

# ログインを許可するユーザ(複数の場合はスペースで区切って並べる)
AllowUsers bayashi

# ホームディレクトリの権限が対象ユーザのみであるかチェック(yes:する no:しない)
StrictModes yes

sshd_config を編集したら sshd を再起動します。

# service sshd restart


なお、
/etc/ssh には sshd_config ではなくて、ssh_config (dがない)というファイルもありますが、こちらは ssh クライアントとして利用する場合の設定ファイルなので、sshサーバの方は sshd_config で設定することになります。


また、
sshd_config をさわる時は、予備で root ログインしているセッションを持っておいた方が良いです。
もちろん、端末のコンソールに直接入れればそれでも良いのですが。
設定を失敗して、ログインできなくなってはまるということを防げます。

リモート(LAN外)からつなげるようにする

root で入れないようにして、代わりのユーザの準備もできたので、リモートからつなげるようにしてみます。
すなわち、リモートから、一般ユーザでパスワード認証をもってログイン出来るようにします。


まず、
ルータを設定。
port:22 に来たアクセスを規定のサーバに向かうように設定します。


そして、
LAN内のみからアクセスできるように制限していた /etc 下の hosts.allow/hosts.deny を編集します。


[/etc/hosts.deny]

ALL : ALL


[/etc/hosts.allow]

sshd : ALL
ALL : 192.168.1.


もうちょっと制限かけたいところですが、取り急ぎ sshd へのアクセスは全部通るようにしてみた(ぇ
これで、外部から bayashi ユーザでログインできればOK。
念のため、root でのログインが出来なくなっていることも確認する。

パスワードなしでログインできるようにする

LAN内サーバでパスワードなしの ssh を可能にする

パスワードなしでログインできるようにするといのは、RSA認証による秘密鍵と公開鍵の生成を行い、サーバとクライアントの双方でそれらの鍵を利用してログインをするというもの。
それの応用というか、自宅サーバ群にまとめて設定をして、パスワードなしで sshコマンドを使った行き来が自由にできるようにする。


この辺のやり方は検索すればいくらでも出てくる。
今回はこちらで紹介されていたスクリプトを少し改修して、サクッとやってしまった。

#!/bin/sh

#------------------
# set param
hosts="Server01 Server02 Server03 Server04 Server05"
user=bayashi

#------------------
cd
mkdir .ssh
chmod 0700 .ssh
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/*

for host in ${hosts}
do
    ssh ${user}@${host} 'ssh-keygen -t rsa'
    ssh ${user}@${host} 'cat ~/.ssh/id_rsa.pub' | cat ->> ~/.ssh/authorized_keys
done

for host in ${hosts}
do
    scp ~/.ssh/authorized_keys ${host}:~/.ssh
    ssh ${user}@${host} 'chmod 700 ~/.ssh; chmod 600 ~/.ssh/*'
done

exit


秘密鍵の id_rsa をクライアントに持っていき、ログインできたら終了。
サーバの id_rsa は削除してしまう。
それぞれサーバ間を ssh で行き来できることも確認する。


以上、疲れた。


パスワードなしのログインは推奨されないので、RSA認証とパスワード認証は併用した方が良いと思います。