【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サーバーを扱う手順を紹介していきます。

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


合同会社タコスキングダム|蛸壺の技術ブログ

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

まずは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
        
これで少し快適になりました。


合同会社タコスキングダム|蛸壺の技術ブログ

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ログインが可能になりました。


合同会社タコスキングダム|蛸壺の技術ブログ

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接続が可能になっていることが分かります。


合同会社タコスキングダム|蛸壺の技術ブログ

.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.
        

合同会社タコスキングダム|蛸壺の技術ブログ

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).
        
となってルートからはログインできないようになりました。


合同会社タコスキングダム|蛸壺の技術ブログ

しばらく放置すると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のDebianOSにrootユーザーの代わりとなる開発ユーザーを新しく設けるための設定手順を順を追って説明しました。

今回紹介したLinuxインスタンスは、最小のインスタンスプラン(CPUv1メモリ512MB)ですので、同時に複数人が接続するのはかなり厳しいですが、もっとスペックの高いプランを選ぶと、複数人がSSH接続して作業もできるようになると思います。

次回以降、余裕があればiptablesコマンドによるVPSインスタンスのファイヤーウォールの設定方法も解説していく予定です。