ぺーぱーふぇいす

雑記と備忘録。私はプログラマ。

【Ubuntu Server 18.04】初期セットアップ

f:id:PaperFace:20190503184057p:plain

Ubuntu Server 18.04をセットアップする時の最低限のセットアップとか。
主に作業用ユーザ作成から、SSHポートの変更、公開鍵の設定まで。

前提

Ubuntu Server 18.04を想定。
インストールは完了したばかりの状態で、SSHもしくは実機でrootログインできる状態。
今回の手順ではポート22のパスワード認証でのSSH接続している想定。なので、ちゃっちゃと設定して終わりにしたほうが良い。

公開鍵などの作成、公開鍵でのSSH接続する端末はMacを想定🍎

サーバの名前はhogeserverとする。
サーバでの作業ユーザはhogeuserとする。

作業用ユーザ登録&sudoグループ追加

ここからはサーバ側での操作。
rootでの作業をなくすため作業用ユーザをadduserで作成して、gpasswdでsudoグループに追加する1

# adduser hogeuser
# gpasswd -a hogeuser sudo

以降はサーバにrootでログインせずに、作業ユーザでログインする。

鍵作成

クライアントでの操作。
下記コマンドで鍵を生成。

$ ssh-keygen -t ed25519

作成される場所とパスフレーズを問われるので入力。
ちなみに、今回は暗号のタイプ(アルゴリズム)をEd25519で指定。強固でパフォーマンスが良いらしいので使うことに。
また、RSA方式の鍵を作るときと違って、ビット数を指定しなくて良いのもポイント。

注意点として、こちらのEd25519はOpenSSH 6.5から使える。心配な場合は、ssh -VでOpenSSHのverを要確認。

鍵の移動

鍵の移動をする。

サーバの作業。
まずはサーバ側でディレクトリを作っとく。作業ユーザでログインして、.sshディレクトリを作成。

$ mkdir ~/.ssh

クライアント(Mac)での作業。
scpを使って鍵をサーバに送り込む。
コマンドの書式は、scp -P <ポート番号> <鍵のパス> <作業ユーザ名>@<サーバ名>:<サーバ側の鍵の設置パス>
例としては下記のようなコマンドになる。

$ scp -P 22 ~/.ssh/id_ed25519.pub hogeuser@hogeserver:~/.ssh/authorized_keys 

鍵のパーミッションを変更

クライアント側。

$ chmod 700 ~/.ssh

サーバ側。

$ chmod 600 ~/.ssh/authorized_keys

SSHのポート変更とルートログインの禁止

サーバ側で作業。
/etc/ssh/sshd_configファイルを編集する。
編集の前にコピーしてバックアップしとく。

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config_org

viを起動。

# vi /etc/ssh/sshd_config

編集する部分は下記の通り。
設定するポートとしては、予約されているポート番号ではない動的(ダイナミック)ポート番号である49152〜65535あたりから選出する2

編集箇所はこんな感じ。

#Port 22
↓
Port <任意のポート番号>
PermitRootLogin yes
↓
PermitRootLogin no

ファイアウォール設定

Ubuntuファイアウォール設定として、ufwを使ってSSHに設定したポート番号を設定しておく。

# ufw allow <設定したsshのポート番号>
# sudo ufw enable

設定後、ufw status verboseで設定したポートがルールに追加されていることや、incomingルールがdenyになっていることを確認(デフォルトはdenyだけど念の為)。

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
<設定したポート番号>                      ALLOW IN    Anywhere
<設定したポート番号> (v6)                 ALLOW IN    Anywhere (v6)

ここで一旦SSHサービスを再起動してログアウト。

$ sudo service ssh restart
$ exit

クライアント側でSSHの設定をしておく

サーバはともかく、クライアント(Mac)から複数のサーバにSSHすることだと思う。
それ以外にも、ssh <ユーザ名>@<サーバ名>といったコマンドを書くのもめんどくさいので、~/.ssh/configにサーバの設定を書き込む。

$ vi ~/.ssh/config

書き込む内容はこんな感じ。

$cat ~/.ssh/config
# hogeserver
Host hogeserver
    HostName xxx.xxx.xxx.xxx
    User hogeuser
    Port xxxxxxx
    IdentityFile ~/.ssh/id_ed25519

以降、こんな感じで接続できる。
ポート、ユーザ、鍵の指定が省略できる。

$ ssh hogehogeserver

SSHによるパスワード認証をやめる

クライアントからサーバに鍵認証でログインし、鍵認証できることを確認する。 鍵認証できたらパスワード認証 はもうしないので、パスワード認証を付加に設定する。
サーバ側の/etc/sshd_configを編集する。

$ sudo vi /etc/ssh/sshd_config

編集後はこんな感じ。

PasswordAuthentication yes
↓
PasswordAuthentication no 

SSHを再起動。

$ sudo service sshd restart

一旦サーバからログアウトし、クライアントからパスワードによる認証ができないこと、鍵認証ができることを確認。

クライアント側の公開鍵を削除

クライアント側での作業。
不要になった公開鍵を削除。

$ rm ~/.ssh/id_ed25519.pub

おわり🌱

余談

ここらへんの作業フロー用に手順を探してみると、Ubuntu 16.04の情報だったり、鍵がRSAだったりしたので個人的なカンペとして書いてみた。
この手順のあと、必要に応じてログとかアラートとか、バックアップを設定するのだろうけどひとまずここまで。


  1. gpasswdじゃなくてusermodの場合はusermod -aG sudo hogeuser

  2. 参考: TCPやUDPにおけるポート番号の一覧 - Wikipedia