پرش به مطلب اصلی
ساخت اپ دارکوبی LDAP

ساخت اپ دارکوبی LDAP

بازارچه ابریخواندن 7 دقیقه

LDAP (Lightweight Directory Access Protocol) یک پروتکل استاندارد برای ذخیره و دسترسی به اطلاعات کاربران، گروه‌ها و دستگاه‌ها در یک دایرکتوری سازمانی است؛ سرویس‌هایی مثل Keycloak، Grafana و RocketChat می‌توانند با اتصال به یک سرور LDAP، احراز هویت را به یک منبع مرکزی واگذار کنند.

از طریق دارکوب در کنسول هم‌روش، می‌توان OpenLDAP را به‌عنوان یک اپ داکری مستقر کرد و از آن به‌عنوان پیش‌نیاز احراز هویت LDAP برای سرویس‌های دیگر استفاده کرد.

پیش‌نیازها

  • یک حساب هم‌روش، پروژه فعال در دارکوب و دسترسی ساخت اپ
  • دسترسی به یک دامنه، در صورتی که LDAP باید خارج از کلاستر در دسترس باشد
  • انتخاب رمزهای قوی و منحصربه‌فرد برای حساب ادمین و کاربران نمونه
  • آشنایی اولیه با ساختار DN،‏ OU و فایل LDIF در LDAP

گام اول: انتخاب ایمیج

از داشبورد دارکوب، گزینه ساخت اپ و سپس داکر ایمیج انتخاب می‌شود. اطلاعات ایمیج به این ترتیب وارد می‌شود:

فیلدمقدار
آدرس ایمیجosixia/openldap
تگ ایمیج1.5.0

گام دوم: اطلاعات عمومی

در تب اطلاعات عمومی، اطلاعات پایه اپ مشخص می‌شود:

فیلدمقدار
نام اپldap
پورت سرویس389
دستور اجرایی/bin/sh -c
ورودی‌هاcp /bootstrap-src/*.ldif /container/service/slapd/assets/config/bootstrap/ldif/custom/ && /container/tool/run

گام سوم: پورت‌ها

در تب پورت‌ها، پورت LDAP به این ترتیب تعریف می‌شود:

فیلدمقدار
نامldap
پورت کانتینر389
پروتکلTCP

با فعال‌سازی آدرس خارجی در همین تب، امکان اتصال به سرور LDAP از خارج از کلاستر با دامنه و پورت کاستوم فراهم می‌شود.


گام چهارم: متغیرهای محیطی

در تب متغیرهای محیطی، متغیرهای زیر اضافه می‌شوند:

متغیرتوضیحاتنمونه
LDAP_ORGANISATIONنام سازمانExample Org
LDAP_DOMAINدامنه سازمانexample.org
LDAP_BASE_DNمسیر ریشه دایرکتوریdc=example,dc=org
LDAP_TLSغیرفعال‌سازی TLSfalse
LDAP_REMOVE_CONFIG_AFTER_SETUPنگه‌داری پیکربندی پس از راه‌اندازیfalse

دو متغیر زیر به‌صورت متغیر محیطی امن وارد می‌شوند تا مقادیرشان در لاگ‌ها نمایش داده نشود:

متغیرتوضیحات
LDAP_ADMIN_PASSWORDرمز عبور حساب ادمین (cn=admin,...)
LDAP_CONFIG_PASSWORDرمز عبور پیکربندی LDAP

گام پنجم: بارگذاری داده‌های اولیه (Bootstrap)

برای بارگذاری ساختار اولیه دایرکتوری (OU، کاربران و گروه‌ها)، یک فایل LDIF از طریق Custom Config به کانتینر تحویل داده می‌شود و در اولین راه‌اندازی به‌صورت خودکار اعمال می‌شود.

در تب Custom Config، محتوای زیر وارد می‌شود:

configmap:
configmapItems:
ldap-bootstrap:
path: /bootstrap-src
value:
01-people-and-groups.ldif: |-
dn: ou=people,dc=example,dc=org
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=example,dc=org
objectClass: organizationalUnit
ou: groups

dn: cn=keycloak-reader,dc=example,dc=org
objectClass: organizationalRole
objectClass: simpleSecurityObject
cn: keycloak-reader
description: Read-only bind account for Keycloak
userPassword: reader123

dn: uid=alice,ou=people,dc=example,dc=org
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: Alice Doe
sn: Doe
givenName: Alice
uid: alice
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/alice
loginShell: /bin/bash
mail: alice@example.org
userPassword: alice123

dn: uid=bob,ou=people,dc=example,dc=org
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: Bob Smith
sn: Smith
givenName: Bob
uid: bob
uidNumber: 10002
gidNumber: 10001
homeDirectory: /home/bob
loginShell: /bin/bash
mail: bob@example.org
userPassword: bob123

dn: uid=carol,ou=people,dc=example,dc=org
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: Carol Jones
sn: Jones
givenName: Carol
uid: carol
uidNumber: 10003
gidNumber: 10002
homeDirectory: /home/carol
loginShell: /bin/bash
mail: carol@example.org
userPassword: carol123

dn: cn=developers,ou=groups,dc=example,dc=org
objectClass: top
objectClass: posixGroup
cn: developers
gidNumber: 10001
memberUid: alice
memberUid: bob

dn: cn=admins,ou=groups,dc=example,dc=org
objectClass: top
objectClass: posixGroup
cn: admins
gidNumber: 10002
memberUid: carol

با کلیک روی «ذخیره تغییرات»، تنظیمات ثبت می‌شود. این فایل LDIF تنها در اولین راه‌اندازی اجرا می‌شود؛ اگر سرور از قبل داده داشته باشد، bootstrap نادیده گرفته می‌شود.


گام ششم: دیسک

برای ماندگاری داده‌های LDAP پس از هر ری‌استارت، در مرحله افزودن دیسک دو پارتیشن تعریف می‌شود:

Partition NameMount Path
ldap-data/var/lib/ldap
ldap-config/etc/ldap/slapd.d

پارتیشن ldap-data اطلاعات کاربران و گروه‌ها را نگه می‌دارد و حذف آن به معنای از دست رفتن تمام داده‌های LDAP است. پارتیشن ldap-config پیکربندی slapd را ذخیره می‌کند؛ بدون آن، پیکربندی در هر راه‌اندازی مجدد از bootstrap بازسازی می‌شود.

پس از ساخت اپ، صفحه اپ در دارکوب نمایش داده می‌شود و وضعیت اجرا، لاگ‌ها و تنظیمات از همان‌جا در دسترس هستند.


تست عملکرد

دستورات زیر پس از فعال‌سازی آدرس خارجی در تب پورت‌ها، از ماشین محلی قابل اجرا هستند. به‌جای <svc-external-address>، آدرس و پورت خارجی سرویس جایگزین می‌شود.

بررسی کل دایرکتوری

ldapsearch -x -H ldap://<svc-external-address> \
-D "cn=admin,dc=example,dc=org" \
-w "<LDAP_ADMIN_PASSWORD>" \
-b "dc=example,dc=org" "(objectClass=*)"

لیست کاربران

ldapsearch -x -H ldap://<svc-external-address> \
-D "cn=admin,dc=example,dc=org" \
-w "<LDAP_ADMIN_PASSWORD>" \
-b "ou=people,dc=example,dc=org" \
"(objectClass=inetOrgPerson)" uid cn mail

تست احراز هویت یک کاربر

ldapwhoami -x -H ldap://<svc-external-address> \
-D "uid=alice,ou=people,dc=example,dc=org" \
-w "alice123"

خروجی موفق: dn:uid=alice,ou=people,dc=example,dc=org

لیست گروه‌ها و اعضا

ldapsearch -x -H ldap://<svc-external-address> \
-D "cn=admin,dc=example,dc=org" \
-w "<LDAP_ADMIN_PASSWORD>" \
-b "ou=groups,dc=example,dc=org" \
"(objectClass=posixGroup)" cn memberUid

تنظیمات پیشرفته‌تر


قدم بعدی

پس از راه‌اندازی سرور LDAP، می‌توان سرویس‌های دیگر را به آن متصل کرد:

راهنمایی‌های مرتبط

این راهنمایی کاربردی بود؟

با ثبت بازخوردتان در بهبود کیفیت مستندات مشارکت داشته باشید.