ã¡ãã£ã¨ãOpenLDAPã¸å¿åã¦ã¼ã¶ã¼ããã®ã¢ã¯ã»ã¹ï¼åç §ï¼ã許å¯ããæ¹æ³ã調ã¹ããã¨ã«ãªãã¾ãã¦ã
確èªã¯ããã¡ãã®OpenLDAPã®Dockerã¤ã¡ã¼ã¸ã使ãã¾ãã
èµ·åã
$ docker container run -it --rm --name openldap --env LDAP_ADMIN_PASSWORD="admin-password" --env LDAP_DOMAIN=test.example osixia/openldap:1.2.2
管çã¦ã¼ã¶ã¼ã¯ãadmin / admin-password ã§ãã
ããã§ããã¹ãç¨ã®ã¨ã³ããªãç»é²ãã¦ããã¾ãã
test.ldif
dn: uid=user001,dc=test,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount uid: user001 cn: ãã¹ã 太é sn: ãã¹ã uidNumber: 10001 gidNumber: 10001 homeDirectory: /home/user001 userPassword: {SSHA}K1h08ZgBJQIInrqH1eerLG/I4jO2H9fh description: My Test Account
ç»é²ã
# ldapadd -f test.ldif -D "cn=admin,dc=test,dc=example,dc=com" -w admin-password adding new entry "uid=user001,dc=test,dc=example,dc=com"
確èªã
# ldapsearch -x -H ldap://localhost -b uid=user001,dc=test,dc=example,dc=com -D "cn=admin,dc=test,dc=example,dc=com" -w admin-password # extended LDIF # # LDAPv3 # base <uid=user001,dc=test,dc=example,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # user001, test.example.com dn: uid=user001,dc=test,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount uid: user001 cn:: 44OG44K544OIIOWkqumDjg== sn:: 44OG44K544OI uidNumber: 10001 gidNumber: 10001 homeDirectory: /home/user001 userPassword:: e1NTSEF9SzFoMDhaZ0JKUUlJbnJxSDFlZXJMRy9JNGpPMkg5Zmg= description: My Test Account # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
åç §ã§ãã¦ãã¾ãã
ããã§ããããå¿åã¦ã¼ã¶ã¼ããã®ã¢ã¯ã»ã¹ï¼ãã¤ã³ãDNãªãï¼ã¨ããã¨ãåç §ã§ããªããªãã¾ãã
# ldapsearch -x -H ldap://localhost -b uid=user001,dc=test,dc=example,dc=com # extended LDIF # # LDAPv3 # base <uid=user001,dc=test,dc=example,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # search result search: 2 result: 32 No such object # numResponses: 1
ç¾å¨ã®è¨å®ã確èªãã
ã¢ã¯ã»ã¹æ¨©éã®è¨å®ç¢ºèªã¯ã以ä¸ã®ã³ãã³ãã§è¡ãã¾ãã
# ldapsearch -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}mdb,cn=config
以ä¸ã®ããolcAccessãã®é¨åãã¢ã¯ã»ã¹æ¨©éã®è¨å®ã§ãã
# {1}mdb, config dn: olcDatabase={1}mdb,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: {1}mdb olcDbDirectory: /var/lib/ldap olcSuffix: dc=test,dc=example,dc=com olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by dn="cn=admin,dc=test,dc=example,dc=com" write by anonymous auth by * none olcAccess: {1}to * by self read by dn="cn=admin,dc=test,dc=example,dc=com" write by * none
ç¾å¨ã®è¨å®ã¯ããuserPasswordãããã³ãshadowLastChangeãå±æ§ã«ã¤ãã¦ã¯èªåèªèº«ã¯æ´æ°å¯è½ã管çã¦ã¼ã¶ã¼ããã
æ´æ°å¯è½ãå¿åã¦ã¼ã¶ã¼ããã®authï¼ãã¤ã³ãï¼ã¯å¯è½ããã以å¤ã¯ã¢ã¯ã»ã¹æ¨©ãªããã¨ããè¨å®ã«ãªãã¾ãã
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by dn="cn=admin,dc=test,dc=example,dc=com" write by anonymous auth by * none
ããã²ã¨ã¤ã¯ããuserPasswordãããshadowLastChangeã以å¤ã®å±æ§ã«ã¤ãã¦ãèªèº«ã¯åç
§å¯è½ã管çã¦ã¼ã¶ã¼ããã¯
æ´æ°å¯è½ããã以å¤ã¯ã¢ã¯ã»ã¹æ¨©ãªããã¨ãªãã¾ãã
olcAccess: {1}to * by self read by dn="cn=admin,dc=test,dc=example,dc=com" write by * none
ã¡ãªã¿ã«ãOpenLDAPãµã¼ãã¼å ¨ä½ã®è¨å®ã確èªããå ´åã¯ããã¡ãã
# ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config
ã-Y EXTERNALãã¯ãLDAP Version 3ã®SASLèªè¨¼ã®ãã¡ãå¤é¨èªè¨¼ï¼Linuxã¦ã¼ã¶ã¼èªè¨¼ï¼ã使ãæå®ã§ãã-Hãã§ã¯æ¥ç¶å
ã®
LDAPãµã¼ãã¼ãæå®ããã®ã§ããããldapiãã¯UNIXãã¡ã¤ã³ã½ã±ããã使ã£ããã¼ã«ã«ã®LDAPãµã¼ãã¼ã¨æ¥ç¶ããããã®
æå®ã§ãã
ã§ãå¿åã¦ã¼ã¶ã¼ãåç
§å¯è½ãªããã«ã2ã¤ç®ã®ã¢ã¯ã»ã¹æ¨©éã®è¨å®ã§ã*ãã®é¨åããreadãã«ãã¾ãã
access.ldif
dn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by dn="cn=admin,dc=test,dc=example,dc=com" write by anonymous auth by * none olcAccess: {1}to * by self read by dn="cn=admin,dc=test,dc=example,dc=com" write by * read
å¤æ´ã
# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f access.ldif modifying entry "olcDatabase={1}mdb,cn=config"
ããã§ãå¿åã¦ã¼ã¶ã¼ã§ãåç §å¯è½ã«ãªãã¾ããã
# ldapsearch -x -H ldap://localhost -b uid=user001,dc=test,dc=example,dc=com # extended LDIF # # LDAPv3 # base <uid=user001,dc=test,dc=example,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # user001, test.example.com dn: uid=user001,dc=test,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount uid: user001 cn:: 44OG44K544OIIOWkqumDjg== sn:: 44OG44K544OI uidNumber: 10001 gidNumber: 10001 homeDirectory: /home/user001 description: My Test Account # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1