webarena indigo での ubuntu22.04 の初期設定


WebArena Indigoでは
インスタンス作成時にsshkeyを必ず設定しなければならない。ダウンロードしたsshkeyは任意の場所に保管しておく。作成されたインスタンスはユーザー’ubuntu’によるsshの公開鍵認証によるログインのみ許された状態 ubuntuのパスワードは半角空白1文字
ポートは22
( 参考 https://help.arena.ne.jp/hc/ja/articles/360049807634-SSH接続でインスタンスにログインする-Indigo- )

## ssh接続

```
ssh -p 22 -i <認証鍵のパス>  ubuntu@<ipアドレス>
```

ipv6の場合、契約しているプロバイダがipv6に対応していない場合はエラーになるので、wi-fiの契約を見直すか、ipv4のインスタンスを作成する。

ユーザー名をデフォルトのubuntuから変更する。sshでログインしている状態ではユーザー名の変更ができないので、新たなユーザーを作る。

rootユーザーになっておく。

```
sudo su
```

## 新しいユーザーの作成

```
adduser <ユーザー名>
```

パスワード設定が要求されるのでパスワードを入力する。その後のユーザー情報の設定はフルネームや電話番号といったものなので設定しなくとも良い。設定しない項目はEnterを押す。


作ったユーザーにsudo権限を付与する

```
usermod -aG sudo <ユーザー名>
```


このユーザーでログインできるようにsshログインにパスワードを許可したいが、ubuntuユーザーのパスワードが半角空白1文字なので変更しておく。

```
passwd ubuntu
```

New passwordと表示されたら新しいパスワードを入力する。

## sshの設定変更
次に、パスワードでsshログインできる設定にする。
sshの設定ファイルがあるディレクトリに移動する。

```
cd /etc/ssh
```

ファイルを確認してみる。

```
ls -al
```

(`-a`は隠しファイルの表示、`-l`は詳細情報の表示オプション)

sshd_config が全体、ssh_config がユーザーごとのsshの設定ファイルである。
sshd_config を編集する。

```
vi sshd_config
```

多数の設定項目が#でコメントアウトされた状態になっている。
ここでviの使い方を示しておく。

>`/‘検索文字’` 	で検索
`i` 	で入力モード
`esc` 	で入力モードの終了
`:w`	で上書き
`:q`	でファイルを閉じる

sshd_config 内の`PasswordAuthentication`を`yes`に、`PubkeyAuthentication`を`yes`にしてコメントアウトを外し、`:wq`でsshd_config を保存して閉じる。

sshd_configの構文チェックを行う。

```
sshd -t
```

何も表示されなければ構文エラーがない。
sshd_configの設定を反映する。

```
systemctl restart ssh
```

ここで別のターミナルから作成したユーザーにパスワードでログインできるか確認する。

```
ssh <ユーザー名>@<ipアドレス> -p 22
```

確認できたら、ssh接続を切っておく。

```
exit
```

## 公開鍵認証のキーペアの作成
次に、作ったユーザーに公開鍵を渡して、公開鍵認証ができるようにする。
公開鍵はwebarena Indigoが作ったものをコピーしてもいいが、ローカルマシン(自分がターミナルを開いているマシン)上に公開鍵と秘密鍵のペアを作成して特定の場所に保存しておくことでssh接続の際にsshkeyを指定する必要がなくなる。

sshのキーペアがない場合は作る。

```
ssh-keygen
```

とすると、

>Generating public/private rsa key pair.
Enter file in which to save the key (/\<username\>/.ssh/id_rsa):

と表示されるので、Enterを押すか、別のパスを指定する。これまでにSSHの鍵ペアを生成したことがある場合、次のプロンプトが表示される。

>/home/\<username\>/.ssh/id_rsa already exists.
Overwrite (y/n)?

これが表示されたらすでに鍵があるので`n`と入力して終了する。これが表示されない場合は、

>Enter passphrase (empty for no passphrase):

と表示される。ここでパスフレーズを入力すると公開鍵認証の際にパスフレーズの入力が求められる。

続いて公開鍵をホストマシンにコピーする。

```
ssh-copy-id <ユーザー名>@<ipアドレス>
```

こうすることで、ssh接続の際に、自動で/home/\<username\>/.ssh/id_rsa (秘密鍵)から署名が作成されホストコンピュータの/home/\<username\>/.ssh/authorized_keys (公開鍵)によって署名が検証される(公開鍵認証)。パスフレーズを設定した場合はパスフレーズの入力が求められる。ユーザーのパスワードは求められなくなる。(求められたら設定がうまくいっていない)

```
ssh <ユーザー名>@<ipアドレス> -p 22
```

## sshの設定変更
ここからは、新しく作成したユーザーでsshログインした状態でコマンドを実行していく。
公開鍵認証ができるようになったので、sshd_configの設定を変える。

```
sudo vi  /etc/ssh/sshd_config
```

`PermitRootLogin`を`no`、`PassworrdAuthentication`を`no`として、rootログインとパスワードによるログインを禁止する。また、`Port`がデフォルトの22のままだと不正アクセスの標的にされやすいので、`Port`を私用ポート番号である49152から65535のいずれかの値に変更しておく。`:wq`でsshd_configを閉じ、構文チェックをする。

```
sudo sshd -t
```

エラーがなければ、sshの設定を反映する。

```
sudo systemctl restart ssh
```

別のターミナルからsshログインができることを確認する。

```
ssh <ユーザー名>@<ipアドレス> -p <設定したポート番号>
```

## ファイアーウォールの設定
次にファイアーウォールの設定をする。ufw(Uncomplicated FireWall)がubuntuで標準的に利用できるファイアーウォールである。ufwではポートを指定せずともアプリケーションをしていするだけでファイアーウォールが設定できる。OpenSSHの許可をする場合は次のようになる。

```
sudo ufw allow OpenSSH
```

しかし、sshd_configでデフォルトの22から任意のPort番号に変更しているため、うまく動作しない。設定したPort番号を開けておこう。

```
sudo ufw allow <設定したPort番号>
```

ufwをactiveにする。

```
sudo ufw enable
```

ssh接続が切れる可能性があるという警告が出るが、設定が合っていれば切れないので`y`としてEnter。

許可されているポートを確認する。

```
sudo ufw status
```

別のターミナルから設定がうまくいっているか確認しておく。

```
ssh <ユーザー名>@<ipアドレス> -p <設定したポート番号>
```

## デフォルトユーザーの削除
インスタンス作成時に作られたユーザーであるubuntuはもういらないので、削除する。

```
sudo userdel -r ubuntu
```

(`-r`でユーザディレクトリも同時に消す)



### 二要素認証
公開鍵認証とパスワード認証どちらも要求するように設定することもできる。sshd_configに

AuthenticationMethods publickey,password

の行を追加し、PassworrdAuthenticationをyesに変更するすれば良い。