در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش لینوکس : مدیریت سیستم : قسمت 12 : OpenLDAP

سلام و وقت بخیر. در این جلسه به یکی از مباحث مهم در شبکه یعنی ldap میپردازیم. اول از همه باید بفهمیم که چرا به ldap نیاز داریم و اصلا ldap چیست؟؟ ابتدا مقداری مقدمه میگم و بعدش میریم سراغ یک سناریوی عملی، نمیدونم حالا میشه تو یه قسمت جمعش کرد یا نه چیزی رو که میخوام بگم.

مفهوم Directory Service به چه معناست ؟؟

طبق تعریف directory service یک بانک اطلاعاتی است که قدرت آن در جستجو و خواندن اطلاعات با سرعت بالاست. نه اینکه در نوشتن ضعیف باشه، ولی در بعضی شرایط ما نیاز داریم که اطلاعاتی را با سرعت بالا از بانک اطلاعاتی بخوانیم. در چنین بانک های اطلاعاتی یک رکورد یا یک entry یک بار نوشته میشود ولی قرار است هزاران هزار بار خوانده شود، پس باید سرعت خواندن اطلاعات بالا یاشد. ساده ترین directory service یک دفترچه تلفن است. وقتی مثلا نام ali را ذخیره میکنیم، میرویم در قسمت حرف a نام او را ذخیره میکنیم. بعدا هم وقتی دنبال او بگردیم، میرویم فقط قسمت a را جستجو میکنیم، نه کل دفترچه. در اینجا ali یک object یا entry است. این object میتواند attribute هم داشته باشد مثل ایمیل و آدرس و ... . پس Directory Service یک سیستم درختی است. در حقیقت Directory Service یک سیستم جستجو گر است که میتوان نتیجه یک جستجو را trace کرد که از کجا آمده. یه شکل زیر دقت کنید.

آموزش لینوکس : مدیریت سیستم : قسمت 12 : OpenLDAP

فرض کنید یک پایگاه داده داریم که شامل تمام کمپانی های دنیا است. دنیال یک شخص خاص در این پایگاه داده میگردیم. بصورت درختی به جستجو میپردازیم. اول میپرسی که در کدام کشور است ؟ مثلا آمریکا، خوب بقیه کشور ها رو میزاریم کنار. در کدام ایالت است؟ کالیفورنیا، نام کمپانی او چیست؟ مثلا acme ، در کدام بخش کار میکند ؟ فروش، نامش چیست ؟ barbara jenson . این یک جستجوی درختی بود. در چنین سیستمی فقط قسمتی از پایگاه داده که لازم است رو جستجو میکنیم نه همشو. در ضمن سرعت جستجو هم باید بالا باشد. این یک سیستم میتنی بر Directory Service است. حال برای اینکه بتوان اطلاعات را در Directory Service ذخیره کرد و به این صورت که گفتیم قابل جستجو باشند، نیاز به یک استاندارد خاص دخیره سازی اطلاعات است. این استاندارد x500 نام دارد. به شکل نگاه کنید ( نخندید!!! با paint کشیدم !!! )

آموزش لینوکس : مدیریت سیستم : قسمت 12 : OpenLDAP

اطلاعات با استاندارد x500 بصورت زیر درختی و زیر شاخه ای ذخیره میشود. حال برای دسترسی به این اطلاعات باید از یه پروتکلی استفاده کنیم. این پروتکل در قدیم dap نام داشت که نسخه بهبود یافته آن شد ldap. پروتکل dap سنگین بود و منابع زیادی مصرف میکرد ولی ldap که از اسمش هم مشخصه Lightweight Directory Access Protocol همون dap سبک شده است. پروتکل ldap محصول IBM و Microsoft است. به سروری که اطلاعات رو با استاندارد x500 ذخیره میکنه میگیم ldap server . پس ldap یک پروتکل دسترسی است. خود ldap server به تنهایی پایگاه داده ندارد. در آن یک پایگاه داده میسازیم. اگر ldap server بخواهیم داشته باشیم، در ویندوز، Active Directory و در لینوکس هم OpenLDAP نصب میکنیم. تمام این ها از استاندارد x500 استفاده میکنند. ماکروسافت بانک اطلاعاتی خودشو داره توی AD ولی نام پایگاه داده لینوکس BDB است. استفاده از ldap server باید توجیه پذیر باشد. مثلا بانک ها از چنین سرویسی استفاده نمیکنند و به جای ldap server از oracle استفاده میکنند. البته ممکنه چیزای دیگه ای مثل آرشیوشون یا اطلاعات سازمانی رو روی ldap server نگه دارن ولی اطلاعات مالی و تراکنش مالی که هر روز انجام میشه رو نه ( چرا ؟؟؟ اینو دیگه خودم نمیگم، شما بگید !!! )

پس کلا اطلاعاتی رو روی ldap server میبریم که قراره یک بار نوشته بشه ولی هزاران بار توسط کاربران یا برنامه ها خونده بشه و استفاده بشه. کلا سرعت read بالا میخوایم نه write خیلی بالا.

بسیار خوب. فک میکنم واسه مقدمه کافیه چون بحث خیلی گستردس نمیشه جمعش کرد. بریم سراغ نصب ldap server روی 5.8 centos

فقط یادتون باشه object هایی که درست میکنیم لینوکسی نیستن، ینی اگه یه کاربر ساختیم نمیتونه تو سیستم log in کنه. اون بحثش یه چیز دیگس. اون میره توی بحثای مربوط به samba.

Open LDAP

در ترمینال خود دستور زیر را برای نصب package های لازم وارد کنید.

[root@localhost ~]# yum install openldap openldap-clients openldap-servers

بعد از اینکه نصب شد میتونم چک کنم

[root@localhost ~]# rpm -qa | grep openldap
openldap-clients-2.3.43-29.el5_11
openldap-2.3.43-29.el5_11
openldap-servers-2.3.43-29.el5_11
[root@localhost ~]# 

دیدید که 3 تا package نیاز دارم. استاندارد x500 با نصب openldap server نصب شد. openldap client که ابزارهای وصل شذن به این پایگاه داده و مدیریتشه. openldap هم که لازمه جفتشه.

حالا این openldap server یک فایل کانفیگ داره. بر خلاف انتظار، این فایلی که پایین نوشتم نیست !!! این کامفیگ فایل کاربره نه سرورو تنظیمات کاربر توی این وارد میشه

/etc/openldap/ldap.conf

تنظیمات مربوط به سرور توی slapd.conf قرار داره.

[root@localhost ~]# cd /etc/openldap/
[root@localhost openldap]# ls
cacerts  DB_CONFIG.example  ldap.conf  schema  slapd.conf
[root@localhost openldap]# 

فایل slapd.conf رو با یه ادیتور باز کنید. توی خط 86 و 87 و 93 اطلاعات رو مطابق شکل زیر تغییر بدبد. این شکلی بشه.

آموزش لینوکس : مدیریت سیستم : قسمت 12 : OpenLDAP

حالا اینا چی هست ؟؟ اون فایل هایی که بالای سند include شدن schema هستن برای ldap server ... این schema ها ساختاری برای ایجاد همون پایگاه داده با استامدارد x500 هستن. اینا schema های پایه هستن. مثلا اگه میخوام samba رو هم با ldap ی که دارم integrate کنم ، بعد از اینکه samba رو نصب کردم، برم فایل های schema ی samba رو پیدا کنم، برم توی پوشه schema های ldap کپیش کنم و بعدش بیام توی این فایل include کنمش. هر برنامه ای که بخواد با ldap سرور integrate بشه باید object های برنامه واسه ldap تعریف شده باشه، object ها هم توی schema تعریف میشه. توی عکسی که از فایل slapd گذاشتم میبینید که نوشته پایگاه داده BDB باشه، suffix میگه این قراره کانفیگ فایل چه دامینی باشه؟ حالا مثلا سازمانمون tosinso.com باشه. این فرمت رو باید رعایت کنید. dc یعنی domain component . خط بعد میگه حالا کاربر ارشد این ldap server کیه ؟ کاربر ارشد اینجا manager نام داره. باز اون فرمت رو رعایت کنید. مدیر توی کدوم دامین قرار داره؟ cn یعنی common name . بعدشم دامین مدیر ارشد رو مشخص کردیم. خط بعدش رمز کاربر ارشد رو میخواد. میتونیم رمز رو بصورت clear text اینجا بنویسیم، میتونیم هش شده رمز رو خط بعد بنویسیم. فایل رو ذخیره کنید و سرویس رو روشن کنید. بعدش پورت هایی که listen میشن رو چک کنید. ldap روی پورت 389 در حالت پیش فرض کار میکنه.

[root@localhost openldap]# /etc/init.d/ldap start
Starting slapd:                                            [  OK  ]
[root@localhost openldap]# netstat -antp | grep 389
tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN      8252/slapd          
tcp        0      0 :::389                      :::*                        LISTEN      8252/slapd          
[root@localhost openldap]# 

سرویس ldap راه افتاد ولی هنوز بانک اطلاعاتیمون خالیه. باید توش اطلاعات وارد کنیم. با دستور ldapadd ما میتونیم object اضافه کنیم. این object میتونه سازمان باشه، میتونه بخش سازمانی باشه، میتونه کارمند باشه. دستور زیر رو وارد کنید تا همه پایگاه داده رو نشون بده.

[root@localhost openldap]# ldapsearch -x -b "dc=itpro,dc=com" "(objectclass=*)"
# extended LDIF
#
# LDAPv3
# base <dc=itpro,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1
[root@localhost openldap]# 

نوشتن objectclass برابر * یعنی همه رو نشون بده. محدوده جستجو رو گذاشتم از کل دامین ، با سویچ b- و دادن نام دامین. x-هم یعنی از سیستم simple authentication استفاده کن. حالا این چیزی برنگردوند چون پایگاه داده خالیه. حالا ما میخوایم ریشه سازمان رو تعریف کنیم، دپارتمان ها رو اضافه کنیم، بعدش کارمند ها رو اضافه کنیم. اطلاعاتی که میخوام وارد کنم رو توی یک فایل میریزم که باید با فرمت ldif نوشته شده باشن. ldap data interchange format . دستور ldapadd خیلی سویچ داره. یه کوچولوشو میگیم اینجا. W- یعنی تقاضای رمز کن. با f- هم فایل ldif رو نشونش میدم. x- هم یعنی simple authentication بکن. D- یعنی با چه یوزری از کدوم دامین میخوای وارد بشی. یک فایل به اسم build-root-ou.ldif درست کنید. اطلاعات زیر رو واردش کنید.

dn: dc=itpro,dc=com
objectclass: dcObject
objectclass: organization
o: itpro
dc: itpro

یه dn درست کردم به همراه صفاتش . dn ریشه سازمان رو تو دل خودش داره. dn یعنی distinguished name . ریشه سازمان رو ساختم. هر object که اضافه میکینم باید dn یکتا داشته باشه. خط پایین dc:itpro یک صفته. خط آخر هم o یک صفنه یعنی organization. برای هر object حداقل یک objectclass باشد تعریف بشه. معمولا برای تعریف سازمان، 2 تا objectclass که نوشتم رو استفاده میکنن. اینا صفات رو تعریف میکنن. یعنی من اگه خواستم صفات تعریف کنم واسه سازمانم، از صفات تعریف شد توی objectclass میتونم استفاده کنم نه هر صفنی.

حالا این فایل رو باید به پایگاه داده اضافه کنم.

[root@localhost openldap]# ldapadd -D "cn=Manager,dc=itpro,dc=com"  -W -x -f build_root_ou.ldif

اگه همه چی رو درست وارد کرده باشید، entry به درستی در پتیگاه داده وارد میشه.

برای تست کردن اینکه فایل slap.d رو درست کانفیگ کردید یا نه دستور زیر رو بزنید

[root@localhost openldap]# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts 
#

#
dn:
namingContexts: dc=itpro,dc=com

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
[root@localhost openldap]# 

حالا اگه دوباره از پایگاه داده query بگیریم

[root@localhost openldap]# ldapsearch -x -b "dc=itpro,dc=com" "(objectclass=*)"
# extended LDIF
#
# LDAPv3
# base <dc=itpro,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# itpro.com
dn: dc=itpro,dc=com
objectClass: dcObject
objectClass: organization
o: itpro
dc: itpro

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
[root@localhost openldap]# 

حالا میخوام مدیر سازمان رو اضافه کنم. یک فایل به اسم add-manager.ldif درست میکنم

dn: cn=Manager,dc=itpro,dc=com
objectclass: organizationalRole
cn: Manager

اینطوری هم اضافش میکنم به پایگاه داده

[root@localhost openldap]# ldapadd -D "cn=Manager,dc=itpro,dc=com" -h localhost -W -x -f build_manager.ldif
Enter LDAP Password: 
adding new entry "cn=Manager,dc=itpro,dc=com"

[root@localhost openldap]#

حالا اگه دوباره از پایگاه داده query بگیرم، مدیر اضافه شده

[root@localhost openldap]# ldapsearch -x -b "dc=itpro,dc=com" "(objectclass=*)"# extended LDIF
#
# LDAPv3
# base <dc=itpro,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# itpro.com
dn: dc=itpro,dc=com
objectClass: dcObject
objectClass: organization
o: itpro
dc: itpro

# Manager, itpro.com
dn: cn=Manager,dc=itpro,dc=com
objectClass: organizationalRole
cn: Manager

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2
[root@localhost openldap]# 

حالا که سازمان درست شد، میخوام بخش های مختلف سازمان رو اضافه کنم. مثلا سازمان 3 تا دپارتمان داره.

dn: ou=linux,dc=itpro,dc=com
ou: linux
objectclass: organizationalunit

dn: ou=software,dc=itpro,dc=com
ou: software
objectclass: organizationalunit

dn: ou=hardware,dc=itpro,dc=com
ou: hardware
objectclass: organizationalunit

اگه space نذارید بین خط ها کار نمیکنه، آخر خط ها هم space بزنید بازم کار نمیکنه !!! کلا ldap خیلی گیره سر این چیزا. میبینید سر یه space توی کانفیگ فایل، کلا سرور آپ نمیشه !!!

حالا دپارتمان ها رو اضافه میکنم

[root@localhost openldap]# ldapadd -D "cn=Manager,dc=itpro,dc=com" -h localhost -W -x -f build_dep.ldif
Enter LDAP Password: 
adding new entry "ou=linux,dc=itpro,dc=com"

adding new entry "ou=software,dc=itpro,dc=com"

adding new entry "ou=hardware,dc=itpro,dc=com"

[root@localhost openldap]#

پایگاه دادم اینجوری شد

[root@localhost openldap]# ldapsearch -x -b "dc=itpro,dc=com" "(objectclass=*)"
# extended LDIF
#
# LDAPv3
# base <dc=itpro,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# itpro.com
dn: dc=itpro,dc=com
objectClass: dcObject
objectClass: organization
o: itpro
dc: itpro

# Manager, itpro.com
dn: cn=Manager,dc=itpro,dc=com
objectClass: organizationalRole
cn: Manager

# linux, itpro.com
dn: ou=linux,dc=itpro,dc=com
ou: linux
objectClass: organizationalUnit

# software, itpro.com
dn: ou=software,dc=itpro,dc=com
ou: software
objectClass: organizationalUnit

# hardware, itpro.com
dn: ou=hardware,dc=itpro,dc=com
ou: hardware
objectClass: organizationalUnit

# search result
search: 2
result: 0 Success

# numResponses: 6
# numEntries: 5
[root@localhost openldap]# 

حالا میخوام یک کارمند اضافه کنم. یک فایل جدید با ldif درست میکنم.

dn: cn=Mohammad Nasiri,ou=software,dc=itpro,dc=com
cn: Mohammad Nasiri
sn: UNITY
mail: unity@itpro.com
departmentNumber: software
telephoneNumber: 203-543-8958
objectclass: inetOrgPerson

حالا اضافه میکنیم به پایگاه داده:

[root@localhost openldap]# ldapadd -D "cn=Manager,dc=itpro,dc=com" -h localhost -W -x -f build_worker.ldif
Enter LDAP Password: 
adding new entry "cn=Mohammad Nasiri,ou=software,dc=itpro,dc=com"

[root@localhost openldap]# 

محمد نصیری اضافه شد !!! :))) این یه تیکه از خروجی دستور ldapsearch هستش. دقت کنید که هر object یک cn منحصر به فرد داره.

# Mohammad Nasiri, software, itpro.com
dn: cn=Mohammad Nasiri,ou=software,dc=itpro,dc=com
cn: Mohammad Nasiri
sn: UNITY
mail: unity@itpro.com
departmentNumber: software
telephoneNumber: 203-543-8958
objectClass: inetOrgPerson

دقت کنید که برای یک شخص در سازمان و یک بخش از سازمان از objectclass های متفاوتی استفاده کردم. پس هر برنامه ای نصب کردید یا خواستیذ کلا چیزی به پایگاه داده اضافه کنید باید بدونید objectclass اون چیه.

حالا قراره یک نفر رو از سازمان خارج کنیم!!!

[root@localhost openldap]# ldapdelete -D "cn=Manager,dc=itpro,dc=com" -W -x -v "cn=Mohammad Nasiri,ou=software,dc=itpro,dc=com"

Enter LDAP Password: 
deleting entry "cn=Mohammad Nasiri,ou=software,dc=itpro,dc=com"

[root@localhost openldap]#

با دستور ldapmodify هم میتونید اطلاعات یک object رو تغییر بدید. دستور ldapsearch رو هم میشه محدودش کرد که کجا رو جستجو کنه. از regex و wildcard و این جور چیزا میشه توش استفاده کرد. به عهده خودتون اینا. بحث ldap خیلی گستردس، اینجا فقط در حد اینکه یه ذهنیتی ایجاد بشه صحبت کردیم. اگر بخوایم ldap server رو با Active Directory و یا خود کاربران لینوکسی ترکیب کنیم و یا از سیستم های احراز هویت و این جور چیزا استفاده کنیم، وارد یکی از حوزه های بزرگ لینوکس به نام mix environment میشیم که موضوعش درمورد integrate کردن سیستم های لینوکسی و ماکروسافته.

خسته نباشید. این بخش تمام شد. تا بخش بعدی.

پایان قسمت چهارم ( آخر) از بخش سوم

نویسنده : سید محمد باقر موسوی

منبع : جزیره لینوکس و سیستم های متن باز وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است

#دوره_آموزشی_linux_فارسی #منظور_از_directory_service_چیست #نوشتن_shell_script_در_لینوکس #آموزش_لینوکس_فارسی #آموزش_linux_مقدماتی #آموزش_دستورات_مقدماتی_لینوکس #دوره_آموزشی_shell_scripting_در_لینوکس #نوشتن_یک_shell_script_ساده #راه_اندازی_openldap
عنوان
1 آموزش لینوکس : مدیریت سیستم : قسمت 1 : Shell سفارشی : متغیرها رایگان
2 آموزش لینوکس : مدیریت سیستم قسمت 2 : Shell سفارشی : تنظیمات Shell رایگان
3 آموزش لینوکس : مدیریت سیستم : قسمت 3 : Shell سفارشی : Aliases رایگان
4 آموزش لینوکس : مدیریت سیستم : قسمت 4: Shell سفارشی: Login Scripts رایگان
5 آموزش لینوکس : مدیریت سیستم : قسمت 5 : ایجاد اسکریپت رایگان
6 آموزش لینوکس : مدیریت سیستم : قسمت 5 : Read User Input رایگان
7 آموزش لینوکس : مدیریت سیستم : قسمت 6 : IF Statement رایگان
8 آموزش لینوکس : مدیریت سیستم : قسمت 7 : Case Statement رایگان
9 آموزش لینوکس : مدیریت سیستم : قسمت 8 : Loops رایگان
10 آموزش لینوکس : مدیریت سیستم : قسمت 9 : Managing Users رایگان
11 آموزش لینوکس : مدیریت سیستم : قسمت 10 : Managing Groups رایگان
12 آموزش لینوکس : مدیریت سیستم : قسمت 11 : ارتباط با اکتیودایرکتوری رایگان
13 آموزش لینوکس : مدیریت سیستم : قسمت 12 : OpenLDAP رایگان
14 آموزش لینوکس : مدیریت سیستم : قسمت 13 : Cron AnaCron و Batch رایگان
15 آموزش لینوکس : مدیریت سیستم : قسمت 14 : آشنایی با IPTables رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....