VPSでAlmaLinux (5)

rootユーザーでSSH接続できなくする

前回は、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): 
/home/nori/.ssh/id_rsa already exists.
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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です