AlmaLinuxのSSHログイン、その他をほんの少しだけ最適化してみる

# はじめに
こんにちは、どうもamaebiです。
前回AlmaLinuxをインストールしてミニPCをサーバー化したので、SSHログインもセキュリティなどを考慮して最適化していきます。
前回のOSインストールブログも見ていただけますと幸いです。

https://qiita.com/ebi_2280/items/ca0fe0788dd2409af63c

# やること
今回は以下の内容をやっていきます。

- ターミナルソフトのログ設定、ショートカットキーの追加
- 作業用ユーザーのsudoコマンドを使えるようにする
- 作業用ユーザーの鍵作成、設定
- SELinuxの永久無効化
    - ※本番環境等でのSELinuxの無効化はあまりおすすめしません
- EPEL repositoryのインストール

# ターミナルソフトのログ設定、ショートカットキーの追加
今回は**RLogin**を使用していきます。
詳細なインストール方法については省きますが、気になる方はこちらのサイトをご覧ください。

https://blog.pleeds.com/server/rlogin-introduction

RLoginのexeファイルは、こちらのサイトにzip形式でダウンロードできます。

https://github.com/kmiya-culti/RLogin/releases/

ここからRLoginのログ設定やコピー&ペーストのショートカットキー追加の手順を説明していきます。
必要に応じて設定を変更してください。

### サーバーへのログイン確認
まずはじめに対象サーバーへログインできるかを確認していきます。
RLoginを起動し、**新規(N)** をクリックします。
![A.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/7394cda0-e2ef-454b-874f-15f91ce12089.png)

以下の情報を入力後、**OK**をクリックします。
- **ホスト名(サーバーIPアドレス)**
- **ログインユーザー名**
- **ユーザー認証の方式によりパスワード or パスフレーズ**
※パスワード認証による接続であるため、後ほど鍵認証に変更します。

![B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/be4bcfae-a29a-4887-9353-fd9831e41f6e.png)

そうすると、サーバーの接続情報がリスト形式で保存されるため、先ほど登録したものを選択して**OK**をクリックします。
![C.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/8cd185a3-b58a-420b-b81e-3e83fb2ef744.png)

認証情報が間違っていなければ、以下の画像のようにログインできます。
これでサーバーへのログイン確認は終了です。
![D.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/9b435c59-70ec-417f-8c45-210f2ee5d976.png)

### ログ設定
次に操作ログを保存するための設定をしていきます。
サーバーにログアウト後、先ほど登録したものを選択し、**編集(E)** をクリックします。
![E.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/77f23b8b-f169-408e-a6a2-03ce7c3087a9.png)

左側の**ヒストリー**をクリックします。
![F.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/5687bbea-6117-455d-8f4a-a0dd3f7a9536.png)

**通信ログを年月日を付けて自動作成する**のチェックボックスにチェックを入れ、**参照(L)** をクリックしてログの保存先のフォルダーを選択していきます。
![G.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/84f04b0d-ca9b-4a19-8898-bc3f9880ccab.png)

通信ログの形式を選択後、**OK**をクリックしてサーバー一覧に戻ります。(自分は**LINE**を選択してます)
対象サーバーにログインして操作ログが保存されていれば完了です。
![H.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/fbcd780a-5d56-49c2-874b-6df1f40963d1.png)

操作ログはこのような形で、日付ごとに記録されます。
![N.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/211cec84-16ce-4471-96b5-4e5c0e0fe23b.png)


### コピー&ペーストのショートカットキー追加
最後にコピー&ペーストのショートカットキーを追加していきます。
再度サーバーにログアウト後、**編集(E)** をクリックします。
![E.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/77f23b8b-f169-408e-a6a2-03ce7c3087a9.png)

左側の**キーボード**をクリックします。
![I.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/9af7795c-06d3-4e28-bba7-5ddb0430f95e.png)

**新規(N)** をクリックします。
![J.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/0495e6d9-500b-4197-9e63-af4386cd9064.png)

以下の情報を入力後、**OK**をクリックします。(コピーのショートカットキー)
- Key Code
    - **C**
- チェックボックス
    - **Ctrl**
- Assign String
    - **$EDIT_COPY**

![K.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/d1e1f907-d74a-495d-ae80-04521d47ec5b.png)

同様に以下の情報を入力後、**OK**をクリックします。(ペーストのショートカットキー)
- Key Code
    - **V**
- チェックボックス
    - **Ctrl**
- Assign String
    - **$EDIT_PASTE**

![L.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/a560b5c0-8b6e-47b0-a73f-71fdb2aca520.png)

:::note info
**余談**
RLoginでは、**Ctrl + z**を押すことで実行中の処理をキャンセルすることができます。
:::

すべてのショートカットキーの設定が完了後、**OK**をクリックしてサーバー一覧に戻ります。
対象サーバーにログインしてショートカットキーが正常に使えれば設定は完了です。

![M.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/eda9b57e-d5f0-423d-9f3f-d204638c1a6b.png)

# 作業用ユーザーのsudoコマンドを使えるようにする
ここからサーバーの設定を行っていきます。
まずは、作業用ユーザーのsudoコマンドを使えるようにしていきます。
実際に作業用ユーザーにログインし、sudoコマンドを使用したところ以下のようなエラーが発生しました。
```
<作業用ユーザー名> is not in the sudoers file.  This incident will be reported.
```

このままでは少し不便ですので、以下のサイトを参考に設定していきます。

https://qiita.com/gaia003/items/f882e2d10f536e3e9a22

`usermod`コマンドを使用して、sudoが使用できるセカンダリグループに追加していきます。
しかし、以下の設定ファイルが変更するため、事前のバックアップが必要になってきます。
- /etc/group : グループ情報
- /etc/gshadow : グループパスワード情報

:::note info
その他にも、以下の設定ファイルが変更してしまう可能性があります。
(今回はグループのみ変更したため、以下の設定ファイルのバックアップは行っておりません)
- /etc/passwd : ユーザー情報
- /etc/shadow : ユーザーパスワード情報
:::

まずは設定ファイルを確認していきます。
```
#  ls -la /etc | grep -i -e group -e gshadow
```

対象の設定ファイルが存在していることを確認したら、設定ファイルのバックアップを作成していきます。
```
# mkdir -v /etc/.backup
# ls -la /etc | grep .backup
# cp -ipv /etc/group /etc/.backup/group.`date +%Y%m%d`
# cp -ipv /etc/gshadow /etc/.backup/gshadow.`date +%Y%m%d`
# ls -la /etc/.backup | grep -i -e group -e gshadow
```

設定ファイルのバックアップが完了したら、`/etc/sudoers`からsudo権限が付与されたグループ名を探していきます。
```
# cat /etc/sudoers
=== 一部省略 ===
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
=== 一部省略 ===
```

wheelグループに追加すればsudoコマンドを使用できるため、作業用ユーザーのアカウント情報を書き換えます。
```
# usermod -G wheel <作業用ユーザー名>
```

グループに追加されたか設定ファイルの差分をチェックしていきます。
```
# diff -U0 /etc/.backup/group.<対象ファイルの日付> /etc/group
# diff -U0 /etc/.backup/gshadow.<対象ファイルの日付> /etc/gshadow
```

実際にsudoコマンドが使えるか確認していきます。
```
# reboot
~~~ 再起動後、もう一度ログイン ~~~
$ sudo su -
[sudo] password for xxxx: 
Last login: xxx xxx  x xx:xx:xx JST 2025 on pts/0
# 
```

sudoコマンドが使用できたため、こちらの設定は完了です。

# 作業用ユーザーの鍵作成、設定
次は鍵認証によるログインができるように設定していきます。

まずはじめに、鍵を配置するディレクトリを作成します。
```
$ ls -la /home/<作業用ユーザー名> | grep .ssh
$ mkdir -v /home/<作業用ユーザー名>/.ssh
$ ls -la /home/<作業用ユーザー名> | grep .ssh
```

先ほど作成したディレクトリに鍵を作成していきます。
```
$ cd /home/<作業用ユーザー名>/.ssh/
$ ssh-keygen -b 4096 -t rsa
$ ls -la
```

以下のファイル名で鍵が生成されるため、秘密鍵の内容はローカルファイルに保存しておいてください。
- id_rsa : 秘密鍵
- id_rsa.pub : 公開鍵

作成した公開鍵を利用できるように、設定していきます。
```
$ cat /home/<作業用ユーザー名>/.ssh/id_rsa.pub >> /home/<作業用ユーザー名>/.ssh/authorized_keys
$ ls -la /home/<作業用ユーザー名>/.ssh
$ chmod 600 /home/<作業用ユーザー名>/.ssh/authorized_keys
$ ls -la /home/<作業用ユーザー名>/.ssh
```

登録した公開鍵を使用してログインするように、設定ファイル(`/etc/ssh/sshd_config`)を書き換えていきます。
```:sshd_configのバックアップ
# ls -la /etc/ssh
# mkdir -v /etc/ssh/.backup
# ls -la /etc/ssh
# cp -ipv /etc/ssh/sshd_config /etc/ssh/.backup/sshd_config.`date +%Y%m%d`
# ls -la /etc/ssh/.backup/
```
```:sshd_configの書き換え
# vi /etc/ssh/sshd_config
```
```:差分確認
# diff -U0 /etc/ssh/.backup/sshd_config.<対象ファイルの日付> /etc/ssh/sshd_config
--- /etc/ssh/.backup/sshd_config.<対象ファイルの日付>       2024-10-03 06:22:19.000000000 +0900
+++ /etc/ssh/sshd_config        2025-xx-xx xx:xx:xx.xxxxxxxxx +0900
@@ -40 +40 @@
-#PermitRootLogin prohibit-password
+PermitRootLogin no
@@ -45 +45 @@
-#PubkeyAuthentication yes
+PubkeyAuthentication yes
@@ -65 +65 @@
-#PasswordAuthentication yes
+PasswordAuthentication no
#
```

変更箇所の詳細は以下の通りです。
- PermitRootLogin : rootユーザーのログインのアクセス制御に関する設定
    - [ご存じですか? sshd_config の PermintRootLogin の各種パラメータについて](https://qiita.com/ine1127/items/b50b9a8f831736cf14ea)
- PubkeyAuthentication : 公開鍵によるログインのアクセス制御に関する設定
- PasswordAuthentication : パスワードによるログインのアクセス制御に関する設定

※もし以下の設定項目がない場合は追加で設定してください。
```
AuthorizedKeysFile     .ssh/authorized_keys
```

その後、sshdを再起動します。
```
# systemctl restart sshd
# systemctl status sshd
```

実際に設定できたか確認していきます。
一度ログアウトして、Server Select画面からもう一度`OK`を押してログインしていきます。
![C.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/8cd185a3-b58a-420b-b81e-3e83fb2ef744.png)

パスワード認証の拒否設定が有効になっていることが確認できました。
![P.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/3ad53d05-a34c-44be-a836-64d775b07df4.png)

続いて秘密鍵を使ってログインできるか確認していきます。
Server Select画面から`編集`をクリックします。
![E.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/77f23b8b-f169-408e-a6a2-03ce7c3087a9.png)

`SSH認証鍵`をクリックします。
![O.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/c36865da-a43c-4444-bff5-3c9a55f0cdea.png)

先ほどコピーした秘密鍵を指定して`OK`を押します。
![Q.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/b1d2d8cc-2c5d-4047-9acd-ab0561111183.png)

秘密鍵を指定できたら、`OK`を押します。
![R.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/23c93ddf-98a6-4096-9e21-4f38f75894ae.png)

先ほどと同様に`OK`を押して、サーバーにログインしていきます。
![C.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/8cd185a3-b58a-420b-b81e-3e83fb2ef744.png)

無事、鍵を用いてのログインが出来ました。
![S.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3765414/2dbc3a1f-57c0-43c4-9d3c-9ae33116bafd.png)

# SELinuxの永久無効化

:::note alert
**SELinuxを無効にすると、セキュリティ上のリスクが大幅に増加します。無効にする場合は、その影響を十分に理解した上で、慎重に判断してください。**
:::

続いてSELinuxを永久に無効化していきます。
SELinuxの概要について、以下のサイトをご覧ください。

https://www.redhat.com/ja/topics/linux/what-is-selinux

まずは、現在のSELinuxの状態を確認していきます。
- Enforcing : 有効 (ログ記録 + アクセス拒否)
- Permissive : 有効 (ログ記録 + アクセス許可)
- Disabled : 無効

```
# getenforce
Enforcing
#
```

SELinuxが有効になっているため、無効化していきます。
`setenforce`コマンドを利用してもよいのですが、状態を一時的にしか変更できません。
ですので、`/etc/selinux/config`ファイルを直接書き換えます。
```:configのバックアップ
# ls -la /etc/selinux/
# mkdir -v /etc/selinux/.backup
# ls -la /etc/selinux
# cp -ipv /etc/selinux/config /etc/selinux/.backup/config.`date +%Y%m%d`
# ls -la /etc/selinux/.backup/
```
```:configの書き換え
# vi /etc/selinux/config
```
```:差分確認
# diff -U0 /etc/selinux/.backup/config.<対象ファイルの日付> /etc/selinux/config 
--- /etc/selinux/.backup/config.<対象ファイルの日付>        2025-xx-xx xx:xx:xx.xxxxxxxxx +0900
+++ /etc/selinux/config 2025-xx-xx xx:xx:xx.xxxxxxxxx +0900
@@ -22 +22 @@
-SELINUX=enforcing
+SELINUX=disabled
# 
```

その後、再起動をかけます。
```
# reboot
```

再度ログイン後、SELinuxの状態を確認します。
```
# getenforce 
Disabled
# 
```

SELinuxが無効になっていることを確認しました。

# EPEL repositoryのインストール
最後にEPEL repositoryのインストールも行っていきます。
EPEL repositoryは様々な場面で利用されることが多く、非常に便利です。

EPEL repositoryの概要については、以下のサイトをご覧ください。

https://xexeq.jp/blogs/media/it-glossary303

早速、EPEL repository(`/etc/yum.repos.d/epel.repo`など)が存在しているか確認します。
```
# ls -la /etc/yum.repos.d/ | grep epel
```

EPEL repositoryが存在しなかったため、EPEL repositoryをインストールしていきます。
```
# dnf update ←※アップデート不要なパッケージが存在する場合は個別に対応してください。
# dnf install epel-release
```

実際にインストールできたか確認します。
```
# ls -la /etc/yum.repos.d/ | grep epel
```

EPEL repositoryが無事インストールされていることが確認できました。
以上でSSHログイン、その他の最適化設定は完了です。

# 最後に
今回は軽くですが、SSHログインの最適化設定を行いました。
この他にも、少し改良できる点があれば、少しずつしていこうかなと考えております。

# 参考資料
- [Rloginでコピペ（Ctrl + C, Ctrl + V）する](https://ashitaka-blog.com/2020-08-09-210708/)
- [is not in the sudoers file. This incident will be reported. のエラー対処方法について](https://qiita.com/tks_00/items/bc04bc477d9019341859)
- [【エラー解決方法】...is not in the sudoers file. This incident will be reported.](https://qiita.com/gaia003/items/f882e2d10f536e3e9a22)
- [sudoユーザーを追加する方法](https://webkaru.net/linux/sudo-user-add/)
- [SSH公開鍵認証で接続するまで](https://qiita.com/kazokmr/items/754169cfa996b24fcbf5)
- [RHEL9系(AlmaLinux9)でSELinuxを無効化する方法](https://blog.future.ad.jp/rhel9%E7%B3%BBalmalinux9%E3%81%A7selinux%E3%82%92%E7%84%A1%E5%8A%B9%E5%8C%96%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)