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 グループを表す |
ユーザーエントリ
Section titled “ユーザーエントリ”一般的な教材では、ユーザーを次のように作ることが多い。
dn: uid=ldapuser,ou=people,dc=example,dc=comobjectClass: inetOrgPersonobjectClass: posixAccountobjectClass: shadowAccountuid: ldapusercn: LDAP Usersn: UseruidNumber: 10000gidNumber: 10000homeDirectory: /home/ldapuserloginShell: /bin/bashuserPassword: {SSHA}...| objectClass | 役割 |
|---|---|
inetOrgPerson |
人としての一般属性を持つ本体 |
posixAccount |
Linux / POSIX ユーザー属性を追加 |
shadowAccount |
パスワード期限・失効関連の属性を追加 |
inetOrgPerson は人の情報を持たせやすいため、ユーザーエントリの本体としてよく使われる。ただし、Linux ログインに必須なのは inetOrgPerson そのものではなく、NSS / PAM が必要とする POSIX 属性である。
個人情報を持たせない単純なログインアカウントなら、 account + posixAccount で足りる場合がある。
dn: uid=ldapuser,ou=people,dc=example,dc=comobjectClass: accountobjectClass: posixAccountuid: ldapusercn: ldapuseruidNumber: 10000gidNumber: 10000homeDirectory: /home/ldapuserloginShell: /bin/bashただし、どの構成で動くかは LDAP サーバーのスキーマと NSS / PAM クライアントの設定にも依存する。教材や運用手順では、属性の拡張性が高い inetOrgPerson + posixAccount + shadowAccount が採用されることが多い。
shadowAccountは必須か
Section titled “shadowAccountは必須か”shadowAccount は Linux ログインに常に必須ではない。
shadowAccount は、次のような属性を扱うための AUXILIARY objectClass である。
shadowLastChangeshadowMinshadowMaxshadowWarningshadowExpire
パスワード期限や失効情報を LDAP で管理したい場合に使う。単純な Bind 認証だけなら、構成によっては posixAccount と userPassword で足りることがある。
ユーザー属性
Section titled “ユーザー属性”Linux ユーザーで重要な属性は次のとおり。
| 属性 | 役割 |
|---|---|
uid |
ログイン名 |
cn |
common name。 posixAccount の必須属性でもある |
uidNumber |
Linux の UID |
gidNumber |
主グループの GID |
homeDirectory |
ホームディレクトリ |
loginShell |
ログインシェル |
userPassword |
LDAP Bind やパスワード検証に使われる値 |
uidNumber と gidNumber は数値として Linux 側で意味を持つ。既存ローカルユーザーや他の LDAP ユーザーと重複しないように管理する必要がある。
userPassword
Section titled “userPassword”userPassword は LDAP のパスワード属性である。
userPassword: {SSHA}...これは /etc/shadow の行そのものではない。LDAP Bind や PAM モジュールによるパスワード検証に使われる。
NSS の shadow 情報として平文やハッシュをそのまま返すかどうかは、クライアント設定やセキュリティポリシーに依存する。多くの構成では、パスワードそのものを NSS 経由で見せず、Bind によって認証する。
グループエントリ
Section titled “グループエントリ”POSIX グループは posixGroup で表す。
dn: cn=developers,ou=groups,dc=example,dc=comobjectClass: posixGroupcn: developersgidNumber: 10000memberUid: ldapuser| 属性 | 役割 |
|---|---|
cn |
グループ名 |
gidNumber |
Linux の GID |
memberUid |
補助グループに所属するユーザー名 |
posixGroup は STRUCTURAL objectClass なので、グループエントリの本体として単独で使える。
主グループと補助グループ
Section titled “主グループと補助グループ”Linux では、ユーザーには主グループと補助グループがある。
| 種類 | LDAP での決まり方 |
|---|---|
| 主グループ | ユーザーエントリの gidNumber |
| 補助グループ | posixGroup エントリの memberUid |
たとえば次のユーザーは、主グループ GID が 10000 である。
uid: ldapusergidNumber: 10000同じ gidNumber: 10000 のグループがある場合、それが主グループ名として解決される。
dn: cn=developers,ou=groups,dc=example,dc=comobjectClass: posixGroupcn: developersgidNumber: 10000補助グループに入れる場合は、グループ側に memberUid を書く。
memberUid: ldapuser主グループにするためだけなら、通常 memberUid は必須ではない。主グループはユーザーの gidNumber で決まる。
- RFC 2307
posixAccount、posixGroup、shadowAccount、uidNumber、gidNumber、memberUidなど。
Debian manpages
Section titled “Debian manpages”- nslcd.conf(5) NSS / PAM LDAP クライアントがユーザー・グループ検索に使うフィルターやマッピング。