sshの初期設定

サーバーにログインする際に使うsshに関するお薦めの設定を説明します。

  • rootでログインしない
  • パスワードでログインしない

Linuxに限らずFreeBSDでも管理者はrootです。しかし、rootで直接ログインするのは避けるようにします。AWSやGCPではデフォルトでrootユーザーによるログインは禁止されています。なぜそうするのかというと、一般ユーザーでログインするようにしていれば、万が一セッションを乗っ取られてもサーバーのコントロールが奪われることにはならないからです。

まず最初に作業用のユーザーを作成しましょう。さくらのVPSでFreeBSDをインストールした際にVNCコンソールを使ったと思います。こちらからログインして作業してもいいでしょう。

ユーザーを作成する

adduserコマンドで対話的に作成します。もしもインストーラーでユーザーを作成済であれば、飛ばして構いません。グループにwheel operator networkを追加しているのは理由があります。

  • wheel: suを使うために必要
  • operator: 一般ユーザーでshutdownをするために必要
  • network: 一般ユーザーでネットワーク関連のコマンドを使うのに必要
# adduser
Username: ユーザー名
Full name:(空欄でいい)
Uid (Leave empty for default):
Login group [ユーザー名]:
Login group is ユーザー名. Invite ユーザー名 into other groups? []: wheel operator network(この3つを加えておくといい)
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: tcsh(※Linuxと違い、FreeBSDでbashはデフォルトではありません)
Home directory [/home/ユーザー名]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password: パスワードを入力
Enter password again: パスワードを入力
Lock out the account after creation? [no]:
Username   : ユーザー名
Password   : ****
Full Name  : 
Uid        : 1001
Class      :
Groups     : ユーザー名 wheel operator network
Home       : /home/ユーザー名
Shell      : /bin/tcsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (ユーザー名) to the user database.
Add another user? (yes/no): no
Goodbye!
#

bashが使いたい場合はpkgコマンドでbashを追加してください。

# pkg install bash
# echo /usr/local/bin/bash >> /etc/shells
# chsh /usr/local/bin/bash ユーザー名

ssh公開鍵を登録する

パスワードはソーシャルエンジニアリングなどで盗まれるリスクがあります。ssh公開鍵によるログインを使うようにしましょう。

作成したユーザーにパスワードでログインできることを確認したら、次はssh公開鍵を作りましょう。これはFreeBSDサーバーではなく、手元の端末側で行います。既に公開鍵がある場合はそれを使って構いません。

% ssh-keygen -b 384 -t ecdsa

次にssh公開鍵をFreeBSDサーバーに設定します。

% mkdir .ssh
% cat > .ssh/authorized_keys
(ここにssh公開鍵 id_ecdsa.pub の中身をコピペする)
Ctrl-D
% chmod -R go-rwx .ssh

公開鍵でログインできればOKです。

sudoを設定する

一般的にrootになるにはsuコマンドを使いますが、suの問題点はrootのパスワードが必要であることです。先に書いたようにrootのパスワードは使わないに越したことはありません。

そこでsudoを使います。sudosuのように特権(root権限)を得ることができますが、違いはそのユーザーのパスワードを使うという点です。sudoはデフォルトではインストールされていないので、pkgコマンドを使ってインストールします。最初のインストールはrootでないとできないので、rootでログインするかsuを使いましょう。

# pkg install sudo

このままでは作成したユーザーはsudoを使えません。sudoで特権が得られるように設定します。FreeBSDではports(pkgコマンド等でインストールしたパッケージ)は/usr/localにインストールされます。そのため、設定ファイルも/etc/ではなく/usr/local/etcになります。

# cd /usr/local/etc/sudoers.d
# cat > ユーザー名
ユーザー名 ALL=(ALL) ALL
Ctrl-D
# chmod 440 ユーザー名

これで作成したユーザーでsudoできるようになります。whoamiを実行するとrootになっているのが分かります。

% whoami
ユーザー名
% sudo whoami
root

rootログインを無効にする

FreeBSDのデフォルトではrootでsshログインできないようになっています。さくらのVPSでインストールしたFreeBSDではrootでのsshログインが許可されている場合があります。

/etc/ssh/sshd_configを確認しましょう。下記のようにPermitRootLoginがコメントアウトされていれば大丈夫です。yesになっていた場合はコメントアウトしてください。

(省略)
# Authentication:

#LoginGraceTime 2m
#PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
(省略)

ここまでで十分ではありますが、更にセキュリティを強化したい方向けの設定を書いておきます。

sshのポートを変更する

sshはデフォルトではポート22を使います。これは共通であるがために、sshのログインを試みようとする攻撃の対象となりがちです。

パケットフィルターを設定している場合にはポート22へのアクセスを制限しているので必要ないかもしれませんが、「全て許可」にしている場合には別のポートに変えておくことで攻撃の対象にされにくくすることができます。

sshのポート変更は/etc/ssh/sshd_configでもできますが、私は/etc/rc.confによる変更をお薦めします。以下はポート22222に変更する場合です。

% sudo sysrc sshd_flags='-p 22222'
% sudo /etc/rc.d/sshd restart

ところで、/etc/rc.confを編集するためのsysrcなんてコマンドがあるんですね。今回この記事を書くにあたって調べて初めて知りました。(どうやらFreeBSD 9.2で追加されたらしい)

私のような古参はvi/etc/rc.confを編集することしか知らないので、コマンドで編集できると知って新鮮な気持ちになりました。ちなみにviが苦手な人はeeというエディタ(Linuxのnanoみたいなやつ)もあるので、使い易い方をお使いください。

参考

hideishi

艦好きをこじらせたダメ社会人。毎日楽しくbashとphpとjsと、最近はluaも書いています。三年振りにUKから帰国。新米指揮官@ドルフロ。TRPGではFEARゲーが好き。

コメントする