サーバーにログインする際に使う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
を使います。sudo
はsu
のように特権(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
みたいなやつ)もあるので、使い易い方をお使いください。
参考
- FreeBSD Handbook, User and Basic Account Management
https://docs.freebsd.org/en/books/handbook/basics/#users-synopsis - FreeBSD Handbook, Shells
https://docs.freebsd.org/en/books/handbook/basics/#shells - FreeBSD Handbook, Using pkg for Binary Package Management
https://docs.freebsd.org/en/books/handbook/ports/#pkgng-intro