コンテンツにスキップ

RFC 2307のユーザーとグループ

RFC 2307 は、LDAP 上で POSIX ユーザー・グループなどの名前サービス情報を表現するためのスキーマを定義する。


Linuxユーザーとして扱うための基本

Section titled “Linuxユーザーとして扱うための基本”

LDAP サーバーは、エントリを見ただけで「これは Linux ユーザーだ」と特別扱いするわけではない。

Linux ユーザーとして扱われるには、次の条件がそろう必要がある。

  • LDAP エントリが POSIX ユーザー用の objectClass と属性を持つ
  • NSS クライアントがそのエントリを検索する
  • PAM クライアントが認証に使う
  • UID、GID、ホームディレクトリ、シェルなどが Linux 側で有効な値になっている

RFC 2307 の代表的な objectClass は次のとおり。

objectClass 種類 役割
posixAccount AUXILIARY POSIX ユーザー属性を追加する
shadowAccount AUXILIARY shadow password 系の期限・失効属性を追加する
posixGroup STRUCTURAL POSIX グループを表す

一般的な教材では、ユーザーを次のように作ることが多い。

dn: uid=ldapuser,ou=people,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: ldapuser
cn: LDAP User
sn: User
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/ldapuser
loginShell: /bin/bash
userPassword: {SSHA}...
objectClass 役割
inetOrgPerson 人としての一般属性を持つ本体
posixAccount Linux / POSIX ユーザー属性を追加
shadowAccount パスワード期限・失効関連の属性を追加

inetOrgPerson は人の情報を持たせやすいため、ユーザーエントリの本体としてよく使われる。ただし、Linux ログインに必須なのは inetOrgPerson そのものではなく、NSS / PAM が必要とする POSIX 属性である。


個人情報を持たせない単純なログインアカウントなら、 account + posixAccount で足りる場合がある。

dn: uid=ldapuser,ou=people,dc=example,dc=com
objectClass: account
objectClass: posixAccount
uid: ldapuser
cn: ldapuser
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/ldapuser
loginShell: /bin/bash

ただし、どの構成で動くかは LDAP サーバーのスキーマと NSS / PAM クライアントの設定にも依存する。教材や運用手順では、属性の拡張性が高い inetOrgPerson + posixAccount + shadowAccount が採用されることが多い。


shadowAccount は Linux ログインに常に必須ではない。

shadowAccount は、次のような属性を扱うための AUXILIARY objectClass である。

  • shadowLastChange
  • shadowMin
  • shadowMax
  • shadowWarning
  • shadowExpire

パスワード期限や失効情報を LDAP で管理したい場合に使う。単純な Bind 認証だけなら、構成によっては posixAccount と userPassword で足りることがある。


Linux ユーザーで重要な属性は次のとおり。

属性 役割
uid ログイン名
cn common name。 posixAccount の必須属性でもある
uidNumber Linux の UID
gidNumber 主グループの GID
homeDirectory ホームディレクトリ
loginShell ログインシェル
userPassword LDAP Bind やパスワード検証に使われる値

uidNumber と gidNumber は数値として Linux 側で意味を持つ。既存ローカルユーザーや他の LDAP ユーザーと重複しないように管理する必要がある。


userPassword は LDAP のパスワード属性である。

userPassword: {SSHA}...

これは /etc/shadow の行そのものではない。LDAP Bind や PAM モジュールによるパスワード検証に使われる。

NSS の shadow 情報として平文やハッシュをそのまま返すかどうかは、クライアント設定やセキュリティポリシーに依存する。多くの構成では、パスワードそのものを NSS 経由で見せず、Bind によって認証する。


POSIX グループは posixGroup で表す。

dn: cn=developers,ou=groups,dc=example,dc=com
objectClass: posixGroup
cn: developers
gidNumber: 10000
memberUid: ldapuser
属性 役割
cn グループ名
gidNumber Linux の GID
memberUid 補助グループに所属するユーザー名

posixGroup は STRUCTURAL objectClass なので、グループエントリの本体として単独で使える。


Linux では、ユーザーには主グループと補助グループがある。

種類 LDAP での決まり方
主グループ ユーザーエントリの gidNumber
補助グループ posixGroup エントリの memberUid

たとえば次のユーザーは、主グループ GID が 10000 である。

uid: ldapuser
gidNumber: 10000

同じ gidNumber: 10000 のグループがある場合、それが主グループ名として解決される。

dn: cn=developers,ou=groups,dc=example,dc=com
objectClass: posixGroup
cn: developers
gidNumber: 10000

補助グループに入れる場合は、グループ側に memberUid を書く。

memberUid: ldapuser

主グループにするためだけなら、通常 memberUid は必須ではない。主グループはユーザーの gidNumber で決まる。



  • RFC 2307 posixAccount、 posixGroup、 shadowAccount、 uidNumber、 gidNumber、 memberUid など。
  • nslcd.conf(5) NSS / PAM LDAP クライアントがユーザー・グループ検索に使うフィルターやマッピング。