vLDAPを用いたSSHパスワード認証(MFAあり)

vLDAPを用いたSSHパスワード認証

OneLogin担当の川野です。本日はvLDAPを利用して、SSHパスワード認証を実現する手順についてご説明します。vLDAPとはOneLoginがLDAPディレクトリの役割を持つことができるOneLoginの機能のことです。これを実現することはつまり、ディレクトリサーバーなしに既存のユーザー情報を参照してSSH認証ができることになります。また、vLDAPにはYubiKey,OTPなどを利用したMFA(多要素認証)の機能が作り付けられており、より強固な認証が可能となります。なお、MFAのファクターはユーザーに割り当てるポリシーで変更することができます。

f:id:kawanohate:20200904162819p:plain
vLDAPを利用したSSH認証のイメージ

ただし、本来のSSH認証と比較して、以下に示す2つの制約があります。

  • 公開鍵認証が実現できず、パスワード認証のみとなる
  • OneLoginでのグループが反映されず、Linux側では全ユーザーが同じグループ所属になる

目次

  1. 準備するもの
  2. OneLogin側の設定
  3. サーバー側の設定
  4. ユーザーによるSSH接続

準備するもの

  • OneLogin管理者権限を持つアカウント(バインド用)
  • 他のOneLoginアカウント(ログイン用)
  • SSH認証用Linuxサーバー(本記事はCentOS7 を使用しています)

OneLogin側の手順

管理者としてOneLoginにログインし、Authentication > VLDAP から「vLDAPサービスを有効化する」のトグルをオンにします。また、MFAを利用する場合には、「Require Password + OTP」にチェックをいれ、MFAを適用したいユーザーにチェックを入れます。

f:id:kawanohate:20200904170308p:plain
vLDAPの設定

以上でOneLoginがvLDAPとして機能するようになりました。

サーバー側の手順

サーバーにルートユーザーとして入り、まずはvLDAPとの接続を確保するためnslcdの設定をします。この設定により、サーバーはvLDAPにバインドできるようになります。

# vi /etc/nslcd.conf

---
uri ldaps://ldap.us.onelogin.com
base dc={環境のサブドメイン},dc=onelogin,dc=com
binddn cn={管理者のcn},ou=users,dc=ldap,dc={環境のサブドメイン},dc=com
bindpw {管理者のパスワード}
---

systemctl restart nslcd

次にnsswitchの設定ファイルを編集します。この設定により、サーバーは名前解決のためにまずサーバー 内のファイルを参照し、解決しなければ次にLDAPを参照するようになります。

# vi /etc/nsswitch.conf

---
passwd:      files  ldap
shadow:      files  ldap
group:         files  ldap
services:     files  ldap
netgroup:    files  ldap
automount  files  ldap
---

次にSSH接続された時の設定であるsshdのファイルを操作します。

vi /etc/ssh/sshd_config

---
PasswordAuthentication yes
---

systemctl restart slapd

以上の設定でOneLoginのユーザーでサーバーにログインできるようになりました。

vLDAPではgidとしてOneLogin Account ID(環境の識別子)を採用しているため(現在修正予定ではあります)、全OneLoginユーザーが同じグループIDを持つことになります。Linux側ではそのグループIDに"vldap-user"とでもグループ名を付けておきましょう。

# groupadd -g {Account ID} vldap-user

ユーザーによるSSHログイン

以下コマンドでSSH接続します。パスワードを求められるので下記に示す適切な文字列を入力してください。

$ ssh {ユーザーのcn}@{サーバーのIP}

○ MFAなしの場合
→OneLoginのパスワード
○OneLogin ProtectをMFAに設定している場合
→OneLoginのパスワード+ProtectのOTP
○Google AuthenticatorをMFAに設定している場合
→OneLoginのパスワード+AuthenticatorのOTP
○YubiKeyをMFAに設定している場合
→OneLoginのパスワード+YubiKey