Ubuntuサーバの初期設定をした話

はじめに
とあるお仕事で、UbuntuなVPSの初期設定をしなくちゃいけなくなりました。
毎日やるような仕事でもないので、何やればいいんだっけ???ってなったので次の機会に思い出すのを楽にするためのメモ書きです。
筆者は本来、フロントエンドが専門な人間なので、不正確な情報を含む可能性があります。なにとぞ。
また、最低限の内容しか書かない予定です。なにとぞなにとぞ。
目標
今回の目標はこんな感じです。
意識埋没系なので、最低限のことしかしません。
- 諸々の初期設定を終えること。
- rootログインができないこと。
- SSHで公開鍵方式なログインができること。
- パスワードログインが禁止されてること。
- 最低限の不正アクセス対策なんかを終えること。
UFWとかそのあたりは、過去にメモ書きしてるので、そちらも参照のこと。
nginxとかいれる記事も、メモ書きしてるのでそちらもどうぞ。



前提条件
手元のPCにSSHできるターミナルが入ってることを前提とします。
macならTerminal、windowsならWSLが入ってる前提です。
teratermでもいいと思いますが、使ったことがないのでよくわかりません。
筆者はwindows+WSLな構成が手元にあるので、それを前提に進めます。
また、Linuxのコマンドなどの基礎知識があるってなことを前提とします。
別に、そんな危ないことするつもりはないのでコピペで同じことを再現してもいいとは思うけど、何やってるのかわからない場合には、ちゃんとぐぐってからコマンド打とうね!!
準備
VPS
とにもかくにも、VPSの契約をします。
AWSのLightsailでもSAKURAのVPSでもGMOのConoHaでも、別になんでもいいと思います。
わたしにはこれといったこだわりないです。
ドメイン
これもRoute53で管理しようがsakuraで取得しようがなんでもいいと思います。
AWSで構成つくるならRoute53の方が小回り効くしいいとは思うけど、本題とは関係ないことなので、とりあえず懇意会は小難しいことは考えないことにします。
はじめてのつうしん
VPS契約したら、とりあえずつないでみます。
しかし、毎回毎回ユーザ名やらIPやらを打つのは面倒くさすぎるので、まずは手元の環境(WSL)の~/.ssh/config
を編集していきます。
ssh configの編集
$ sudo vim ~/.ssh/config
とりあえず、以下のようにしてみました。
Host
の部分はなんでもいいです。コンソールでssh example.com
と打ってつなげるようになるってだけです。別にドメイン名である必要性すらありません。
HostName
には、仕入れてきたVPSのIPアドレスを書いときましょう。
User
は、その名の通りユーザ名です。
port
は、初期状態ならたぶん22
なんじゃないかな?そうでない場合には指定されてる番号を書きましょう。
Host example.com
HostName 123.45.67.89
User ubuntu
port 22
接続
configを編集出来たら、とりあえずつないでみます。
$ ssh example.com
この際に、たぶん、パスワードを聞かれます。契約した時に発行されるパスワードを入力しましょう。
最初にやっとくべき細々したこと
ユーザの追加
初期ユーザで問題ない人には必要ないかもしれないけど、ubuntu
とかって名前のユーザだったりするなら、自分の名前とかにするほうがいいかもしれない。
$ sudo adduser eight_pm
追加したら、sudoグループにいれときましょう。
$ sudo usermod -aG sudo eight_pm
新しいユーザでログインしなおしてみる。
新しいコンソールを開いて、手元のPC(WSL)の ~/.ssh/config
をもう一度編集。
ユーザ名を差し替えます。
$ sudo vim ~/.ssh/config
Host example.com
HostName 123.45.67.89
User eight_pm
port 22
$ ssh example.com
ちゃんとつながったならokです。
もし、初期ユーザが必要ないなら、そのユーザを消して置いた方がセキュリティ的にもよいと思います。
$ sudo userdel -r ubuntu
user <username> is currently logged in
みたいなエラーが出た場合には、ログアウトしてみたり、ps aux | grep <username>
でプロセス探してkill
するなり、めんどうならsudo -u <username> kill -9 -1
でそのユーザの使ってるプロセスを全部落としてもいいと思います。
つまり、運用中のサーバでは使わない方がいいです。
パッケージの更新
とりあえず、aptの更新をかけておきます。
$ sudo apt update
updateが完了したら、
$ sudo apt upgrade
も流しておきましょう。
ホスト名の変更
別になんの名前でもいいと思うのですが、とりあえずhost.example.com
という名前にした想定
$ sudo hostnamectl set-hostname host.example.com
公開鍵認証にする
まずは手元のPCで鍵を作る。
$ ssh-keygen -t rsa -b 4096
たぶん、~/.ssh
ディレクトリ内に秘密鍵と公開鍵の2つができてるはずなので、確認。
$ cat ~/.ssh/<鍵の名前>.pub
rsa AAAA............(中略).............==
もし、 -----BEGIN OPENSSH PRIVATE KEY-----
ってのが先頭に出てきてたら、それは秘密鍵です。それではないです。
その文字列をコピーして、リモートサーバに入れます。
ssh-copy-id
なんかで飛ばしてもいいと思いますが、なんかいろいろめんどいので直に書いちゃいます。
リモートサーバにログインして、
$ vim ~/.ssh/authorized_keys
でファイルを作り、先ほどの文字列をペーストし、保存。
rsa AAAA............(中略).............==
鍵の準備が出来たら、sshdの設定をいじります。
鍵認証のついでに、ポート番号も替えて、認証試行回数も有効にします。
$ sudo vim /etc/ssh/sshd_config
設定ファイルを開いたら、以下2行を追加します。既存の文字列を編集してもよいとおもいます。
また、ポート番号(Port
)については、なんとなく2002
と指定してみましたが、てきとうな数字に変えてもよいと思います。
Port 2002
PubkeyAuthentication yes
PasswordAuthentication no
MaxAuthTries 6
そしたら、sshdを再起動します。
$ sudo systemctl restart sshd
もし、Failed to restart sshd.service: Unit sshd.service not found.
とか言われたら、
$ sudo systemctl enable ssh
$ sudo systemctl start ssh
で立ち上げるとよいと思います。
またまたログイン情報が変わったので、手元のPCの設定も併せて変更しましょう。
$ sudo vim ~/.ssh/config
Host example.com
HostName 123.45.67.89
User eight_pm
IdentityFile ~/.ssh/<鍵の名前>
port 2002
$ ssh example.com
無事、接続ができたら完了です。
ファイアウォールなどの設定
これは以前にUFWとfail2banを組み合わせる方法を記載したのでそちらで解決したことにします。

