| Works
「389 Directory Server」でSSHに公開鍵を使って認証する
以前、389-ds関連の記事を投稿していましたが、最近も少し触っていたのでメモです。
SSHでログインするときに公開鍵認証を使うことも多いと思いますので、それをLDAPのユーザー情報として格納し、SSHログイン時に利用可能にするまでです。
LDAPサーバの設定
とりあえず基本的な検証環境は以前の記事を踏襲します。
SSHで公開鍵認証を使う場合はログイン先の"authorized_keys"ファイルに公開鍵を登録します。この情報をLDAPへ格納する際は"sshPublicKey"属性を使うのですが、389-dsではデフォルトのスキーマでこの属性が存在しないので、カスタムスキーマとして追加することにします。
以下のLDIFファイルで"sshPublicKey"属性及びそれを含むオブジェクトクラス"ldapPublicKey"を定義します。
dn: cn=schema
changetype: modify
add: attributetypes
attributetypes: ( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey'
DESC 'MANDATORY: OpenSSH Public key'
EQUALITY octetStringMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
SINGLE-VALUE )
-
add: objectClasses
objectClasses: ( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey'
SUP top AUXILIARY
DESC 'MANDATORY: OpenSSH LPK objectclass'
MAY ( sshPublicKey $ uid ) )作成したLDIFを"ldapmodify"で適用します。
この方法で適用したスキーマは"/etc/dirsrv/slapd-<インスタンス名>/schema/99user.ldif"ファイルに保存されるので、このファイルを見て確認することが可能です。
スキーマを追加したら、ユーザー情報に公開鍵を追加します。
既にユーザー"test"が作成済みとして、以下のようなLDIFになります。"sshPublicKey"属性に公開鍵をそのまま入力してください。
dn: uid=test,ou=people,dc=example,dc=com
changetype: modify
add: objectClass
objectClass: ldapPublicKey
-
add: sshPublicKey
sshPublicKey: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABg~ (以下省略)これを"ldapmodify"で適用すればサーバ側の作業は完了です。
LDAPクライアントの設定
LDAPに格納した公開鍵を利用してSSHログインするためには、LDAPクライアント側の設定も必要です。
クライアント側も以前の環境を踏襲し、既にLDAPユーザーでパスワードログインができる状態から始めます。
まず、LDAPとの認証連携に使っているSSSDで公開鍵を読み取れるようにします。
設定ファイル"/etc/sssd/sssd.conf"を開いて、下記のように"services"に"ssh"を追加します(変更部分のみ記載)。
[sssd]
services = nss, pam, autofs, ssh設定を変更してサービス再起動後、"sss_ssh_authorizedkeys"でLDAPから公開鍵が読み取れることを確認します。
# sss_ssh_authorizedkeys -d default test
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABg~ (以下省略)
続いて、SSSDで読み取った公開鍵をSSHサービスで受け取るようにします。
"/etc/ssh/sshd_config"ファイルを直接変更しても良いのですが、最近のRHELのお作法に従って"/etc/ssh/sshd_config.d"配下に対象設定のみ記述したファイルを追加することにします。
設定が完了したらサービス再起動です。
AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandUser nobody
EOF
# systemctl restart sshd.service
以上でクライアント側の設定も完了です。
クライアントへSSHの公開鍵認証でログインできることを確認してください。
こんな所ですかね。