よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

OpenLDAP利用時に特定ユーザでログインしようとするとPermissionErrorが発生

システムアカウント管理にOpenLDAPを用いている場合、LDAPサーバに認証をお願いするようにします。
今日、OpenLDAPサーバにはアカウントを追加しているが、なぜか特定のユーザでPermission ErrorとなりSSHログインできないという現象が発生したのでその対処方法をメモしておきます。

まずは背景。
昔はシステムアカウントをローカルで管理しており、途中からOpenLDAPでのユーザ認証に変更したため、hogeユーザの情報は/etc/passwdや/etc/shadowに登録されています。
一方、OpenLDAP導入後に追加したユーザであるfugaはシステムアカウントを持ちません。

  • hoge : システムアカウント + LDAPアカウント
  • fuga : LDAPアカウント

また、SSHについてはログイン制限などは実施していません。
こんな状況で、まずは何故ログインできないかを確認します。

ひとまずSSHログインをして、hogeユーザとfugaユーザのログを比較してみます。

hogeユーザの場合

わざと認証パスワードを間違えると、/var/log/messagesには以下のようなログが残されます。

Feb 1 00:00:00 linux-server sshd(pam_unix)[xxxx]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.10 user=hoge

fugaユーザの場合

わざと認証パスワードを間違えても、/var/log/messagesには出力はありません。
が、/var/log/secureに以下の出力があります。

Feb 1 00:00:00 linux-server sshd[xxxx]: Failed password for fuga from ::ffff:192.168.1.10 port xxxx ssh2

上記の結果から、ログが出力される場所が異なっているため、認証処理の流れが多少異なっているのであろうと推測することができますね。
おそらくPAMまわりの設定に問題があるんだろうなぁという程度ですね。

続いてrootユーザになり、NO PASSWORDでhoge/fugaユーザになれるかどうかを確認してみます。
すると、なんとfugaユーザにはなれないではないですか!

ということで、/etc/shadowのパスワード情報しか見れてないのではないかと考えます。

そして、/etc/pam.d/system-authの設定を見直してみたら、以下のようにすると解決できることが判明。

account required /lib/security/$ISA/pam_unix.so broken_shadow

broken_shadowが無かったためにshadowしか参照できなかった?んでしょうね。

皆さんもご注意ください。