nss_ldap と pam_ldap で LDAP 認証

通常のアカウントの認証方法は大抵の場合が /etc/passwd だったりします。
それを LDAP に管理させれば、ホスト毎にアカウントを設定する手間や、不整合を無くすことが出来ます。

nss_ldap のインストール

まずは nss_ldap のインストールから行います。

# portinstall net/nss_ldap

The nss_ldap module expects to find its configuration files at the
following paths:

LDAP configuration:     /usr/local/etc/nss_ldap.conf
LDAP secret (optional): /usr/local/etc/nss_ldap.secret


WARNING: For users of previous versions of this port:
WARNING:
WARNING: Previous versions of this port expected configuration files
WARNING: to be located at /etc/ldap.conf and /etc/ldap.secret.  You
WARNING: may need to move these configuration files to their new
WARNING: location specified above.

pam_ldap のインストール

次に pam_ldap のインストールを行います。

# portinstall security/pam_ldap

Copy /usr/local/etc/ldap.conf.dist to /usr/local/etc/ldap.conf, then edit
/usr/local/etc/ldap.conf in order to use this module.  Add a line similar to
the following to /etc/pam.conf on 4.X, or create an /etc/pam.d/ldap on 5.X
and higher with a line similar to the following:

login   auth    sufficient      /usr/local/lib/pam_ldap.so

pam.conf(5) を見てみると分かるのですが、 function-class には login というものはありません。
このインフォメーションは少々古いもののようです。

設定ファイルのコピー

ldap.conf.dist と nss_ldap.conf.sample をコピーします。

# cp /usr/local/etc/ldap.conf.dist /usr/local/etc/ldap.conf
# ln -s /usr/local/etc/ldap.conf /usr/local/etc/nss_ldap.conf
# chmod 644 /usr/local/etc/ldap.conf

nss_ldap と pam_ldap の設定

nss_ldap は pam_ldap のシンボリックリンクなので、 pam_ldap を編集すれば nss_ldap にも適用されます。

# vi /usr/local/etc/ldap.conf

host ldap.clx.ath.cx
base dc=clx,dc=ath,dc=cx
uri ldaps://ldap.clx.ath.cx/
port 636
scope one
bind_policy soft
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberUid
nss_base_passwd		ou=Users,ou=System,dc=clx,dc=ath,dc=cx?one
nss_base_shadow		ou=Users,ou=System,dc=clx,dc=ath,dc=cx?one
nss_base_group		ou=Group,ou=System,dc=clx,dc=ath,dc=cx?one
ssl on
tls_checkpeer yes
tls_cacertfile /usr/local/etc/openldap/certs/ca.cert

この設定の中でも、bind_policyだけは指定しておいた方が良いです。

以降の作業について

これからはシステムと深く関わる部分なので、新しいコネクションを開いて root としてログインしたものを用意しておいてください。
失敗すると su や SSH でのログインが出来なくなるので、遠隔操作の場合は何も出来なくなってしまいます。

nsswitch.conf の編集

nsswitch.conf を編集して LDAP に登録されているユーザでログイン出来るようにしておきます。

# vi /etc/nsswitch.conf

#group: compat
#group_compat: nis
group: files ldap
hosts: files dns
networks: files
#passwd: compat
#passwd_compat: nis
passwd: files ldap
shells: files

既存の group,passwd をコメントアウトし、新たに group,passwd を定義しています。
詳細は nsswitch.conf(5) をご参照下さい。

テストユーザの追加

動作確認をする為、テストユーザを追加します。

# vi testuser.ldif

################################################################################
# user data

# test
dn: uid=test,ou=Users,ou=System,dc=clx,dc=ath,dc=cx
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: test
uid: test
userPassword: {SSHA}I8H1uziqjgevWfKM4JG9V0M29FY6MkJp
uidNumber: 11000
gidNumber: 11000
homeDirectory: /nonexistent
loginShell: /usr/sbin/nologin
gecos: test user

dn: cn=test,ou=Group,ou=System,dc=clx,dc=ath,dc=cx
objectClass: posixGroup
cn: test
gidNumber: 11000
memberUid: test

ldapadd コマンドでテストユーザを追加します。

# ldapadd -x -D 'cn=Manager,dc=clx,dc=ath,dc=cx' -W -f testuser.ldif

動作確認

id で /etc/passwd にないユーザ情報を問い合わせてみます。

# id test
uid=11000(test) gid=11000(test) groups=11000(test)

PAM の設定

正常に /etc/nsswitch.conf が編集出来ている事を確認したら PAM の設定を行います。

# vi /usr/local/etc/pam.d/system

auth		sufficient	/usr/local/lib/pam_ldap.so	no_warn try_first_pass
account		sufficient	/usr/local/lib/pam_ldap.so
session		optional	/usr/local/lib/pam_ldap.so
password	sufficient	/usr/local/lib/pam_ldap.so	no_warn try_first_pass

動作確認

su で動作確認してみます。

# su test
This account is currently not available.