SLAPO-ACCESSLOG(5) File Formats Manual SLAPO-ACCESSLOG(5)

slapo-accesslog - لایه روکش ثبت وقایع دسترسی (Access Logging) برای slapd

/etc/openldap/slapd.conf

لایه روکش (overlay) ثبت وقایع دسترسی (Access Logging) می‌تواند برای ثبت تمامی دسترسی‌ها به یک پایگاه‌داده پشتیبان معین در پایگاه‌داده‌ای دیگر مورد استفاده قرار گیرد. این کار امکان بازبینی و بررسی تمام فعالیت‌های انجام‌شده روی یک پایگاه‌داده را با استفاده از پرس‌وجوهای دلخواه LDAP به جای ثبت در فایل‌های متنی ساده محلی فراهم می‌سازد. گزینه‌های پیکربندی مختلفی برای انتخاب زیرمجموعه‌ای از انواع عملیات‌ها جهت ثبت وقایع، و همچنین پاکسازی خودکار رکوردهای قدیمی گزارش‌ها از پایگاه‌داده لاگ وجود دارد. رکوردهای وقایع همراه با طرحواره بازرسی (audit schema ‏- شرح در ادامه) ذخیره می‌شوند تا خوانایی آن‌ها چه در قالب نمایش متنی LDIF و چه به صورت ساختار خام تضمین شود.

این گزینه‌های slapd.conf برای لایه روکش Access Logging اعمال می‌شوند. آن‌ها باید بعد از دستورالعمل overlay قرار گیرند.

پسوند (suffix) پایگاه‌داده‌ای را مشخص می‌کند که برای ذخیره رکوردهای گزارش وقایع به کار می‌رود. پایگاه‌داده مشخص‌شده باید در بخش دیگری از پیکربندی تعریف شده باشد و از بازگرداندن مرتب نتایج پشتیبانی کند، مانند slapd-mdb(5). کنترل‌های دسترسی روی پایگاه‌داده لاگ باید از دسترسی عمومی جلوگیری کنند. مدخل پسوند پایگاه‌داده گزارش‌ها به صورت خودکار توسط این روکش ایجاد خواهد شد. مدخل‌های لاگ به صورت فرزندان مستقیم مدخل پسوند ایجاد می‌شوند.
مشخص می‌کند چه نوع عملیاتی باید ثبت شوند. انواع عملیات معتبر عبارتند از: abandon، add، bind، compare، delete، extended، modify، modrdn، search، و unbind. نام‌های مستعار (alias) برای مجموعه‌های متداول از عملیات نیز در دسترس هستند:
add, delete, modify, modrdn
compare, search
abandon, bind, unbind
همه عملیات‌ها
مجموعه‌ای از عملیات را مشخص می‌کند که تنها در صورت وقوع در زیر یک زیردرخت معین از پایگاه‌داده ثبت خواهند شد. انواع عملیات همان مواردی هستند که در بالا برای تنظیم logops ذکر شد، و با کاراکتر '|' از یکدیگر جدا می‌شوند.
فیلتری را برای تطبیق با مدخل‌های حذف‌شده (Deleted) و تغییریافته (Modified) مشخص می‌کند. اگر مدخل با این فیلتر مطابقت داشته باشد، محتوای قدیمی مدخل به همراه درخواست فعلی ثبت خواهد شد.
فهرستی از مشخصه‌ها (attributes) را تعیین می‌کند که محتوای قدیمی آن‌ها همیشه در درخواست‌های Modify و ModRDN که با هر یک از فیلترهای پیکربندی‌شده در logold مطابقت داشته باشند، ثبت می‌شود. معمولاً فقط محتوای مشخصه‌هایی که واقعاً تغییر یافته‌اند ثبت می‌شود؛ به صورت پیش‌فرض هیچ مشخصه قدیمی برای درخواست‌های ModRDN ثبت نمی‌شود.
حداکثر عمر رکوردهای لاگ برای نگهداری در پایگاه‌داده و دوره تناوب پیمایش پایگاه‌داده به منظور یافتن مدخل‌های قدیمی را تعیین می‌کند. هر دو پارامتر age و interval به صورت یک بازه زمانی بر حسب روز، ساعت، دقیقه و ثانیه مشخص می‌شوند. فرمت زمان به شکل [ddd+]hh:mm[:ss] است، یعنی مؤلفه‌های روز و ثانیه اختیاری هستند اما ساعت و دقیقه الزامی می‌باشند. به جز روزها که می‌توانند تا ۵ رقم باشند، هر فیلد عددی باید دقیقاً دو رقم باشد. برای مثال:
مشخص می‌کند که پایگاه‌داده وقایع باید هر روز برای یافتن مدخل‌های قدیمی بررسی شود، و مدخل‌های با عمر بیش از دو روز حذف شوند. هنگام استفاده از پایگاه‌داده‌ای که از نمایه‌سازی ترتیبی بر روی مشخصه‌های generalizedTime پشتیبانی می‌کند، تعیین نمایه مساوی (eq) بر روی مشخصه reqStart کارایی عملیات پاکسازی را به طور چشمگیری افزایش خواهد داد.
در صورت تنظیم بر روی TRUE، رکوردهای لاگ تنها برای درخواست‌های موفق تولید می‌شوند، یعنی درخواست‌هایی که کد نتیجه 0 (LDAP_SUCCESS) برمی‌گردانند. اگر FALSE باشد، رکوردهای لاگ برای تمامی درخواست‌ها، چه موفق و چه ناموفق، تولید خواهند شد. مقدار پیش‌فرض FALSE است.

database mdb
suffix dc=example,dc=com
...
overlay accesslog
logdb cn=log
logops writes reads
logbase search|compare ou=testing,dc=example,dc=com
logold (objectclass=person)
database mdb
suffix cn=log
...
index reqStart eq
access to *
  by dn.base="cn=admin,dc=example,dc=com" read

روکش accesslog از طرحواره «audit» که در اینجا شرح داده شده است استفاده می‌کند. این طرحواره به طور ویژه برای حسابرسی و ثبت وقایع accesslog طراحی شده و برای کاربردهای دیگر در نظر گرفته نشده است. همچنین لازم به ذکر است که طرحواره شرح داده شده در اینجا در حال توسعهاست، و بنابراین بدون اطلاع قبلی ممکن است تغییر کند. این طرحواره به طور خودکار توسط لایه روکش بارگذاری می‌شود.

این طرحواره شامل تعدادی کلاس شیء (object class) و انواع مشخصه‌های مرتبط به شرح زیر است.

مدخل ریشه پایگاه‌داده زیرین accesslog از کلاس auditContainer استفاده می‌کند که تعریف آن بدین صورت است:

( 1.3.6.1.4.1.4203.666.11.5.2.0
NAME 'auditContainer'
DESC 'AuditLog container'
SUP top STRUCTURAL
MAY ( cn $ reqStart $ reqEnd ) )

یک کلاس پایه به نام auditObject وجود دارد که دو کلاس دیگر به نام‌های auditReadObject و auditWriteObject از آن مشتق شده‌اند. کلاس‌های شیء برای هر نوع از عملیات LDAP نیز از این کلاس‌ها مشتق می‌شوند. این سلسله‌مراتب کلاس‌های شیء به گونه‌ای طراحی شده است که امکان جستجوهای انعطاف‌پذیر و در عین حال کارآمد در گزارش وقایع را بر اساس کلاس یک عملیات خاص یا بر اساس دسته‌بندی‌های کلی‌تر فراهم آورد. تعریف کلاس auditObject به صورت زیر است:

( 1.3.6.1.4.1.4203.666.11.5.2.1
NAME 'auditObject'
DESC 'OpenLDAP request auditing'
SUP top STRUCTURAL
MUST ( reqStart $ reqType $ reqSession )
MAY ( reqDN $ reqAuthzID $ reqControls $ reqRespControls $
reqEnd $ reqResult $ reqMessage $ reqReferral $ reqEntryUUID ) )

توجه داشته باشید که تمامی OIDهای استفاده‌شده در طرحواره ثبت وقایع، در حال حاضر ذیل شاخه آزمایشی (Experimental) مربوط به OpenLDAP قرار دارند. انتظار می‌رود در آینده به یک شاخه استاندارد منتقل شوند.

مروری بر مشخصه‌ها در ادامه آمده است: مشخصه‌های reqStart و reqEnd به ترتیب زمان شروع و پایان عملیات را ارائه می‌دهند. آن‌ها از نحو generalizedTime استفاده می‌کنند. همچنین مشخصه reqStart به عنوان RDN برای هر مدخل لاگ استفاده می‌شود.

مشخصه reqType یک رشته ساده حاوی نوع عملیات در حال ثبت است، مانند add، delete، search و غیره. برای عملیات توسعه‌یافته (extended)، این نوع همچنین OID مربوط به عملیات توسعه‌یافته را نیز در بر می‌گیرد، مانند extended(1.1.1.1)

مشخصه reqSession یک شناسه وابسته به پیاده‌سازی است که برای تمامی عملیات مرتبط با یک نشست (session) یکسان LDAP مشترک است. در حال حاضر این مقدار شناسه اتصال داخلی slapd است که به صورت عدد ده‌دهی ذخیره می‌شود.

مشخصه reqDN نام متمایز (distinguishedName) هدف عملیات است. برای مثال، برای درخواست Bind، این مقدار DN مربوط به Bind است. برای یک درخواست Add، این مقدار DN مدخلی است که اضافه می‌شود. برای درخواست Search، این مقدار DN پایه جستجو است.

مشخصه reqAuthzID نام متمایز کاربری است که عملیات را انجام داده است. معمولاً این نام همان نامی است که در ابتدای نشست توسط یک درخواست Bind (در صورت وجود) تعیین شده است، اما ممکن است در شرایط مختلف تغییر یابد.

مشخصه‌های reqControls و reqRespControls به ترتیب کنترل‌های ارسال‌شده توسط کلاینت در درخواست و کنترل‌های بازگردانده‌شده توسط سرور در پاسخ را حمل می‌کنند. مقادیر این مشخصه‌ها صرفاً رشته‌های هشت‌بیتی خام (octet strings) تفسیرنشده هستند.

مشخصه reqResult کد عددی نتیجه LDAP عملیات است که موفقیت یا یک کد خطای خاص LDAP را نشان می‌دهد. یک کد خطا ممکن است با یک پیام خطای متنی همراه باشد که در مشخصه reqMessage ثبت خواهد شد.

مشخصه reqReferral حاوی ارجاع‌هایی (referrals) است که همراه با نتیجه درخواست بازگردانده شده‌اند.

مشخصه reqEntryUUID مشخصه entryUUID مدخلی که عملیات روی آن انجام شده را ذخیره می‌کند؛ برای یک درخواست Add، این مقدار entryUUID مدخل تازه ایجادشده است.

کلاس‌های مختص هر عملیات با مشخصه‌های اضافی برای حمل تمامی پارامترهای مرتبط با آن عملیات تعریف شده‌اند:

( 1.3.6.1.4.1.4203.666.11.5.2.4
NAME 'auditAbandon'
DESC 'Abandon operation'
SUP auditObject STRUCTURAL
MUST reqId )

برای عملیات Abandon مشخصه reqId شامل شناسه پیام (message ID) درخواستی است که لغو (abandon) شده است.

( 1.3.6.1.4.1.4203.666.11.5.2.5
NAME 'auditAdd'
DESC 'Add operation'
SUP auditWriteObject STRUCTURAL
MUST reqMod )

کلاس Add از کلاس auditWriteObject ارث‌بری می‌کند. کلاس‌های Add و Modify بسیار مشابه یکدیگر هستند. مشخصه reqMod تمامی مشخصه‌های مدخل اصلی که در حال اضافه شدن است را حمل می‌کند. (یا در مورد یک عملیات Modify، تمام تغییراتی که در حال اعمال هستند.) مقادیر به صورت زیر قالب‌بندی می‌شوند:

که در آن '+' نشان‌دهنده افزودن (Add) یک مقدار، '-' برای حذف (Delete)، '=' برای جایگزینی (Replace)، و '#' برای افزایش (Increment) است. در یک عملیات Add، تمام مقادیر reqMod دارای نشان‌گر '+' خواهند بود.
( 1.3.6.1.4.1.4203.666.11.5.2.6
NAME 'auditBind'
DESC 'Bind operation'
SUP auditObject STRUCTURAL
MUST ( reqVersion $ reqMethod ) )

کلاس Bind شامل مشخصه reqVersion است که نسخه پروتکل LDAP مشخص‌شده در Bind را در بر می‌گیرد، و همچنین مشخصه reqMethod که حاوی روش Bind استفاده‌شده در اتصال است. این مقدار برابر با رشته SIMPLE برای LDAP Simple Bind یا SASL(<mech>) برای اتصالات SASL Bind خواهد بود. توجه داشته باشید که مگر در صورت پیکربندی به عنوان یک روکش سراسری (global overlay)، تنها Simple Bindهایی که از DNهای موجود در پایگاه‌داده فعلی استفاده می‌کنند ثبت خواهند شد.

( 1.3.6.1.4.1.4203.666.11.5.2.7
NAME 'auditCompare'
DESC 'Compare operation'
SUP auditObject STRUCTURAL
MUST reqAssertion )

برای عملیات Compare مشخصه reqAssertion حاوی گزاره مقدار مشخصه (Attribute Value Assertion) استفاده‌شده در درخواست مقایسه است.

( 1.3.6.1.4.1.4203.666.11.5.2.8
NAME 'auditDelete'
DESC 'Delete operation'
SUP auditWriteObject STRUCTURAL
MAY reqOld )

عملیات Delete به پارامترهای بیشتری نیاز ندارد. با این حال، مشخصه reqOld می‌تواند به صورت اختیاری برای ثبت محتویات مدخل پیش از حذف آن مورد استفاده قرار گیرد. مقادیر به صورت زیر قالب‌بندی می‌شوند:

مشخصه reqOld تنها در صورتی پر می‌شود که مدخل در حال حذف با فیلتر پیکربندی‌شده در logold تطابق داشته باشد.
( 1.3.6.1.4.1.4203.666.11.5.2.9
NAME 'auditModify'
DESC 'Modify operation'
SUP auditWriteObject STRUCTURAL
MAY ( reqOld $ reqMod ) )

عملیات Modify شامل توصیفی از تغییرات در مشخصه reqMod است که در بالا در عملیات Add توضیح داده شد. این عملیات می‌تواند به طور اختیاری حاوی محتویات پیشین هر یک از مشخصه‌های تغییریافته در مشخصه reqOld باشد، با همان قالبی که در بالا برای عملیات Delete بیان شد. مشخصه reqOld تنها در صورتی پر می‌شود که مدخل در حال تغییر با فیلتر پیکربندی‌شده در logold تطابق داشته باشد.

( 1.3.6.1.4.1.4203.666.11.5.2.10
NAME 'auditModRDN'
DESC 'ModRDN operation'
SUP auditWriteObject STRUCTURAL
MUST ( reqNewRDN $ reqDeleteOldRDN )
MAY ( reqNewSuperior $ reqMod $ reqOld ) )

کلاس ModRDN از مشخصه reqNewRDN برای حمل RDN جدید درخواست استفاده می‌کند. مشخصه reqDeleteOldRDN یک مقدار بولی است که در صورت حذف شدن RDN قدیمی از مدخل برابر با TRUE و در صورت حفظ شدن RDN قدیمی برابر با FALSE خواهد بود. مشخصه reqNewSuperior در صورتی که درخواست والد جدیدی را مشخص کرده باشد، DN مدخل والد جدید را در بر دارد. مشخصه reqOld تنها در صورتی پر می‌شود که مدخل در حال تغییر با فیلتر پیکربندی‌شده در logold تطابق داشته باشد و شامل مشخصه‌هایی از فهرست logoldattr باشد.

( 1.3.6.1.4.1.4203.666.11.5.2.11
NAME 'auditSearch'
DESC 'Search operation'
SUP auditReadObject STRUCTURAL
MUST ( reqScope $ reqDerefAliases $ reqAttrsOnly )
MAY ( reqFilter $ reqAttr $ reqEntries $ reqSizeLimit $
reqTimeLimit ) )

برای کلاس Search مشخصه reqScope شامل محدوده (scope) درخواست جستجوی اصلی است که از مقادیر مشخص‌شده برای فرمت LDAP URL استفاده می‌کند، یعنی base، one، sub یا subord. مشخصه reqDerefAliases یکی از مقادیر never، finding، searching یا always است که نحوه ارجاع‌گشایی نام‌های مستعار (aliases) را در طول جستجو مشخص می‌کند. مشخصه reqAttrsOnly یک مقدار بولی است که در صورت درخواست فقط نام‌های مشخصه‌ها برابر با TRUE و در صورت درخواست مشخصه‌ها به همراه مقادیرشان برابر با FALSE خواهد بود. مشخصه reqFilter حاوی فیلتر استفاده‌شده در درخواست جستجو است. مشخصه reqAttr در صورتی که مشخصه‌های خاصی درخواست شده باشند، مشخصه‌های درخواستی را فهرست می‌کند. مشخصه reqEntries تعداد عددی مدخل‌های بازگردانده‌شده توسط این درخواست جستجو است. مشخصه‌های reqSizeLimit و reqTimeLimit محدودیت‌های درخواست‌شده برای عملیات جستجو را نشان می‌دهند.

( 1.3.6.1.4.1.4203.666.11.5.2.12
NAME 'auditExtended'
DESC 'Extended operation'
SUP auditObject STRUCTURAL
MAY reqData )

کلاس Extended یک عملیات گسترش‌یافته LDAP (Extended Operation) را نشان می‌دهد. همان‌طور که در بالا اشاره شد، OID واقعی عملیات در مشخصه reqType از کلاس والد گنجانده شده است. اگر داده اختیاری همراه با درخواست ارسال شده باشد، در مشخصه reqData به صورت یک رشته هشت‌بیتی (octet string) تفسیرنشده ذخیره خواهد شد.

لاگ دسترسی که توسط این لایه روکش پیاده‌سازی شده است ممکن است برای وظایف متنوع دیگری نیز به کار رود؛ به عنوان مثال به عنوان گزارش تغییرات (ChangeLog) برای سازوکار همانندسازی (replication)، و همچنین برای اهداف امنیتی و بازرسی.

/etc/openldap/slapd.conf
فایل پیکربندی پیش‌فرض slapd

slapd.conf(5)، slapd-config(5).

این ماژول در سال ۲۰۰۵ توسط Howard Chu از شرکت Symas Corporation نوشته شده است.

2026/03/09 OpenLDAP 2.6.13