前回は、XServer VPSにSSHで接続する設定を行った。
今回は、rootユーザーを利用できなくして、セキュリティを高めていく。
一般ユーザーの作成
rootユーザーを無効にする前に、
まず、一般ユーザ(例:nori)を作成する。
[root@hostname ~]# useradd nori
[root@hostname ~]# passwd nori
Changing password for user nori.
New password: [パスワード]
Retype new password: [パスワード]
passwd: all authentication tokens updated successfully.
root化可能ユーザーの限定
作成したユーザのみがrootになれるように設定する。
まず、wheelグループに作成したユーザを追加する。
[root@hostname ~]# usermod -aG wheel nori
wheelグループに属するユーザのみがrootになれるように設定を変更する。
[root@hostname ~]# vi /etc/pam.d/su
次の行をアンコメントする。
# Uncomment the following line to require a user to be in the "wheel" group.
auth required pam_wheel.so use_uid
他の一般ユーザを作り、sudoが不可能か試してみる。
[root@hostname ~]# su abc
[abc@hostname root]$ sudo ls
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 abc:
abc is not in the sudoers file. This incident will be reported.
一般ユーザーのSSH Keyを設定する
rootのSSH Keyはツールで作成、設定できたが、一般ユーザー用のキーまでは作ってくれない。よって、自分で作成して設定する。
サーバー上でキーを作成する場合
サーバー上で、設定したい一般ユーザー(例:nori)になる。
[root@hostname ~]# su nori
ssh-keygenコマンドで、秘密鍵(id_rsa)と公開鍵(id_rsa.pub)のペアを作成する。
[nori@hostname root]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nori/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
Your identification has been saved in /home/nori/.ssh/id_rsa
Your public key has been saved in /home/nori/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX nori@hostname
The key's randomart image is:
+---[RSA 3072]----+
:
+----[SHA256]-----+
秘密鍵(id_rsa)と公開鍵(id_rsa.pub)ができたことを確認。
[nori@hostname root]$ ls ~/.ssh/
id_rsa.pub id_rsa
公開鍵のファイル名を、「authorized_keys」へ変更してSSH接続時の信頼するキーとする。
[nori@hostname root]$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
秘密鍵は、ローカルマシン上でscpコマンドを実行してダウンロード。
ここで、ややこしいのは、「-i」オプションで指定した秘密鍵はrootユーザー用の物。
user@MacBookPro ~ % scp -i /Users/user/Downloads/name.pem root@servername.example.com:/home/nori/.ssh/id_rsa ~/.ssh/id_rsa
ダウンロードできたら、サーバー上の元ファイルは消しておく。
[nori@hostname root]$ rm -y ~/.ssh/id_rsa
これで、一般ユーザーでSSHログイン可能。
user@MacBookPro ~ % ssh nori@servername.example.com
Last login: Sat Mar 15 00:00:00 2025 from 000.000.000.000
[nori@hostname ~]$
秘密鍵が「~/.ssh/id_rsa」となっているため、秘密鍵の指定も不要。
もし秘密鍵のファイルが別の場所や別のファイル名なら、次のように「-i」オプションで指定する必要がある。
user@MacBookPro ~ % ssh nori@servername -i ~/.ssh/himitsukagi.pem
クライアント(Mac)上でキーを作成する場合
クライアント上でssh-keygenコマンドを使い、秘密鍵(id_rsa)と公開鍵(id_rsa.pub)のペアを作成する。
user@MacBookPro ~ % ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user/.ssh/id_rsa): [Enter]
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
Your identification has been saved in /Users/user/.ssh/id_rsa
Your public key has been saved in /Users/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX user@MacBookPro.local
The key's randomart image is:
+---[RSA 3072]----+
:
+----[SHA256]-----+
秘密鍵(id_rsa)と公開鍵(id_rsa.pub)ができていることを確認。
user@MacBookPro ~ % ls ./.ssh/
id_rsa id_rsa.pub
サーバーのSSHでパスワード認証を許可している場合は、「ssh-copy-id」コマンドで、サーバーへ共通鍵をアップロードして「~/.ssh/authorized_keys」として置いてくれる。
「-i」オプションで、秘密鍵を指定すると、そのファイル名に「.pub」を追加したファイル名を公開鍵として処理してくれる。
秘密鍵のファイル名が「id_rsa」の場合は、「-i」オプション自体を省略可能。
user@MacBookPro ~ % ssh-copy-id -i ~/.ssh/id_rsa nori@servername.example.com
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/user/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
nori@servername.example.com's password: [パスワード]
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'nori@servername.example.com'"
and check to make sure that only the key(s) you wanted were added.
パスワード認証を許可していない場合は、サーバーへの接続自体ができないため、次の手順で地道に設定する。
パスワード認証を許可するには、「/etc/ssh/sshd_config」内で、「PasswordAuthentication yes」と記述。
まず、rootとしてSSH接続し、一般ユーザー(例:nori)となる。
user@MacBookPro ~ % ssh root@servername -i /Users/user/Downloads/name.pem
[root@hostname ~]# su nori
[nori@hostname root]$
「~/.ssh」フォルダを作成して、権限を変更。
[nori@hostname root]$ mkdir ~/.ssh
[nori@hostname root]$ chmod 700 ~/.ssh
認証用ファイルを新規作成。
ファイルの中身は、クライアントで作成した公開鍵(id_rsa.pub)の中身をコピぺ。
[nori@hostname root]$ vi ~/.ssh/authorized_keys
こちらも権限を変更しておく。
[nori@hostname root]$ chmod 600 ~/.ssh/authorized_keys
これで、クライアントから鍵を使ったSSH接続が可能。
user@MacBookPro ~ % ssh nori@servername -i ~/.ssh/id_rsa
秘密鍵が「~/.ssh/id_rsa」であれば、「-i」オプションは不要。
rootユーザーでのSSH接続を禁止する
まず、sudoが可能な一般ユーザー(例:nori)がSSH接続可能なことを確認。
※rootでSSH接続して設定した後に、一般ユーザーでSSH接続できないことが分かっても、SSHから復旧不可能なため。
user@MacBookPro ~ % ssh nori@servername.example.com
SSHの設定ファイルを編集して、rootでSSH接続できないようにする。
[nori@hostname ~]$ sudo vi /etc/ssh/sshd_config
「PermitRootLogin」の設定を「no」に変更。
#PermitRootLogin prohibit-password
PermitRootLogin no
SSHサービスに設定を反映。
[nori@hostname ~]$ sudo systemctl reload sshd
クライアントからrootで接続を試みて、ログインできないことを確認。
user@MacBookPro ~ % ssh -i /Users/user/Downloads/name.pem root@servername.example.com
root@hostname: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
結局rootでSSH接続できなくするのに、なぜ最初にツールで設定したのか?
という疑問は置いておく。
まとめ
- クライアント
~/.ssh/id_rsa (秘密鍵) chmod 400 - サーバー
~/.ssh/authorized_keys (公開鍵 id_rsa.pubを改名) chmod 600
次回は、SSH接続のポート番号を変更して、セキュリティをさらに上げていく。
お友達紹介プログラムを利用して契約すると10%OFFになるそうなので、
もしよろしければ次の画像をクリックしてみてください。

投稿一覧はこちら→「VPSでAlmaLinux」