【VPS・Linuxサーバー入門】ConoHa VPSでDebianインスタンスの初期設定〜ユーザーの追加してみる


※ 当ページには【広告/PR】を含む場合があります。
2022/11/21
2022/12/12
【VPS・Linuxサーバー入門】ConoHa VPS(+VPS割引きっぷ)の期間キャンペーンを使って格安な値段でプライベートLinuxサーバーを試す
【VPS・Linuxサーバー入門】iptablesからクライアントのMACアドレスごとにConoHa VPSのファイアウォールを設定する
蛸壺の技術ブログ|【VPS・Linuxサーバー入門】ConoHa VPSでDebianインスタンスの初期設定〜ユーザーの追加してみる



以前の回で最初の
『ConoHa VPS』 のDebianインスタンスの立ち上げの手順を説明してみました。

合同会社タコスキングダム|蛸壺の技術ブログ
【VPS・Linuxサーバー入門】ConoHa VPS(+VPS割引きっぷ)の期間キャンペーンを使って格安な値段でプライベートLinuxサーバーを試す

今回は『ConoHa VPS』のVPSサービスを使って、低価格から始められる高機能なLinuxサーバーを扱う手順を紹介していきます。



今回はその続編として、ルートユーザー以外のユーザー追加と、アクセスを制限するためのファイヤーウォールについて説明していきます。


ConoHa VPS

新しいユーザーを追加する



まずはDebianインスタンスをデフォルトでルートユーザーにならないように、新しいユーザーを追加して利用する方法を検討してみます。
前回説明した
SSH接続の内容 の続きから、作業をはじめてみましょう。
インスタンスを立ち上げた直後の状態のままでは、ルートユーザーでログインすることになります。
前回の復習となりますが、手始めに
root でログインできることを確認しましょう。

.ssh/config ファイルにrootに繋ぐSSH接続設定を以下のように編集します。

            #👇root用のSSH設定
Host conoha-root
  HostName <インスタンスに割り当てられたIPアドレス>
  User root
  Port 22
  IdentityFile "~/.ssh/<SSH秘密鍵>.pem"

        

これでsshコマンドを試すと、

            $ ssh conoha-root
Linux xxx-xxx-xxx-xxx 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Nov 20 09:52:25 2022 from xxx-xxx-xxx-xxx
root@xxx-xxx-xxx-xxx:~#

        

とSSH接続ができる、というのを前回までで解説していました。
ただしこのように、すべてを管理者で様々な行ってしまうと、特にdockerなどのような仮想化のユーティリティでローカルなリソースにアクセスするときに、アクセスレベルによっては読み出し・書き込みが失敗してしまうなど、後々少し面倒なことに陥るときがあります。
そこで、最初のうちから管理者権限を制限したユーザーでの操作を行うのが好ましいので、新しいユーザーを追加して、デフォルトユーザーとして利用することを考えます。

Debianインスタンスの動作環境確認



ひとまずはrootユーザーでSSHログインしたまま作業を進めていきます。
現在のConoHa VPSではDebianインスタンスはv11かv10をサポートしています。
よほどこだわりがなければ、v11(bullseye)の方でイメージを構築したほうが良いでしょう。

            ~# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye

        

仮にバージョンが古いままであれば、後付でv10からv11へaptコマンドでパッケージアップグレードも可能ではありますが、どうせならばDebianインスタンスの立ち上げの最初からv11へアップグレードをご検討ください。


新規ユーザーを追加



まずはroot以外のデフォルトユーザーを追加しましょう。
ここでは適当に
hoge という名前のユーザーを作成してみます。


            #👇ユーザーの新規登録
~# useradd hoge

#👇sudoグループに追加したユーザーを参加させる
~# gpasswd -a hoge sudo
Adding user hoge to group sudo

#👇ユーザーにsudoするときのパスワードを設定
~# passwd hoge
New password: 
Retype new password: 
passwd: password updated successfully

        

なおユーザー用に作成したパスワードは忘れずに控えておきましょう。
ユーザーが追加されてるかを確認すると、以下のようになっていることが分かります。

            ~# cat /etc/group
#...中略
sudo:x:27:hoge
#...中略
hoge:x:1000:

        

ここで一度、新しいユーザーに切り替えて、
sudo が通ることを確認しましょう。

            ~# su - hoge
su: warning: cannot change directory to /home/hoge: No such file or directory
$ sudo ls
sudo: unable to resolve host xxx-xxx-xxx-xxx: Name or service not known

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for hoge: 

        

これで
sudo がユーザーでも使えるようになったことが分かります。
また、ユーザー用の作業ディレクトリはDebianの仕様では、
/home/<ユーザー名> 以下になるようにするのが定石となっています。

            $ echo $HOME
/home/hoge

        

そこで一旦、
Cntl+D でrootに戻り、ユーザー用の作業ディレクトリを作成しましょう。

            ~# mkdir /home/hoge
~# su - hoge
$ 

        

すると、ユーザーに切り替えるときの作業ディレクトリが存在していないという警告は消えるはずです。

「unable to resolve host ***」の警告を消す



新しいユーザーに操作を切り替えたときに
sudo コマンドは可能になったのですが、

            $ sudo ls
sudo: unable to resolve host xxx-xxx-xxx-xxx: Name or service not known

        

のように、
sudo するたびに「ホスト名が不明」という趣旨の警告が常に表示されてしまいます。
この原因は
/etc/hosts ファイルにある 「127.0.1.1」 に、リモートインスタンス側のホスト名のエイリアスが更新されていないことにあるようです。

参考|127.0.1.1ってなに?

現在の
/etc/hosts を覗いてみると、

            $ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 localhost

#The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

        

となっていて
127.0.1.1 の引き出しに現在のVPSインスタンスのホスト名がありません。
この警告を消すためには、以下のように現在のホスト名を
/etc/hosts に追加することで解決するようです。

            $ sudo sh -c 'echo 127.0.1.1 $(hostname) >> /etc/hosts'
sudo: unable to resolve host xxx-xxx-xxx-xxx: Name or service not known

#👇以降のsudoでは警告が出ない
$ sudo ls

        

念の為、
/etc/hosts を確認すると確かに以下のような感じにホスト名が追加されていることが分かります。

            $ cat /etc/hosts
#...
#👇ここが追加されている
127.0.1.1 xxx-xxx-xxx-xxx

        

これで少し快適になりました。


ConoHa VPS

rootのSSH公開鍵をユーザーにも複製・付与する



さて、ConoHa VPSのダッシュボードからLinuxインスタンスに付けたSSH公開キーは、基本的にrootが利用するためのものです。
新しく追加されたユーザーは、SSHキーの情報を持っていないので、まずユーザー用のホームディレクトリに
.ssh フォルダを作成し、そこにrootのSSH公開キー・ authorized_keys をコピーする必要があります。
一旦、rootにログインして、rootの持っているSSH公開キーの情報をコピーしましょう。

            ~# mkdir /home/hoge/.ssh
~# cp .ssh/authorized_keys /home/hoge/.ssh/
~# ls -la /home/hoge/.ssh/
drwxr-xr-x 2 root root 4096 Nov 21 00:50 .
drwxr-xr-x 3 root root 4096 Nov 21 00:49 ..
-rw------- 1 root root  399 Nov 21 00:50 authorized_keys

        

rootのリソースファイルをそのまま複製しただけだと、ファイルの権限がrootのままになっています。
ここで、
/home/hoge フォルダの権限をchownで新しいユーザーのものに変えておく必要があります。

            ~# chown -hR hoge:hoge /home/hoge
~# ls -la /home/hoge/.ssh/
total 12
drwxr-xr-x 2 hoge hoge 4096 Nov 21 00:50 .
drwxr-xr-x 3 hoge hoge 4096 Nov 21 00:49 ..
-rw------- 1 hoge hoge  399 Nov 21 00:50 authorized_keys

        

この時点でrootでSSHログインしていたのを一度SSHログアウトし、新しいユーザーでログインできるかを試してみましょう。

.ssh/config ファイルにユーザー用のSSH接続設定を追加します。

            #👇ユーザー用のSSH設定
Host conoha-vps
  HostName <インスタンスに割り当てられたIPアドレス>
  User hoge
  Port 22
  IdentityFile "~/.ssh/<SSH秘密鍵>.pem"

        

で、これを使って再びSSH接続を試みますと、

            $ ssh conoha-vps
Linux xxx-xxx-xxx-xxx 5.10.0-19-amd64 #1 SMP Debian 5.10.149-2 (2022-10-21) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Nov 21 00:32:34 2022
$ whoami
hoge

        

ばっちり新しいユーザーでもSSHログインが可能になりました。


ConoHa VPS

SSHのポート番号の変更



先程の手順までで、root以外のユーザーによるSSH接続の確立が可能になりました。
ただしこの時点ではSSH接続のポート番号がデフォルトの
「22」 のままになっています。
デフォルトのポート番号のままだと、セキュリティー面で多少の不安が残ります。 ということで、余裕があるうちにSSHポート番号も変更しておきます。
SSHのポート番号を変更しますが、若い番号(ウェルノウンポートと呼ばれる「0~1023」)とあらかじめ役割が予約されているポート(レジスタードポートとよばれる「1024 ~ 49151」)以外の
『49152-65535(動的・プライベートポート)』 をどれかを利用するのが良いとのことです。
ここでは好みの問題で例えばポート番号を(運用上はもっと並びの悪いポート番号を利用したほうが良いですが)「55555」に変更してみます。
ターミナルコンソールから設定ファイル・
/etc/ssh/sshd_config を編集します。
以下のように、この設定ファイルの中のポート番号を記述している箇所(
Port )の項目で「22」で設定してあるものをコメントアウトし、新たに「55555」で変更・保存してみましょう。

            $ sudo nano /etc/ssh/sshd_config

#...
#Port 22
Port 55555
#...

        

その後SSHデーモンを再起動します。


            $ sudo /etc/init.d/ssh restart
Restarting ssh (via systemctl): ssh.service.

        

書き換えたら一旦ConoHa VPSからログアウトし、再度ログインしてみると...

            $ ssh conoha-vps
ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused

        

このようにポート22番では接続に失敗することが確認できます。
再びローカルのSSHクライアントの設定・
.ssh/config ファイルを新しく設定したポートで調整します。

            #👇ユーザー用のSSH設定
Host conoha-vps
  HostName <インスタンスに割り当てられたIPアドレス>
  User hoge
  Port 55555
  IdentityFile "~/.ssh/<SSH秘密鍵>.pem"

        

この設定を保存して、SSHリモートログインが成功するかを確かめましょう。


            $ ssh conoha-vps
Linux xxx-xxxx-xxx-xxx 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Nov 28 11:13:03 2022 from xxx.xxx.xxx.xxx
~$

        

このようにConoHa VPSでも問題なく、新しく設定したプライベートポートでのSSH接続が可能になっていることが分かります。


ConoHa VPS

.profileを設定してターミナルが正常に動作するようにする



さて、手動でユーザーを追加した場合、システム環境変数などが読み込まれず、ターミナルでのキーボード操作が上手く働かないと思います。

            #👇矢印キーを入力したつもりが...
$ ^[[A^[[D^[[A^[[C

        

ということで、とりあえずログイン時に読み込まれるので
.profile ファイルは最初に設置しておきたいところです。
ユーザーの作業ディレクトリに作成します。

            $ nano .profile

        

で以下の内容で
.profile ファイルを保存します。

            #~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

mesg n 2> /dev/null || true

        

次に、現状の環境で利用できるターミナルエミュレータの所在を確認します。

            $ cat /etc/shells
#/etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash

        

これらのいずれかから
chsh コマンドを使って、ユーザーの使うデフォルトのエミュレーターを指定します。 ここでは例として /usr/bin/bash を指定します。


            $ chsh
Password: 
Changing the login shell for hoge
Enter the new value, or press ENTER for the default
    Login Shell [/bin/sh]: /usr/bin/bash

        

デフォルトシェルを選択後、一度ログアウトし、再度ログインしてみます。

            $ ssh conoha-vps
Linux xxx-xxx-xxx-xxx 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Nov 21 11:11:01 2022 from xxx.xxx.xxx.xxx
hoge@xxx-xxx-xxx-xxx:~$ 

        

とちゃんとBashにパスが通って、キーボード入力も問題ないことを確かめられました。

            $ echo $SHELL
/usr/bin/bash

$ bash --version
GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

        

ConoHa VPS

rootでのログインを無効化する



開発作業用のユーザーも設定しましたので、あとはデフォルトでrootには直接SSHアクセスできないように制限しましょう。
設定ファイル・
/etc/ssh/sshd_config を編集します。
VPSインスタンスの既定値では、

            $ cat /etc/ssh/sshd_config
#...中略

#Authentication:

#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes

#...以下略

        

という項目があることが分かります。
つまり、
PermitRootLogin yes ということで、rootでのログインは最初から許可されている状態です。
これを、

            $ sudo nano /etc/ssh/sshd_config
#...中略

#👇値をnoに変更
PermitRootLogin no

        

とすることで、デフォルトではrootでログインできないようなります。
SSH設定ファイルを書き換えたら、設定を有効化するためSSH サーバを再起動しましょう。

            $ sudo systemctl restart ssh

        

この後、一旦ユーザーログアウトして、rootでログインできるか確認してみると、

            % ssh conoha-root
root@xxx-xxx-xxx-xxx: Permission denied (publickey).

        

となってルートからはログインできないようになりました。


ConoHa VPS

しばらく放置するとSSH接続が途切れるときの対処法



ConoHa VPSのインスタンスにSSH接続をしたまま離席して、しばらくしてから作業を開始すると、なんだか
SSHでログインしたはずのターミナルが全く反応しない... というもどかしい現象をしばしば経験されるかも知れません。
この場合、
「現在のSSHクライアントの設定」 に問題があるか、 「リモートのSSHサーバーの設定」 に問題があるか、はたまたその両方か、というところから見直さないといけません。

まずはConoHa VPS側のSSHサーバーとしてホスト側になっているほうから
/etc/ssh/sshd_config の設定を修正しましょう。

            ...
#👇コメントアウトし、クライアントの生存確認インターバルを120秒=2分間隔に設定
ClientAliveInterval 120
#👇コメントアウトし、クライアントの生存確認のリトライ数を3回に設定
ClientAliveCountMax 3
...

        

というように設定を追加してみます。
SSHサーバー側でクライアントが一定期間と通信していないときに
ClientAliveInterval に設定した時間間隔で、クライアント側へ応答確認を行い、応答があるまで ClientAliveCountMax で設定した回数リトライする、という意味のようです。

/etc/ssh/sshd_config の変更を反映するために、sshdを再起動しましょう。

            $ sudo systemctl restart sshd

        

これで一度症状が改善するか様子見をして、SSHの接続が切れないようであればOKです。
問題が解決しない場合には、おそらくSSH切断の原因がホスト側にある可能性が大きいので、今度は手元のクライアントにサーバーの生存確認設定をやってみましょう。
クライアントのSSH設定でおなじみの
.ssh/config を以下のように追加します。


            #👇ユーザー用のSSH設定
Host conoha-vps
  HostName <インスタンスに割り当てられたIPアドレス>
  User hoge
  Port 55555
  IdentityFile "~/.ssh/<SSH秘密鍵>.pem"
  #👇👇追加
  ServerAliveInterval 120
  ServerAliveCountMax 3

        

これも先程と同じ理屈で、SSHクライアントがサーバーと一定期間と通信していないときに
ServerAliveInterval に設定した時間間隔で、リモートホスト側へ応答確認を行い、応答があるまで ServerAliveCountMax で設定した回数リトライする、という設定です。
個人的な環境下での症状としては、ConoHa VPSではこちらの設定のほうが有効だった気がします。


ConoHa VPS

まとめ



以上、ConoHa VPSのDebianOSにrootユーザーの代わりとなる開発ユーザーを新しく設けるための設定手順を順を追って説明しました。
今回紹介したLinuxインスタンスは、最小のインスタンスプラン(CPUv1メモリ512MB)ですので、同時に複数人が接続するのはかなり厳しいですが、もっとスペックの高いプランを選ぶと、複数人がSSH接続して作業もできるようになると思います。
次回以降、余裕があればiptablesコマンドによるVPSインスタンスのファイヤーウォールの設定方法も解説していく予定です。