Last Updated on 2014年2月4日 by かんりにん
OpenSSH4.4以上で利用できるようになったMatch(条件分岐)ディレクティブを使った、アクセスコントロールを検証。
参考:お世話になっております!
OpenSSH-5.9p1 日本語マニュアルページ (2011/09/10)
きっかけとしては、
原則rootのログインは禁止でOKだけど、特定のリモートホストからのバッチ処理で
root権限が必要になってしまったので、このホストだけはrootでの接続を許可したい
というニーズができた、というのが理由です。
そこでPAM認証の設定で検証しようとしていたら、たまたまMatchディレクティブで PermitRootLogin のコントロールができるようになっていたので
(更新履歴を調べたら、ずいぶん前でしたね…orz)
CentOS6.*のパッケージに含まれるOpenSSH-5.3系で、手っ取り早く試してみました。
Matchディレクティブでできること(なんとなくユースケース)
- デフォルトは公開鍵認証だけだけど、ユーザーによってパスワード認証を許可できるOK
- 特定のホストからはrootログインを受け付ける
- 踏み台サーバーにはX11転送を許可する
などなど。
条件分岐に使用できるパターン
パターンマッチング用のパラメータ
- ”User(ユーザ名)”
- 設定例
”Match User ”
- 設定例
- ”Group(グループ名)”
- 設定例
”Match User ”
- 設定例
- ”Host(ホスト名)”
- 設定例
”Match Host <webserver.domain.local’>’
- 設定例
- ”Address(アドレス) ※CIDR表記での指定も可能。”
- 設定例
''Match Address 192.168.0.254/32'' ''Match Address 192.168.0.0/24'' ''Match Address 192.168.0.*''
- 設定例
パターンマッチングに関する備考
- パターンの指定には単一のエントリ、またはカンマで区切りでの複数のパターン
ワイルドカードを使ったパターンマッチングも使用可能。 - Address指定では、CIDR表記での指定も可能。
Matchディレクティブ内で使用できる設定
sshd_configで使用できるパラメータすべてが使用できるわけではないので、確認すること。
AllowAgentForwarding AllowTcpForwarding AuthorizedKeysFile AuthorizedPrincipalsFile Banner ChrootDirectory ForceCommand GatewayPorts GSSAPIAuthentication HostbasedAuthentication HostbasedUsesNameFromPacketOnly KbdInteractiveAuthentication KerberosAuthentication MaxAuthTries MaxSessions PasswordAuthentication PermitEmptyPasswords PermitOpen PermitRootLogin PermitTunnel PubkeyAuthentication RhostsRSAAuthentication RSAAuthentication X11DisplayOffset X11Forwarding X11UseLocalHost
サンプルケース
やりたいこと
- LANの内外でアクセス権限を変えたい
- リモートのバッチ処理サーバーのうち、rootでの処理が必要なジョブを動かすサーバーは
PermitRootLoginを許可、変わりに認証は公開鍵認証のみとする。
権限割り当てのイメージ
- LAN外
- PermitRootLogin はもちろんno
パスワード認証を許可しない
公開鍵認証のみ
X11転送を禁止。
- PermitRootLogin はもちろんno
- LAN内
- PermitRootLogin を許可する。
パスワード認証を許可する
X11転送を許可。
- PermitRootLogin を許可する。
- リモートのバッチ処理サーバー
- PermitRootLogin を許可する。
→バッチ処理が目的。root権限が必要なファイルの取得、アップが必要。
パスワード認証を許可しない
公開鍵認証のみ
X11転送を禁止。
- PermitRootLogin を許可する。
設定ファイルサンプル(sshd_config)
sshd_config抜粋
Port 50022 Protocol 2 SyslogFacility AUTHPRIV PermitRootLogin no PubkeyAuthentication yes PasswordAuthentication no X11Forwarding no # LAN内ホストからの接続時のアクセスコントロール Match Address 192.168.1.0/24 PermitRootLogin yes PasswordAuthentication yes X11Forwarding yes # バッチ処理サーバーへのアクセスコントロール Match Address ***.***.***.***/32 PermitRootLogin yes
上記の設定にてアクセスコントロールの動作を確認。
今回の要件は問題なく完了できそうです。