ldapsearch 는 조회 전용이므로 그룹에 멤버를 넣으려면 ldapmodify 를 쓴다. 그룹 objectClass 에 따라 사용하는 속성이 다르고, AD 의 member 는 항상 전체 DN 을 저장하므로 추가 후 조회 결과가 CN=... 형태로 보이는 것이 정상이다.
ldapsearch -x -H ldaps://<dc>:636 -D "CN=bind-user,CN=Users,DC=example,DC=com" -W \
-b "DC=example,DC=com" "(sAMAccountName=cdpadmin)" dn sAMAccountName memberOf
ldapsearch -x -H ldaps://<dc>:636 -D "CN=bind-user,CN=Users,DC=example,DC=com" -W \
-b "DC=example,DC=com" "(CN=develop-admin)" dn member
| 그룹 유형 | 속성 | 값 |
|---|---|---|
AD group |
member |
전체 DN |
OpenLDAP groupOfNames |
member |
전체 DN |
OpenLDAP groupOfUniqueNames |
uniqueMember |
전체 DN |
OpenLDAP posixGroup |
memberUid |
uid 값만 |
dn: CN=develop-admin,CN=Users,DC=example,DC=com
changetype: modify
add: member
member: CN=cdpadmin,CN=Users,DC=example,DC=com
ldapmodify -x -H ldaps://<dc>:636 -D "CN=bind-user,CN=Users,DC=example,DC=com" -W -f add-member.ldif
rm -f add-member.ldif
파일 없이 표준 입력으로 넣어도 된다. 제거는 add: 를 delete: 로 바꾼다. groupOfNames 는 member 가 최소 1개 있어야 하므로 빈 그룹을 만들 수 없다.
ldapmodify -x -D "cn=admin,dc=example,dc=com" -W <<'EOF'
dn: cn=developers,ou=groups,dc=example,dc=com
changetype: modify
add: member
member: uid=hong,ou=users,dc=example,dc=com
EOF
AD 의 group 객체는 member 에 멤버 객체의 전체 DN 을 저장하도록 설계돼 있다. memberUid: cdpadmin 처럼 짧은 이름이 들어가는 것은 OpenLDAP posixGroup 이다. 조회 결과의 distinguishedName: 줄은 그룹 자신의 DN 이지 멤버십과 무관하다. 멤버 확인은 그룹의 member, 사용자 쪽에서는 memberOf 를 본다.
ldapsearch -x -H ldap://<dc> -D cdpadmin@EXAMPLE.COM -W \
-b "CN=develop-admin,OU=Groups,DC=example,DC=com" "(objectClass=*)" member
ldapsearch -x -H ldap://<dc> -D cdpadmin@EXAMPLE.COM -W \
-b "CN=cdpadmin,CN=Users,DC=example,DC=com" "(objectClass=*)" memberOf
비밀번호는 -w 대신 -W(프롬프트) 또는 -y <파일> 로 넣고, 운영에서는 LDAPS(636) 나 -ZZ(StartTLS) 를 쓴다. LDIF 에 자격증명을 넣지 않는다.