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

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

出力例です。
Enforcing

SELinuxが有効です。

状態の意味

状態意味
Enforcing有効
Permissiveログのみ
Disabled無効

通常はEnforcingで運用します。

SSH接続時によくある症状

  • 公開鍵認証だけ失敗する
  • Permission deniedになる
  • ポート変更後に接続できない
  • ホームディレクトリ変更後に失敗する
  • ログイン直後に切断される

SELinuxが原因の場合があります。

原因1 SSHポートを変更した

最も多いトラブルの一つです。

例えば22番から2222へ変更します。

Port 2222

sshd自体は起動します。

しかしSELinuxが通信を拒否する場合があります。

現在許可されているSSHポート確認

# semanage port -l | grep ssh

出力例です。
ssh_port_t tcp 22

SSHポート追加方法

2222番を許可します。

# semanage port -a -t ssh_port_t  -p tcp 2222

その後接続できるようになります。

原因2 ホームディレクトリ移動

ユーザーのホームディレクトリを変更した場合です。

SELinuxラベルが正しくないと公開鍵認証に失敗します。

SELinuxコンテキスト確認

# ls -ldZ /home/user

SELinuxラベルを確認できます。

原因3 .sshディレクトリのラベル不整合

公開鍵認証では以下が重要です。

~/.ssh
~/.ssh/authorized_keys

SELinuxラベルが不正だと認証できません。

コンテキストを確認する

# 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 AVC

SELinux拒否ログのみ表示できます。

直近の拒否を確認する

# ausearch -m AVC -ts recent

トラブル調査で便利です。

sealertを利用する

詳細解析が可能です。

# sealert -a /var/log/audit/audit.log

対処方法も表示されます。

一時的に切り分ける方法

SELinuxを一時的にPermissiveへ変更します。

setenforce 0

これで接続できるようになればSELinuxが原因です。

戻す方法

setenforce 1

Enforcingへ戻します。

Disabledは推奨されない

以下のような運用は推奨されません。

SELINUX=disabled

セキュリティが低下します。

問題を解決してEnforcingで運用しましょう。

SSH関連のSELinux設定確認

利用可能な設定を確認します。

# getsebool -a | grep ssh

SSH関連ポリシーを確認できます。

クラウド環境での注意点

AWSやAzureでもSELinux有効環境があります。

ポート変更やホームディレクトリ変更時は注意が必要です。

実務で最も多い原因

経験上は以下が多く見られます。

  • SSHポート変更
  • restorecon忘れ
  • authorized_keysコピー
  • ホームディレクトリ移動

まずはここを確認しましょう。

実務での切り分け手順

  1. getenforce確認
  2. journalctl確認
  3. audit.log確認
  4. ausearch確認
  5. restorecon実施
  6. setenforce 0で切り分け

ほとんどの問題はこの流れで特定できます。

まとめ

SELinuxはSSH接続トラブルの原因になることがありますが、多くの場合は設定ミスやラベル不整合によるものです。

特にSSHポート変更やauthorized_keysのコピー、ホームディレクトリ変更後は注意が必要です。

問題発生時はgetenforce、audit.log、ausearch、restoreconを活用して調査しましょう。

安易にSELinuxを無効化するのではなく、原因を特定してEnforcingのまま安全に運用することが重要です。