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」