SLAPO-NSSOV(5) فایلهای پیکربندی SLAPO-NSSOV(5)

slapo-nssov - افزونه روکش سرویسهای NSS برای دیمن slapd

ETCDIR/slapd.conf

افزونه روکش slapo-nssov به دیمن slapd اجازه میدهد تا به عنوان دیمن nss-ldapd عمل کرده و به درخواستهای سوکت Name Service Switch پاسخ دهد.

روکش nssov برای slapd(8) به درخواست‌های NSS و PAM از طریق یک سوکت دامنه یونیکس (Unix Domain socket) محلی سرویس می‌دهد. این روکش از همان پروتکل IPC متعلق به nss-pam-ldapd اثر Arthur de Jong استفاده می‌کند. بخشی از کد منبع nss-ldapd به همراه کد منبع nssov گنجانده شده است تا به روکش اجازه دهد با کدهای واسط کلاینت (client stubs) در nss-pam-ldapd ارتباط برقرار کند.

استفاده از یک پروتکل IPC مجزا برای درخواست‌های NSS و PAM، وابستگی‌ها و تداخل‌های libldap را که تمام راهکارهای فعلی pam_ldap/nss_ldap از آن رنج می‌برند، از میان برمی‌دارد. هم nss-ldapd اصلی و هم این راهکار nssov از این مشکلات کتابخانه‌ای مبرا هستند.

برخلاف nss-pam-ldapd، از آنجا که این روکش در داخل slapd اجرا می‌شود، امکان ذخیره‌سازی حافظه نهان (caching) پیشرفته را بدون هیچ‌یک از نقاط ضعف nscd و سایر راهکارهای کشینگ مرتبط فراهم می‌کند. به عنوان مثال، یک پایگاه‌داده LDAP راه دور می‌تواند با استفاده از back-ldap همراه با کش پروکسی (proxy caching) مورد دسترسی قرار گیرد (ببینید slapd-ldap(5) و slapo-pcache(5) ) تا از مخزن اتصال (connection pooling) دایرکتوری back-ldap و همچنین کشینگ پایدار pcache برای فراهم آوردن کارایی بالا و حدی از پشتیبانی عملکرد در حالت قطع اتصال بهره‌برداری شود. در غیر این صورت، ملاحظات کش را می‌توان به طور کامل با اجرای یک پایگاه‌داده معمولی همراه با syncrepl به منظور حفظ همگام‌سازی با یک پایگاه‌داده LDAP راه دور برطرف کرد.

مزیت عمده دیگر nssov این است که اجازه می‌دهد تمام خط‌مشی‌های امنیتی به صورت مرکزی از طریق LDAP مدیریت شوند، به جای اینکه قوانین شکننده در چندین فایل متنی پراکنده باشند. به این ترتیب، هیچ پیکربندی سمت کلاینتی برای کتابخانه‌های واسط NSS/PAM وجود ندارد. (واسط‌ها با سرور از طریق یک سوکت دامنه یونیکس ارتباط برقرار می‌کنند که مسیر آن به صورت هاردکد در NSLCDPATH تعیین شده است). به عنوان یک مزیت جنبی، این موضوع می‌تواند سردرگمی همیشگی میان فایل ldap.conf اوپن‌ال‌دپ در ETCDIR/ldap.conf و فایل‌های با نام مشابه که معمولاً توسط pam_ldap و nss_ldap استفاده می‌شوند را رفع کند.

احراز هویت کاربر از طریق Bindهای ساده داخلی انجام می‌شود. مجوزدهی کاربر از موتور ACL دیمن slapd بهره می‌برد که قدرت و انعطاف بسیار بیشتری نسبت به بررسی‌های ساده گروه/نام میزبان در کد قدیمی pam_ldap ارائه می‌دهد.

برای استفاده از این کد، به کتابخانه واسط سمت کلاینت از nss-pam-ldapd نیاز خواهید داشت. می‌توانید آن را از آدرس زیر دریافت کنید: http://arthurdejong.org/nss-pam-ldapd شما به دیمن nslcd نیازی نخواهید داشت؛ این روکش جایگزین آن بخش می‌شود. برای غیرفعال کردن ساخت دیمن nslcd در nss-pam-ldapd، گزینه --disable-nslcd را به اسکریپت configure در nss-pam-ldapd اضافه کنید. برای استفاده از این روکش باید از قبل با طرح‌واره‌های (schema) RFC2307 و RFC2307bis آشنا باشید. برای اطلاعات بیشتر در مورد طرح‌واره و اینکه چه ویژگی‌هایی پشتیبانی می‌شوند، فایل README در nss-pam-ldapd را ببینید.

همچنین باید nis.schema را برای پشتیبانی از RFC2307 در پیکربندی slapd خود بگنجانید. اگر مایل به استفاده از RFC2307bis هستید، به طرح‌واره کمی متفاوتی نیاز خواهید داشت. همچنین برای مدیریت مجوزهای PAM به ldapns.schema نیاز دارید.

باید گزینه ldap را در سرویس‌های مناسب در /etc/nsswitch.conf انتخاب کنید تا این ویژگی‌های NSS اعمال شوند. به همین ترتیب، باید pam_ldap را برای سرویس‌های authenticate ،account ،session و password در /etc/pam.conf یا /etc/pam.d فعال کنید تا این ویژگی‌های PAM اعمال شوند.

این دستورالعمل روکش nssov را به بک‌اند فعلی اضافه می‌کند.
این دستورالعمل یک توصیف‌گر جستجوی سرویس (Service Search Descriptor یا SSD) را برای هر سرویس NSS که استفاده خواهد شد پیکربندی می‌کند. مقدار <service> می‌تواند یکی از موارد زیر باشد:
aliases
ethers
group
hosts
netgroup
networks
passwd
protocols
rpc
services
shadow
و <url> باید به فرم زیر باشد: مقدار <basedn> به طور پیش‌فرض به اولین پسوند (suffix) پایگاه‌داده فعلی تنظیم می‌شود. مقدار <scope> به طور پیش‌فرض "subtree" است. مقدار پیش‌فرض <filter> بستگی به این دارد که چه سرویسی استفاده می‌شود.
اگر پایگاه‌داده محلی در واقع یک پروکسی به یک سرور LDAP خارجی باشد، ممکن است نگاشت طرح‌واره لازم باشد. این دستورالعمل اجازه می‌دهد برخی جایگزینی‌های ساده ویژگی‌ها انجام شود. برای نام‌های ویژگی اصلی استفاده‌شده در این کد، فایل nss-ldapd/README را ببینید.
این دستورالعمل تعدادی از رفتارهای PAM را تعیین می‌کند. چندین گزینه می‌توانند همزمان استفاده شوند و سطوح در دسترس عبارتند از:
بررسی ویژگی host در مدخل کاربر برای مجوزدهی
بررسی ویژگی authorizedService در مدخل کاربر برای مجوزدهی
بررسی اینکه کاربر عضو گروه خاصی است برای مجوزدهی
بررسی ویژگی authorizedService در مدخل میزبان برای مجوزدهی
استفاده از نگاشت authz-regexp برای نگاشت uid به LDAP DN
استفاده از SSD سرویس passwd در NSS برای نگاشت uid به LDAP DN

تنظیم گزینه‌های userhost، userservice و usergroup رفتار مجوزدهی اولیه pam_ldap را تکرار می‌کند.

رویکرد توصیه‌شده استفاده از hostservice به جای آن است. در این حالت، مدخل‌های ipHost باید برای تمام میزبان‌های تحت مدیریت ایجاد شوند، و همچنین باید کلاس authorizedServiceObject را داشته باشند تا اجازه استفاده از ویژگی‌های authorizedService داده شود. همچنین SSD میزبان در NSS باید به گونه‌ای پیکربندی شود که مدخل‌های ipHost قابل یافتن باشند. مجوز با انجام یک عملیات Compare در LDAP به منظور جستجوی نام سرویس PAM در ویژگی authorizedService بررسی می‌شود. مجوزهای دسترسی (ACL) دیمن slapd باید طوری تنظیم شوند که امتیاز Compare را به کاربران یا گروه‌های مناسب بر اساس نیاز اعطا یا رد کنند.

اگر گزینه authz2dn تنظیم شده باشد، از نگاشت‌های authz-regexp برای نگاشت نام کاربری PAM به یک LDAP DN استفاده خواهد شد. این DN احراز هویت به صورت زیر خواهد بود:

cn=<service>+uid=<user>,cn=<hostname>,cn=pam,cn=auth

اگر هیچ نگاشتی برای این DN احراز هویت پیدا نشود، این نگاشت نادیده گرفته خواهد شد.

اگر گزینه uid2dn تنظیم شده باشد، از SSD سرویس passwd در NSS برای نگاشت نام کاربری PAM به یک LDAP DN استفاده خواهد شد. SSD بخش passwd باید از قبل برای موفقیت این نگاشت پیکربندی شده باشد.

اگر هیچ‌کدام از نگاشت‌های authz2dn یا uid2dn موفق نشوند، ماژول کد خطای PAM_USER_UNKNOWN را برمی‌گرداند. اگر هر دو گزینه تنظیم شده باشند، ابتدا نگاشت authz امتحان می‌شود؛ اگر موفق شود، نگاشت uid2dn نادیده گرفته خواهد شد.

به طور پیش‌فرض تنها گزینه uid2dn تنظیم شده است.

تعیین یک نام میزبان پیش‌فرض برای بررسی در صورتی که مدخل ipHost برای نام میزبان فعلی یافت نشود. این تنظیم تنها زمانی مرتبط است که گزینه hostservice تنظیم شده باشد.
تعیین DN یک گروه LDAP برای بررسی مجوز. کاربر LDAP باید برای مجاز بودن ورود، عضو این گروه باشد. مقدار پیش‌فرضی وجود ندارد. این تنظیم تنها زمانی مرتبط است که گزینه usergroup تنظیم شده باشد.
تعیین ویژگی مورد استفاده برای بررسی عضویت در گروه. مقدار پیش‌فرضی وجود ندارد. این تنظیم تنها زمانی مرتبط است که گزینه usergroup تنظیم شده باشد.
تعیین حداقل uid مجاز برای ورود. به کاربرانی با uidNumber کمتر از این مقدار، اجازه دسترسی داده نخواهد شد. مقدار پیش‌فرض صفر است که این تنظیم را غیرفعال می‌کند.
تعیین حداکثر uid مجاز برای ورود. به کاربرانی با uidNumber بیشتر از این مقدار، اجازه دسترسی داده نخواهد شد. مقدار پیش‌فرض صفر است که این تنظیم را غیرفعال می‌کند.
تعیین یک ویژگی برای بررسی در مدخل کاربر جهت یافتن نام کاربری قالب (template login name). ویژگی ورود قالب توسط چارچوب PAM در FreeBSD استفاده می‌شود. این را می‌توان نوعی پروکسی در نظر گرفت، که در آن یک کاربر می‌تواند با یک جفت نام کاربری/گذرواژه احراز هویت کند، اما هویت و اعتبارنامه‌های کاربر قالب به او اختصاص داده می‌شود. این تنظیم به طور پیش‌فرض غیرفعال است.
تعیین یک نام کاربری پیش‌فرض در صورتی که هیچ ویژگی قالبی در مدخل کاربر یافت نشود. دستورالعمل nssov-pam-template-ad باید برای اثربخشی این تنظیم پیکربندی شده باشد.
تعیین نام سرویس PAM که نشست‌های آن ثبت خواهند شد. برای سرویس‌های پیکربندی‌شده، ورودها در
غیرفعال کردن سرویس تغییر گذرواژه و برگرداندن پیام مشخص‌شده به کاربران.
تعیین dn مربوط به مدیر گذرواژه (password manager).
تعیین pwd مربوط به مدیر گذرواژه.
ویژگی عملیاتی مدخل کاربر ثبت خواهند شد. مقادیر این ویژگی به فرم زیر هستند:
<generalizedTime> <host> <service> <tty> (<ruser@rhost>)
هنگام خروج، مقدار مربوطه حذف خواهد شد. این قابلیت اجازه می‌دهد یک جستجوی منفرد LDAP برای بررسی اینکه چه کاربرانی در تمام میزبان‌های یک شبکه وارد شده‌اند، استفاده شود. از rootdn پایگاه‌داده برای به‌روزرسانی‌های ویژگی loginStatus استفاده می‌شود، بنابراین یک rootdn باید از قبل پیکربندی شده باشد تا این ویژگی کار کند. به طور پیش‌فرض هیچ سرویسی پیکربندی نشده است.

توابع PAM از سیاست گذرواژه LDAP (LDAP Password Policy) نیز پشتیبانی می‌کنند. اگر روکش سیاست گذرواژه استفاده شده باشد (ببینید slapo-ppolicy(5))، اطلاعات سیاست (مانند انقضای گذرواژه، کیفیت گذرواژه و غیره) ممکن است در نتیجه درخواست‌های احراز هویت، مدیریت حساب و تغییر گذرواژه به کلاینت PAM برگردانده شود.

این روکش همچنین از پیکربندی پویا در cn=config پشتیبانی می‌کند. نمونه‌ای از مدخل پیکربندی به صورت زیر است:

dn: olcOverlay={0}nssov,ocDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcNssOvConfig
olcOverlay: {0}nssov
olcNssSsd: passwd ldap:///ou=users,dc=example,dc=com??one
olcNssMap: passwd uid accountName
olcNssPam: hostservice uid2dn
olcNssPamDefHost: defaulthost
olcNssPamMinUid: 500
olcNssPamMaxUid: 32000
olcNssPamSession: login
olcNssPamSession: sshd

که سرویس passwd را فعال کرده، و از ویژگی accountName برای واکشی چیزی که معمولاً از ویژگی uid بازیابی می‌شود، استفاده می‌کند. این تنظیم همچنین برخی کنترل‌های مجوزدهی PAM را فعال کرده و مشخص می‌کند که سرویس‌های PAM مربوط به login و sshd باید ورودهایشان ثبت شود.

فایل پیکربندی پیش‌فرض slapd

slapd.conf(5), slapd-config(5), slapd-ldap(5), slapo-pcache(5), slapo-ppolicy(5), slapd(8).

Howard Chu، با الهام از nss-ldapd توسط Arthur de Jong و pam_ldap توسط Luke Howard بهبودها توسط Ted C. Cheng، Symas Corp.

مه ۲۰۲۵ OpenLDAP