はまりました。
LDAPでアカウントを管理しているホスト
host-a.example.com
host-b.example.com
があってLDAPにアカウントとして
user-a
user-b
とあってhost-aにuser-aのみシェルアクセスを認めたい場合、
host-a, host-b両方の/etc/ldap.confを
・・・
pam_check_host_attr yes
・・・
としてuser-aのLDAPエントリを
dn: uid=user-a,ou=People,dc=example,dc=com
objectClass: top
objectClass: posixAccount
objectClass: account
uid: user-a
uidNumber: 500
gidNumber: 100
cn: user-a
homeDirectory: /home/user-a
loginShell: /bin/bash
host: host-a.example.com
とすればおっけー・・・のはずですが二つほど注意事項があります。
一つはhostアトリビュートのホスト名はそのホストのgethostname関数が返す値、つまりLinuxだと/etc/sysconfig/networkのHOSTNAMEの値になります。DNSのCNAMEなどは使えないみたいです。
今回の場合host-aの/etc/sysconfig/networkは
NETWORKING=yes
HOSTNAME=host-a.example.com
とすればいいわけです。
もう一つはOpenLDAP 2.2からはスキーマチェックが厳しくなったためユーザーのobjectClassとしてよく使われるinetOrgPersonとhostアトリビュートを定義できるobjectClassのaccountが同居できない点です。
・・・
objectClass: inetOrgPerson
objectClass: account
・・・
とすると
RESULT tag=103 err=65 text=invalid structural object class chain (account/inetOrgPerson)
といったログがLDAPサーバーの方で吐かれます。
これを回避するにはスキーマを変更するかスキーマチェックを無視するしかないっぽいです。
ちなみにいいかどうかわかりませんがposixAccountにhostアトリビュートの追加を許すことで解決しました。
objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' SUP top AUXILIARY
DESC 'Abstraction of an account with POSIX attributes'
MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
MAY ( userPassword $ loginShell $ gecos $ description $ host) )
として
dn: uid=user-a,ou=People,dc=example,dc=com
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
givenName: hoge
sn: hoge
displayName: hoge hoge
uid: user-a
homeDirectory: /home/user-a
loginShell: /bin/bash
cn: user-a
gidNumber: 100
uidNumber: 500
host: host-a.example.com
とすればめでたくinetOrgPersonとhostアトリビュートが同時で使えるようになります。
まさに探し続けていた情報です、これで嵌っていた作業を一歩進めることができます!
非ッ常に参考になりました。ありがとうございます。
追伸:
印刷して保存しようとしたらエロスな写真がスタンプになっていたので、
仕方なしにダイオウグソクムシとか小ブッシュとかの画像を連続で送りました。
無駄にマシンパワー消費させてしまって申し訳ないです。
たびたび申し訳ないス。
LDAPはパッケージで2.3.27-5使っておりますが、accountのオブジェクトクラスなら
posixAccountと共存できて、かつhostアトリビュートを使えますね。
inetOrgPersonにこだわらないならばaccountを使うのもアリではないでしょうか。
もしくはobjectClass: extensibleObjectをくっつけてみるとか。