ساخت اپ دارکوبی LDAP
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 | غیرفعالسازی TLS | false |
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 Name | Mount 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، میتوان سرویسهای دیگر را به آن متصل کرد:
این راهنمایی کاربردی بود؟
با ثبت بازخوردتان در بهبود کیفیت مستندات مشارکت داشته باشید.