SELinuxが原因でSSH接続できない場合|接続拒否の原因調査と対処方法を解説

目次
SELinuxが原因でSSH接続できない場合の調査方法を理解しよう
SSHサーバの設定は正しいはずなのに接続できない。
firewalldも許可している。
sshdも正常に起動している。
それでもSSH接続できない場合、SELinuxが原因になっている可能性があります。
特にAlmaLinux、Rocky Linux、RHELなどのRed Hat系LinuxではSELinuxが標準で有効になっています。
SELinuxは非常に強力なセキュリティ機能ですが、設定を誤るとSSH接続にも影響を与えます。
本記事ではSELinuxが原因でSSH接続できない場合の確認方法と対処方法について解説します。
SELinuxとは何か
SELinux(Security-Enhanced Linux)はアクセス制御機能を提供するセキュリティ機能です。
Linuxの通常のアクセス権限に加えて、さらに厳格な制御を行います。
強制アクセス制御(MAC:Mandatory Access Control)の代表例です。
なぜSSHへ影響するのか
SELinuxはプロセスやファイルに対して許可された動作のみを実行できます。
そのためsshdが許可されていない動作を行うとアクセスが拒否されます。
結果としてSSH接続できなくなる場合があります。
まずSELinux状態を確認する
現在の状態を確認します。
# getenforce
出力例です。
EnforcingSELinuxが有効です。
状態の意味
| 状態 | 意味 |
|---|---|
| Enforcing | 有効 |
| Permissive | ログのみ |
| Disabled | 無効 |
通常はEnforcingで運用します。
SSH接続時によくある症状
- 公開鍵認証だけ失敗する
- Permission deniedになる
- ポート変更後に接続できない
- ホームディレクトリ変更後に失敗する
- ログイン直後に切断される
SELinuxが原因の場合があります。
原因1 SSHポートを変更した
最も多いトラブルの一つです。
例えば22番から2222へ変更します。
Port 2222sshd自体は起動します。
しかしSELinuxが通信を拒否する場合があります。
現在許可されているSSHポート確認
# semanage port -l | grep ssh
出力例です。
ssh_port_t tcp 22SSHポート追加方法
2222番を許可します。
# semanage port -a -t ssh_port_t -p tcp 2222その後接続できるようになります。
原因2 ホームディレクトリ移動
ユーザーのホームディレクトリを変更した場合です。
SELinuxラベルが正しくないと公開鍵認証に失敗します。
SELinuxコンテキスト確認
# ls -ldZ /home/userSELinuxラベルを確認できます。
原因3 .sshディレクトリのラベル不整合
公開鍵認証では以下が重要です。
~/.ssh
~/.ssh/authorized_keysSELinuxラベルが不正だと認証できません。
コンテキストを確認する
# ls -lZ ~/.sshラベル情報が表示されます。
restoreconで修復する
最もよく利用される方法です。
# restorecon -Rv ~/.ssh適切なラベルへ戻します。
ホームディレクトリ全体を修復
# restorecon -Rv /home/userラベル不整合をまとめて修正できます。
原因4 authorized_keysを手動コピーした
cpコマンドでコピーした際にSELinuxラベルが崩れることがあります。
公開鍵認証失敗の原因になります。
restoreconで修復できます。
原因5 NFSホームディレクトリ
企業環境で見られるケースです。
NFSマウントとSELinuxの組み合わせで制限される場合があります。
audit.logを確認する
SELinux関連調査で最も重要です。
# tail -f /var/log/audit/audit.log拒否ログを確認できます。
AVCメッセージとは
SELinuxによる拒否ログです。
例です。
type=AVC
これが表示されればSELinuxが関係しています。
ausearchで検索する
# ausearch -m AVCSELinux拒否ログのみ表示できます。
直近の拒否を確認する
# ausearch -m AVC -ts recentトラブル調査で便利です。
sealertを利用する
詳細解析が可能です。
# sealert -a /var/log/audit/audit.log対処方法も表示されます。
一時的に切り分ける方法
SELinuxを一時的にPermissiveへ変更します。
setenforce 0これで接続できるようになればSELinuxが原因です。
戻す方法
setenforce 1Enforcingへ戻します。
Disabledは推奨されない
以下のような運用は推奨されません。
SELINUX=disabledセキュリティが低下します。
問題を解決してEnforcingで運用しましょう。
SSH関連のSELinux設定確認
利用可能な設定を確認します。
# getsebool -a | grep sshSSH関連ポリシーを確認できます。
クラウド環境での注意点
AWSやAzureでもSELinux有効環境があります。
ポート変更やホームディレクトリ変更時は注意が必要です。
実務で最も多い原因
経験上は以下が多く見られます。
- SSHポート変更
- restorecon忘れ
- authorized_keysコピー
- ホームディレクトリ移動
まずはここを確認しましょう。
実務での切り分け手順
- getenforce確認
- journalctl確認
- audit.log確認
- ausearch確認
- restorecon実施
- setenforce 0で切り分け
ほとんどの問題はこの流れで特定できます。
まとめ
SELinuxはSSH接続トラブルの原因になることがありますが、多くの場合は設定ミスやラベル不整合によるものです。
特にSSHポート変更やauthorized_keysのコピー、ホームディレクトリ変更後は注意が必要です。
問題発生時はgetenforce、audit.log、ausearch、restoreconを活用して調査しましょう。
安易にSELinuxを無効化するのではなく、原因を特定してEnforcingのまま安全に運用することが重要です。






