امیرحسین کریم پور
مدیر ارشد توسینسو و متخصص سرویس های مایکروسافت

LDAP چیست؟ آشنایی و معرفی Lightweight Directory Access Protocol

در این مطلب میخواهیم درباره پروتکلی صحبت کنیم که اساس کار Directory Service هایی مثل Active Directory است و میتوان گفت ستون فقرات شبکه دامین اکتیودایرکتوری به شما میرود . نام این پروتکل چیزی نیست جز LDAP یا Lightweight Directory Access Protocol . به زبان ساده LDAP پروتکلی است که به هر کسی این اجازه را میدهد که سازمان ها ، اشخاص و سایر منابع از قبیل فایل ، دستگاه های موجود در شبکه را چه در محیط اینترنت و چه در شبکه داخلی پیدا کند .

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

LDAP یک نسخه سبک ( Lightweight ) از پروتکل Directory Access Protocol یا DAP هست که بخشی از استاندارد X.500 که استانداردی برای Directory Service ها در شبکه است می باشد. LDAP به این خاطر سبک هست که در نسخه اولیه آن قابلیت های امنیتی وجود نداشت. LDAP توسط دانشگاه میشیگان آمریکا ابداع شد و محصولات Netscape و دایرکتوری سرویس Novel NetWare نیز از LDAP پشتیبانی می کند. محبوب ترین Directory Service دنیا یعنی Active Directory که محصول شرکت مایکروسافت می باشد نیز از این پروتکل در انواع محصولات و زیرساختش استفاده می کند. شرکت سیسکو و سایر محصولات شرکت های دیگر نیز از پروتکل LDAP در محصولاتشان استفاده می کند بدین معنی که بسیاری از محصولات این شرکت ها به اصطلاح LDAP-Aware هستند.

در یک شبکه ، یک Directory به شما میگوید که چه چیزی در کجا قرار گرفته است. در شبکه های مبتنی بر TCP//IP که شامل شبکه اینترنت هم می شود ، سرویس DNS یا Domain Name System سرویسی است که میتواند Domain name را به یک آدرس خاص و منحصر بفرد در شبکه که آنرا به نام آدرس IP میشناسیم مرتبط کند. در هر حال شما ممکن است نام دامین را ندانید. از این رو LDAP به شما این امکان را می دهد که اشخاص و یا سایر Object های شبکه را بدون آنکه بدانید در کجای شبکه قرار گرفته اند مکان یابی کنید. ساختار LDAP directory بصورت سلسله مراتبی می باشد ( مثل یک درخت یا Tree ) که این ساختار شامل موارد زیر هست :

  1. Root Directory : یا ریشه یا Source درخت دایرکتوری است.
  2. Countries یا کشور ها : شامل کشور ها می شود که و هر یک از کشور ها نیز به شاخه های مختلفی تقسیم بندی می شود.
  3. Organizations یا سازمان ها : که خود زیرشاخه های خود را میتواند داشته باشد.
  4. Organizational Units یا OU ها ( واحد های سازمانی ) : شامل بخش ها ، دپارتمان ها و ... می شود. که هر کدام نیز میتواند زیر شاخه داشته باشد.
  5. Individuals یا Object ها : شامل کاربران ، گروه ها ، فایل ها ، منابع اشتراکی مثل Printer ها و ... می شود.

LDAP directory بین سرور های زیادی میتواند توزیع شود. هر سرور یک نسخه Replicate شده از کل دایرکتوری را در خود دارد که در وهله های زمانی مشخص بین سرور ها Synchronize می شود. به LDAP Server در اصطلاح فنی Directory System Agent یا DSA نیز گفته می شود. LDAP Server زمانی که یک درخواست از یک کاربر را دریافت می کند مسئولیت پاسخ به درخواست را بر عهده دارد و در صورت نیز میتواند به سایر DSA Server ها این درخواست را ارسال کند.

بهتر است کمی بیشتر در مورد چرایی اینکه LDAP سبک یا Lightweight است صحبت کنیم. برای اینکه این موضوع را باز کنیم ابتدا بایستی به ماهیت LDAP بپردازیم. همانطور که پیشتر نیز گفتیم ریشه و ماهیت اصلی LDAP به دایرکتوری سرویس X.500 گره خورده است. LDAP به عنوان پروتکلی سبک و تحت سیستم های Desktop و نیز دروازه ای برای ورود درخواست های مبتنی بر سرویس دایرکتوری به سرور های X.500 طراحی شده بود. X.500 در واقع مجموعه ای از استاندارد ها است.

X.500 عنوان Heavyweight را کسب کرد زیرا برای کار با این پروتکل کلاینت و سرور باید بوسیله OSI Protocol Stack با همدیگر ارتباط برقرار می کردند . این هفت لایه OSI یک مدل آکادمیکی از طراحی شبکه است هست. LDAP به این خاطر سبک هست که پکت های آن Overhead کمتری روی لایه های TCP//IP و پروتکل هایش دارد. از آنجا که X.500 پروتکل لایه Application است ( در مدل OSI ) در هر لایه از این مدل پکت هایش باید بصورت مرتب Encapsulate و Decapsulate شود تا در نهایت به مقصد برسد.

LDAP بر خلاف X.500 بسیاری از کار هایی که این پروتکل انجام می داد را انجام نمی داد در حالیکه این کار ها در عمل به ندرت مورد استفاده قرار می گرفت. LDAP نسخه 3 شامل 9 عملیات اصلی است که مدلی ساده را برای برنامه نویسان و مدیران شبکه فراهم می کند. ساده بودن پروتکل LDAP به برنامه نویس ها بدین صورت کمک می کند که به جای اینکه درگیر پیچیدگی های این پروتکل در نوشتن برنامه هایشان شوند بتوانند روی عملکرد دقیق برنامه خود و سایر جنبه های برنامه شان متمرکز شوند.

خب شاید برای شما این سئوال پیش بیاید که به جز بحث سبک بودن LDAP چه دلیلی برای استفاده از LDAP وجود دارد و اینکه چرا سال های سال است که داریم از این پروتکل استفاده می کنیم ؟ می توان به این سئوال اینگونه پاسخ داد : شما یک دفترچه تلفن را در نظر بگیرید. شما وقتی کاری را میخواهید انجام دهید که نیاز به Write//Update ( نوشتن ) یا Read//Query ( خواندن ) زیاد دارد شما ممکن است از LDAP استفاده کنید. LDAP ذاتا برای این طراحی شده است که کارایی یا عملکرد را در خواندن ( Read ) مجموعه ای بزرگ از Dataset ها را افزایش دهد و به آن سرعت ببخشد. طبیعتا انجام کار هایی مثل Add//Delete//Update کندتر از انجام Read//Query از یک دیتابیس صورت میگیرد زیرا فرض بر این است که در اغلب موارد شما دیتابیس ( LDAP Database ) را نمیخواهید Update کنید.

فرض کنید که وب سایتی دارید که میلیون ها نفر در آن عضو هستند و هزاران Page در هر ثانیه برای بازدید به وب سرورتان درخواست می شود. بدون LDAP ، هر زمان که کاربر روی یک Page کلیک کند ، حتی برای بازدید یک Static Page شما نیاز خواهید داشت تا با دیتابیس مدام ارتباط برقرار کنید و User ID و Digital signature مربوط به Login session کاربر را Validate کنید. طبیعتا این کار باعث خواهد شد تا هنگام انجام User Validation از طریق دیتابیس Bottleneck داشته باشید. بوسیله LDAP شما میتوانید از انجام User Validation صرف نظر کنید و Performance بسیار خوبی را در زمان پاسخگویی به کاربر تجربه کنید. البته LDAP تنها برای انجام فرآیند User Validation کاربرد ندارد بلکه انجام هر کاری که مشخصات زیر را داشته باشد مورد استفاده خوبی برای LDAP است :

  1. شما یک بخش از اطلاعات را نیاز دارید تا مکان یابی کنید و میتوانید آنرا سریع پیدا کنید.
  2. شما نیازی ندارید که به منطق و روابط بین اطلاعات مختلف بدهید.
  3. شما نیازی به Update یا بروز رسانی کردن ، Add یا اضافه کردن ، Delete یا حذف کردن اطلاعات بصورت مکرر ندارید.
  4. سایز هر Entry از اطلاعات کوچک است.
  5. شما لازم نیست که همه این اطلاعات کوچک را در یک مکان متمرکز داشته باشید.

قالب اطلاعاتی که در پایگاه داده LDAP ذخیره می شود بر اساس Entry است. Entry مجموعه ای از Attribute ها است که دارای Globally-Unique Distinguished Name یا به اختصار DN می باشند. هر یک از Attribute های Entry ها دارای نوع یا Type هستند و شامل یک یا بیش از یک مقدار یا Value می باشند. از انواع Attribute ها میتوان به CN یا Common Name ( یوزر ، گروه ، پرینتر و ... ) و یا mail ( آدرس ایمیل ) اشاره کرد. سینتکس Value ها به نوع Attribute ها بستگی دارد. برای مثال CN attribute ممکن است مقداری معادل amirhossein karimpour باشد. mail attribute ممکن است مقداری معادل با karimpour@tosinso.com را داشته باشد. jpegPhoto attribute ممکن است یک فرمت باینری قالب JPEG داشته باشد.

هدف اصلی LDAP متمرکز سازی تمامی اطلاعات مربوط به Object های شبکه است. این Object ها همانطور که پیشتر نیز گفتیم شامل کاربران ، گروه ها و ... می باشد. برای مثال میتوانید پسورد های کاربران ، اطلاعات تماس آنها ، Permission های آنها و ... را در یک جا بصورت متمرکز نگهداری کنید. با استفاده از LDAP همچنین میتوانید مجوز های دسترسی خاصی را به گروه های خاصی بدهید ، برای مثال یک گروه خاص فقط بتواند به Shared Folder ها دسترسی داشته باشد. یا اینکه برای مثال میتوانید تمامی اطلاعات تماس کاربران در سازمانتان را که در Outlook است بدست بیاورید. و بسیاری از مزایای دیگر LDAP که در حوصله این مقاله نمیگنجد. امیدوارم مورد توجه شما قرار گرفته باشد.


امیرحسین کریم پور
امیرحسین کریم پور

مدیر ارشد توسینسو و متخصص سرویس های مایکروسافت

امیرحسین کریم پور ، مدیر ارشد توسینسو ، متخصص شبکه ، تخصص در حوزه سیستم عامل های کلاینت و سرور مایکروسافت و سرویس های مربوطه ، سیستم عامل لینوکس و... ، سابقه کار با سازمان ها و شرکت های مختلف در زمینه سرویس های مایکروسافت در قالب پروژه ، مشاوره و آموزش. علاقه مند به حوزه امنیت اطلاعات و تست نفوذ سنجی

نظرات