カテゴリー
【VPS・Linuxサーバー入門】ConoHa VPSでDebianインスタンスの初期設定〜ユーザーの追加してみる
※ 当ページには【広告/PR】を含む場合があります。
2022/11/21
2022/12/12

以前の回で最初の
今回はその続編として、ルートユーザー以外のユーザー追加と、アクセスを制限するためのファイヤーウォールについて説明していきます。
新しいユーザーを追加する
まずはDebianインスタンスをデフォルトでルートユーザーにならないように、新しいユーザーを追加して利用する方法を検討してみます。
前回説明した
インスタンスを立ち上げた直後の状態のままでは、ルートユーザーでログインすることになります。
前回の復習となりますが、手始めに
root
.ssh/config
#👇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
~# 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
現在の
/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
この警告を消すためには、以下のように現在のホスト名を
/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
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 -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設定
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接続のポート番号がデフォルトの
デフォルトのポート番号のままだと、セキュリティー面で多少の不安が残ります。 ということで、余裕があるうちにSSHポート番号も変更しておきます。
SSHのポート番号を変更しますが、若い番号(ウェルノウンポートと呼ばれる「0~1023」)とあらかじめ役割が予約されているポート(レジスタードポートとよばれる「1024 ~ 49151」)以外の
ここでは好みの問題で例えばポート番号を(運用上はもっと並びの悪いポート番号を利用したほうが良いですが)「55555」に変更してみます。
ターミナルコンソールから設定ファイル・
/etc/ssh/sshd_config
以下のように、この設定ファイルの中のポート番号を記述している箇所(
Port
$ 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
これを、
$ 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接続をしたまま離席して、しばらくしてから作業を開始すると、なんだか
この場合、
まずはConoHa VPS側のSSHサーバーとしてホスト側になっているほうから
/etc/ssh/sshd_config
...
#👇コメントアウトし、クライアントの生存確認インターバルを120秒=2分間隔に設定
ClientAliveInterval 120
#👇コメントアウトし、クライアントの生存確認のリトライ数を3回に設定
ClientAliveCountMax 3
...
というように設定を追加してみます。
SSHサーバー側でクライアントが一定期間と通信していないときに
ClientAliveInterval
ClientAliveCountMax
/etc/ssh/sshd_config
$ 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インスタンスのファイヤーウォールの設定方法も解説していく予定です。
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー