<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF142%3AOpenLDAP</id>
		<title>LXF142:OpenLDAP - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF142%3AOpenLDAP"/>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF142:OpenLDAP&amp;action=history"/>
		<updated>2026-05-13T23:42:22Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.11.1</generator>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF142:OpenLDAP&amp;diff=14079&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF142:OpenLDAP&amp;diff=14079&amp;oldid=prev"/>
				<updated>2012-06-09T12:28:13Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==OpenLDAP  как за­ме­на ActiveDirectory==&lt;br /&gt;
&lt;br /&gt;
: Сво­бод­ная реа­ли­за­ция го­то­ва за­ме­нить про­прие­тар­ный ана­лог – как ми­ни­мум, во мно­гих ти­пич­ных слу­ча­ях. '''Ан­д­рей Ан­д­ре­ев''' обо­зре­ва­ет служ­бы ка­та­ло­гов.&lt;br /&gt;
&lt;br /&gt;
Всем из­вес­тен тот факт, что в опе­ра­ци­он­ных сис­те­мах MS Windows для ор­ганиза­ции цен­тра­ли­зо­ван­но­го хранения и управ­ления ре­сур­са­ми се­ти ис­поль­зу­ет­ся Active Directory (AD), ко­то­рая яв­ля­ет со­бой сред­ст­во ие­рар­хи­че­­ско­­го пред­став­ления ре­сур­сов, при­над­ле­жа­щих неко­то­рой от­дель­но взя­той ор­ганиза­ции, и ин­фор­ма­ции об этих ре­сур­сах. Под этим по­ня­ти­ем мо­гут под­ра­зу­ме­вать­ся ма­те­ри­аль­ные ре­сур­сы, пер­со­нал, се­те­вые ре­сур­сы и т. д. Но, несмот­ря на все на­ра­бот­ки Microsoft (на­при­мер, GPO), AD есть не что иное, как служ­ба ка­та­ло­гов, ра­бо­таю­щих по про­то­ко­лу LDAP (уп­ро­щен­ный про­то­кол DAP). Со­от­вет­ст­вен­но, лю­бая служ­ба ка­та­ло­гов, ра­бо­таю­щая по дан­но­му про­то­ко­лу, мо­жет час­тич­но или пол­но­стью за­менить AD в за­ви­си­мо­сти от хра­ня­щих­ся в ба­зе служ­бы ка­та­ло­гов дан­ных. В ми­ре СПО су­ще­ст­ву­ет несколь­ко действительно стоя­щих реа­ли­за­ций служб ка­та­ло­гов: OpenLDAP, Red Hat Directory Server, Mandriva Directory Server. На Linux дав­но пор­ти­ро­ва­ны мно­гие ком­мер­че­­ские про­дук­ты это­го клас­са – на­при­мер, Novell eDirectory; но наи­бо­лее гиб­кая из них в ис­поль­зо­вании – OpenLDAP. Её мы се­го­дня и рас­смот­рим.&lt;br /&gt;
&lt;br /&gt;
===Что та­кое OpenLDAP?===&lt;br /&gt;
&lt;br /&gt;
Итак, OpenLDAP – это служ­ба ка­та­ло­гов, ко­то­рая по­зво­ля­ет нам ра­бо­тать с раз­лич­ны­ми се­те­вы­ми ре­сур­са­ми (поль­зо­ва­те­ля­ми, ком­пь­ю­те­ра­ми, прин­те­ра­ми, зо­на­ми DNS, а так­же всем, что необ­хо­ди­мо вам для ра­бо­ты).&lt;br /&gt;
&lt;br /&gt;
Вся ра­бо­та осу­ще­ст­в­ля­ет­ся по про­то­ко­лу LDAP (англ. Lightweight Directory Access Protocol). Это се­те­вой про­то­кол для досту­па к служ­бе ка­та­ло­гов X.500, раз­ра­бо­тан­ный IETF как об­лег­чён­ный ва­ри­ант ITU-T про­то­ко­ла DAP. LDAP – от­но­си­тель­но про­стой про­то­кол, ис­поль­зую­щий TCP/IP и по­зво­ляю­щий про­из­во­дить опе­ра­ции ав­то­ри­за­ции [bind], по­ис­ка [search] и сравнения [compare], а так­же опе­ра­ции до­бав­ления, из­менения или уда­ления за­пи­сей. &lt;br /&gt;
&lt;br /&gt;
Лю­бая запись в ка­та­ло­ге LDAP со­сто­ит из од­но­го или несколь­ких ат­ри­бу­тов и об­ла­да­ет уникаль­ным именем (DN – англ. Distinguished Name). Уникаль­ное имя со­сто­ит из од­но­го или несколь­ких от­но­си­тель­ных уникаль­ных имен, раз­де­лён­ных за­пя­той. От­но­си­тель­ное уникаль­ное имя име­ет вид «Имя­ Ат­ри­бу­та=зна­чение». На од­ном уровне ка­та­ло­га не мо­жет су­ще­ст­во­вать двух за­пи­сей с оди­на­ко­вы­ми от­но­си­тель­ны­ми уникаль­ны­ми име­на­ми. В си­лу та­кой струк­ту­ры уникаль­но­го имени за­пи­си в ка­та­ло­ге мож­но лег­ко пред­ста­вить в ви­де де­ре­ва. Вся ин­фор­ма­ция хранит­ся в ба­зе дан­ных, а доступ к ней осу­ще­ст­в­ля­ет­ся по про­то­ко­лу LDAP.&lt;br /&gt;
&lt;br /&gt;
В OpenLDAP для хранения ин­фор­ма­ции ис­поль­зу­ет­ся ба­за дан­ных Berkeley DB, что на­кла­ды­ва­ет ряд ог­раничений на ко­ли­че­­ст­во за­пи­сей, хранимых на­ми. Эм­пи­ри­че­­ски вы­яв­ле­но, что для 400 – 500 за­пи­сей ба­зы дан­ных Berkeley DB доста­точ­но. Од­на­ко, ес­ли ко­ли­че­­ст­во на­ших за­пи­сей в служ­бе ка­та­ло­гов бо­лее 500, пред­поч­ти­тельней ис­поль­зо­вать ба­зы дан­ных SQL. Как след­ст­вие, мож­но умень­шить вре­мя за­про­са.&lt;br /&gt;
&lt;br /&gt;
Для ра­бо­ты с SQL необ­хо­ди­мо в основ­ном кон­фи­гу­ра­ци­он­ном фай­ле '''slapd.conf''' под­клю­чить необ­хо­ди­мый мо­дуль '''back_sql.la''', рас­ком­мен­три­ро­вав его, а так­же путь к мо­ду­лям. По­сле это­го вме­сто ти­па ба­зы дан­ных '''bdb''' ука­жи­те '''sql''' в па­ра­мет­ре '''database''' и под­го­товь­те таб­ли­цы SQL. Под­робнее с этим мож­но по­зна­ко­мить­ся в ''HowTo'' http://darold.net/projects/ldap_pg/HOWTO/index.html.&lt;br /&gt;
&lt;br /&gt;
===Ус­та­нов­ка и на­строй­ка===&lt;br /&gt;
&lt;br /&gt;
Ус­та­нав­ли­вать OpenLDAP мы бу­дем в ди­ст­ри­бу­ти­ве CentOS. Для ус­та­нов­ки вы­пол­ним ко­ман­ду&lt;br /&gt;
&lt;br /&gt;
 # sudo yum install openldap*&lt;br /&gt;
&lt;br /&gt;
Ос­нов­ной кон­фи­гу­ра­ци­он­ный файл на­хо­дит­ся в ка­та­ло­ге '''/etc/openldap/''' и на­зы­ва­ет­ся '''slapd.conf'''. Для пер­во­на­чаль­ной на­строй­ки дос­та­точ­но ука­зать зна­че­ния сле­дую­щим па­ра­мет­рам: '''suffix, rootdn, rootpw'''.&lt;br /&gt;
&lt;br /&gt;
При­мер:&lt;br /&gt;
&lt;br /&gt;
 include		 /etc/openldap/schema/core.schema&lt;br /&gt;
 include		 /etc/openldap/schema/cosine.schema&lt;br /&gt;
 include		 /etc/openldap/schema/inetorgperson.schema&lt;br /&gt;
 include		 /etc/openldap/schema/nis.schema&lt;br /&gt;
 allow bind_v2&lt;br /&gt;
 pidfile		 /var/run/openldap/slapd.pid&lt;br /&gt;
 argsfile	 /var/run/openldap/slapd.args&lt;br /&gt;
 # modulepath	 /usr/lib/openldap&lt;br /&gt;
 # modules available in openldap-servers-sql RPM package:&lt;br /&gt;
 # moduleload back_sql.la&lt;br /&gt;
 database	 bdb&lt;br /&gt;
 suffix		 “dc=lw,dc=lan”&lt;br /&gt;
 rootdn		 “cn=Manager,dc=lw,dc=lan”&lt;br /&gt;
 rootpw		 secret&lt;br /&gt;
 directory	 /var/lib/ldap&lt;br /&gt;
 index objectClass eq,pres&lt;br /&gt;
 index ou,cn,mail,surname,givenname eq,pres,sub&lt;br /&gt;
 index uidNumber,gidNumber,loginShell eq,pres&lt;br /&gt;
 index uid,memberUid eq,pres,sub&lt;br /&gt;
 index nisMapName,nisMapEntry eq,pres,sub&lt;br /&gt;
&lt;br /&gt;
Сле­ду­ет от­ме­тить, что в при­ме­ре пред­став­лен не весь кон­фи­гу­ра­ци­он­ный файл, а толь­ко его часть.&lt;br /&gt;
&lt;br /&gt;
За­пус­тим служ­бу ка­та­ло­гов:&lt;br /&gt;
&lt;br /&gt;
 #/etc/init.d/ldap start&lt;br /&gt;
&lt;br /&gt;
Для ра­бо­ты нам не­об­хо­ди­мо за­не­сти в ба­зу OpenLDAP не­об­хо­ди­мую ми­ни­маль­ную ин­фор­ма­цию – на­при­мер, за­пись ад­ми­ни­ст­ра­то­ра ка­та­ло­га. Но предварительно рас­смот­рим струк­ту­ру хра­не­ния за­пи­сей LDAP:&lt;br /&gt;
* Са­мый верх­ний уро­вень («ко­рень» де­ре­ва ):&lt;br /&gt;
&lt;br /&gt;
 dc=lw,cd=lan&lt;br /&gt;
&lt;br /&gt;
Здесь объ­ект клас­са '''dc''' – Domain Controller, как это при­ня­то и в AD.&lt;br /&gt;
&lt;br /&gt;
* Сле­дую­щий уро­вень '''ou''' – Organization Unit («ветвь» де­ре­ва, кон­тей­нер­ный объ­ект), в ко­то­рой по умол­ча­нию соз­да­ют­ся объ­ек­ты, пред­став­ляю­щие поль­зо­ва­те­лей:&lt;br /&gt;
&lt;br /&gt;
 ou=People,dc=lw,dc=lan&lt;br /&gt;
&lt;br /&gt;
* Са­ми поль­зо­ва­те­ли бу­дут пред­став­ле­ны в ви­де объ­ек­тов сле­дую­ще­го ви­да:&lt;br /&gt;
&lt;br /&gt;
 uid=user,ou=People,dc=lw,dc=lan&lt;br /&gt;
&lt;br /&gt;
Струк­ту­ра за­пи­сей пред­став­ля­ет­ся в ви­де де­ре­ва, с корневым эле­мен­том '''dc=lw,dc=lan'''. Доступ ко всем вет­кам де­ре­ва име­ет толь­ко ад­минист­ра­тор ка­та­ло­га или поль­зо­ва­тель, на­де­лен­ный со­от­вет­ст­вую­щи­ми пра­ва­ми. На­при­мер, поль­зо­ва­тель '''user''' не име­ет прав на про­смотр со­дер­жи­мо­го ка­та­ло­га вы­ше вет­ки '''ou=People,dc=lw,dc=lan'''.&lt;br /&gt;
&lt;br /&gt;
Итак, пе­рей­дем к прак­ти­ке и соз­да­дим файл '''test.ldif'''.&lt;br /&gt;
&lt;br /&gt;
 dn: dc=lw,dc=lan //ко­рень ка­та­ло­га, suffix, наш до­мен&lt;br /&gt;
 dc: lw&lt;br /&gt;
 objectClass: top&lt;br /&gt;
 objectClass: dcObject&lt;br /&gt;
 objectClass: organization&lt;br /&gt;
 o: test&lt;br /&gt;
 dn: cn=Manager,dc=lw,dc=lan	 // ад­ми­ни­ст­ра­тор ка­та­ло­га;&lt;br /&gt;
 	 // ес­ли рас­смат­ри­вать objectClass: top&lt;br /&gt;
 	 // от­но­си­тель­но фай­ла slapd.conf, это rootdn&lt;br /&gt;
 objectClass: organizationalRole&lt;br /&gt;
 cn: Manager&lt;br /&gt;
 dn: ou=people,dc=lw,dc=lan 	 // вет­ка people ( в AD вет­ка 	&lt;br /&gt;
 			 // на­зы­ва­ет­ся Users)&lt;br /&gt;
 ou: people&lt;br /&gt;
 objectClass: top&lt;br /&gt;
 objectClass: organizationalUnit&lt;br /&gt;
 dn: uid=user,ou=people,dc=lw,dc=lan //наш пер­вый поль­зо­ва­тель&lt;br /&gt;
 uid: user&lt;br /&gt;
 cn: User&lt;br /&gt;
 objectClass: account&lt;br /&gt;
 objectClass: posixAccount&lt;br /&gt;
 objectClass: top&lt;br /&gt;
 uidnumber: 1001&lt;br /&gt;
 gidnumber: 1001&lt;br /&gt;
 homedirectory: /home/user&lt;br /&gt;
 gecos: User&lt;br /&gt;
 userpassword: 123456&lt;br /&gt;
&lt;br /&gt;
На пер­вый взгляд здесь не всё так про­сто. Од­на­ко всё го­раз­до лег­че, чем ка­жет­ся. '''dn''' ука­зы­ва­ет на на­ча­ло но­вой вет­ки в на­шем де­ре­ве струк­ту­ры ка­та­ло­га, а даль­ше идет опи­сание объ­ект­ных клас­сов и ат­ри­бу­тов за­пи­си.&lt;br /&gt;
&lt;br /&gt;
Где взять объ­ект­ные клас­сы и со­от­вет­ст­вую­щие ат­ри­бу­ты? Для это­го су­ще­ст­ву­ют спе­ци­аль­ные фай­лы-схе­мы с рас­ши­рением '''*.schema''', ко­то­рые рас­по­ло­же­ны в ка­та­ло­ге '''/etc/openldap/schema/'''. Рас­смот­рим часть та­кой схе­мы, поскольку там мно­го ин­те­рес­ной ин­фор­ма­ции.&lt;br /&gt;
&lt;br /&gt;
Взять, к при­ме­ру, файл '''/etc/openldap/schema/core.schema''':&lt;br /&gt;
&lt;br /&gt;
 attributetype ( 2.5.4.10 NAME ( 'o' 'organizationName' )&lt;br /&gt;
 	 DESC 'RFC2256: organization this object belongs to'&lt;br /&gt;
 	 SUP name )&lt;br /&gt;
 …&lt;br /&gt;
 objectclass ( 2.5.6.4 NAME 'organization'&lt;br /&gt;
 	 DESC 'RFC2256: an organization'&lt;br /&gt;
 	 SUP top STRUCTURAL&lt;br /&gt;
 	 MUST o&lt;br /&gt;
 	 MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $&lt;br /&gt;
 		 x121Address $ registeredAddress $ destinationIndicator $&lt;br /&gt;
 		 preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $&lt;br /&gt;
 		 telephoneNumber $ internationaliSDNNumber $&lt;br /&gt;
 		 facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $&lt;br /&gt;
 		 postalAddress $ physicalDeliveryOfficeName $ st $ l $ description ) )&lt;br /&gt;
 …&lt;br /&gt;
&lt;br /&gt;
Для рас­смот­рения мы взя­ли толь­ко один ат­ри­бут и один класс, со­дер­жа­щий этот ат­ри­бут. Опи­сание ат­ри­бу­тов на­чи­на­ет­ся с за­ре­зер­ви­ро­ван­но­го сло­ва '''attributetype'''. Да­лее в круг­лых скоб­ках идут ука­зания па­ра­мет­ров, обя­за­тель­ных и нет: '''OID''' (Object Identifier), имя ат­ри­бу­та '''NAME''', ком­мен­та­рий '''DESC''' и '''SUP''' (за­ви­си­мо­сти от дру­гих ат­ри­бу­тов). Опи­сание ат­ри­бу­тов всегда пи­шут вы­ше опи­сания клас­сов. За­тем идет опи­сание клас­са, где ис­поль­зу­ет­ся этот ат­ри­бут.&lt;br /&gt;
&lt;br /&gt;
Опи­сание клас­сов на­чи­на­ет­ся с за­ре­зер­ви­ро­ван­но­го сло­ва '''objectclass''', а да­лее в круг­лых скоб­ках '''OID''', имя клас­са '''NAME''', ком­мен­та­рий, '''SUP''', обя­за­тель­ный ат­ри­бут со зна­чением '''MUST''', необя­за­тель­ные ат­ри­бу­ты '''MAY'''.&lt;br /&gt;
&lt;br /&gt;
Где взять '''OID''' для на­пи­сания сво­их схем? Есть два ре­шения это­го во­про­са:&lt;br /&gt;
* За­ре­зер­ви­ро­вать за сво­ей ор­ганиза­ци­ей оп­ре­де­лен­ный '''OID''' в со­от­вет­ст­вую­щих учреждениях.&lt;br /&gt;
* Ис­поль­зо­вать спе­ци­аль­ный диа­па­зон зна­чений со­глас­но офи­ци­аль­ной до­ку­мен­та­ции (http://www.openldap.org/doc/admin24/schema.html).&lt;br /&gt;
&lt;br /&gt;
Соз­да­в свою соб­ст­вен­ную схе­му, в фай­ле '''slapd.conf''', в раз­де­ле '''include''', необ­хо­ди­мо под­клю­чить свою схе­му по ана­ло­гии со стан­дарт­ны­ми и пе­ре­за­пустить служ­бу ка­та­ло­гов.&lt;br /&gt;
&lt;br /&gt;
Что­бы до­ба­вить на­шу запись в ка­та­лог, не­об­хо­ди­мо вы­пол­нить ко­ман­ду ''ldapadd'':&lt;br /&gt;
&lt;br /&gt;
 # ldapadd -x -D “cn=Manager,dc=lw,dc=lan” -w secret -f test.ldif&lt;br /&gt;
&lt;br /&gt;
А для про­смот­ра со­дер­жи­мо­го ка­та­ло­га мож­но вос­поль­зо­вать­ся ко­ман­дой ''ldapsearch'':&lt;br /&gt;
&lt;br /&gt;
 # ldapseach -x -D “cn=Manager,dc=lw,dc=lan” -W -b “dc=lw,dc=lan”&lt;br /&gt;
&lt;br /&gt;
Как вид­но из при­ме­ра, бы­ли вы­бра­ны '''suffix dc=lw,dc=lan''', где '''lan''' – со­кра­щение от ука­зания ти­па се­ти (под­ра­зу­ме­ва­лось локаль­ная сеть), а '''lw''' – со­кра­щение от LinuxWizard (один из немно­гих раз­ра­бот­чи­ков се­те­вых ре­шений на ба­зе тех­но­ло­гии служ­бы ка­та­ло­гов в России). '''Rootdn cn=Manager,dc=lw,dc=lan''', а '''rootpw secret''' – па­роль ад­минист­ра­то­ра ка­та­ло­га.&lt;br /&gt;
&lt;br /&gt;
По­ми­мо команд ''ldapsearch'' и ''ldapadd'', есть еще ''ldapmodify'' (из­менение дан­ных ка­та­ло­га) и ''ldapdelete'' (уда­ление за­пи­сей).&lt;br /&gt;
&lt;br /&gt;
Бо­лее де­таль­ное опи­сание всех команд мож­но по­смот­реть в до­ку­мен­та­ции на сай­те http://www.openldap.org/doc. От­ме­тим, что для всех команд на­до ука­зать, кем под­клю­чать­ся (в на­шем слу­чае –Manager’ом) и ку­да под­клю­чать­ся, точнее, в ка­кую вет­ку де­ре­ва ка­та­ло­га ('''-b &amp;quot;dc=lw,dc=lan&amp;quot;''', а мо­жет быть, '''&amp;quot;ou=people,dc=lw,dc=lan&amp;quot;''', ес­ли у поль­зо­ва­теля нет прав досту­па к бо­лее верхним вет­кам).&lt;br /&gt;
&lt;br /&gt;
Что­бы ваш па­роль, ука­зан­ный в яв­ном ви­де, никто не уви­дел «из-за пле­ча», на эк­ране монито­ра за­ме­ня­ем па­ра­метр команд «'''-w secret'''» на «'''-W'''» и вво­дим па­роль при за­про­се.&lt;br /&gt;
&lt;br /&gt;
Об­ра­тите внимание на то, что ко­ман­дой ''ldapsearch'' мож­но про­смот­реть со­дер­жи­мое не толь­ко служ­бы ка­та­ло­гов OpenLDAP, но и RHDS по­доб­ных служб ка­та­ло­гов, а так­же MS Active Directory. Так как в MS не всё как у лю­дей, па­ра­мет­ры ви­до­из­ме­не­ны, но смысл их тот же. При­ве­дем при­мер про­смот­ра со­дер­жи­мо­го AD:&lt;br /&gt;
&lt;br /&gt;
 #ldapsearch -x -D Administrator@example.com -w password -b ‘’dc=example,dc=com’’ -h host&lt;br /&gt;
&lt;br /&gt;
Занеся в ка­та­лог всю ин­фор­ма­ция по ор­ганиза­ции, мож­но на­страи­вать раз­лич­ные служ­бы на ау­тен­ти­фи­ка­цию и ав­то­ри­за­цию че­рез LDAP. Под­робнее о том, ка­кие это служ­бы и как их на­страи­вать, бу­дет рас­смот­ре­но во вто­рой час­ти дан­ной ста­тьи.&lt;br /&gt;
&lt;br /&gt;
При­ве­ден­ные ша­ги хо­ро­ши для тех слу­ча­ев, когда необ­хо­ди­мо на­стро­ить все с ну­ля. Что же де­лать, когда су­ще­ст­ву­ет уже на­стро­ен­ная и ра­бо­таю­щая служ­ба ка­та­ло­гов? Для это­го име­ют­ся спе­ци­аль­ные скрип­ты для ми­гра­ции дан­ных. Су­ще­ст­ву­ют как стан­дарт­ные скрип­ты, так и сто­ронние. Стан­дарт­ные скрип­ты рас­по­ло­же­ны в ка­та­ло­ге '''/usr/share/openldap/migration/''', а сто­ронние вхо­дят в со­став ''Windows to Linux Migration Toolki''t (http://sourceforge.net/projects/w2lmt/files/w2lmt/w2lmt-0.3.1/w2lmt-0.3.1.tar.gz/download). Скрип­ты ''w2lmt'' очень по­лез­ны для ми­гра­ции с Active Directory.&lt;br /&gt;
&lt;br /&gt;
В со­став ''w2lmt'' вхо­дят скрип­ты, на­пи­сан­ные на ''Perl'', и фай­лы настройки для скрип­тов. Ос­нов­ные скрип­ты – это ''w2lmt-migrate-dns'' и ''w2lmt-migrate-smbauth''. Они пред­на­зна­че­ны для пе­ре­но­са ин­фор­ма­ции DNS и па­ра­мет­ров ау­тен­ти­фи­ка­ции со­от­вет­ст­вен­но. Для ра­бо­ты нам по­на­до­бят­ся ''samba3'' и ''smbldap-tools''.&lt;br /&gt;
&lt;br /&gt;
Ука­зав свои на­стро­ек сер­ве­ра AD в фай­лах настройки '''migrate-smbauth.conf''' и '''migrate-dns.conf''', мож­но за­пус­кать скрип­ты:&lt;br /&gt;
&lt;br /&gt;
 #./ w2lmt-migrate-dns -f migrate-dns.conf&lt;br /&gt;
 #./ w2lmt-migrate-smbauth -f migrate-smbauth.conf&lt;br /&gt;
&lt;br /&gt;
Под­робнее ис­поль­зо­вание скрип­тов ''w2lmt'' опи­са­но в книге Дэ­ви­да Ал­ле­на «Пе­ре­ход с Windows на Linux» и в ста­тье «За­ме­на Microsoft AD на OpenLDAP+Samba3» (http://linux.mkrovlya.ru/book/за­ме­на-microsoft-ad-на-openldapsamba3).&lt;br /&gt;
&lt;br /&gt;
По­ми­мо яв­ной ми­гра­ции, есть воз­мож­ность соз­дания про­кси­ро­вания AD, мап­пин­га ат­ри­бу­тов. Т. е. все необ­хо­ди­мые служ­бы мож­но на­стро­ить на ра­бо­ту с OpenLDAP, а он, в свою оче­редь, бу­дет об­ра­щать­ся (пе­ре­на­прав­лять за­прос) к AD. Это ис­поль­зу­ет­ся в тех слу­ча­ях, когда без AD со­всем не обой­тись.&lt;br /&gt;
&lt;br /&gt;
===Ре­п­ли­ка­ция===&lt;br /&gt;
&lt;br /&gt;
OpenLDAP име­ет раз­лич­ные кон­фи­гу­ра­ции для соз­дания ре­п­ли­ки. Ранее, до вер­сии 2.4, су­ще­ст­во­вал ме­ханизм, по­зво­ляющий «глав­но­му» [master] сер­ве­ру по­лу­чать об­нов­ления служ­бы ка­та­ло­гов с раз­лич­ных дру­гих кли­ен­тов, а «вто­ро­сте­пен­ные» [slave] сер­ве­ра по­лу­ча­ли об­нов­ления толь­ко с «глав­но­го», ука­зан­но­го в кон­фи­гу­ра­ции. Струк­ту­ра ре­п­ли­ка­ции бы­ла стро­го оп­ре­де­ле­на, и лю­бая ба­за дан­ных мог­ла вы­пол­нять толь­ко од­ну роль: или master, или slave. На­чи­ная с вер­сии 2.4, OpenLDAP под­дер­жи­ва­ет раз­лич­ные то­по­ло­гии ре­п­ли­ка­ции. Вме­сто по­ня­тий master-сер­вер и slave-сер­вер ис­поль­зу­ют­ся «про­вай­дер» [provider] и «по­тре­би­тель» [consumer]. «Про­вай­дер» ре­п­ли­ци­ру­ет об­нов­ления ка­та­ло­га «по­тре­би­те­лю», а «по­тре­би­тель» по­лу­ча­ет об­нов­ления от «про­вай­де­ра». В от­ли­чие от стро­го оп­ре­де­лен­ных ро­лей master/slave, ро­ли provider/consumer не яв­ля­ют­ся стро­го оп­ре­де­лен­ны­ми. Об­нов­ления ре­п­ли­ка­ции, по­лу­чен­ные одним «по­тре­би­те­лем», мо­гут быть от­прав­ле­ны дру­го­му сер­ве­ру, та­ким об­ра­зом, «по­тре­би­тель» дей­ст­ву­ет од­но­вре­мен­но как «про­вай­дер». В ро­ли «по­тре­би­те­ля» мо­жет быть не толь­ко сер­вер LDAP, но и кли­ент LDAP.&lt;br /&gt;
&lt;br /&gt;
Под­робнее об ис­поль­зо­вании и на­строй­ке раз­лич­ных то­по­ло­ги­ях ре­п­ли­ка­ции мож­но оз­на­ко­мить­ся в офи­ци­аль­ной до­ку­мен­та­ции (http://www.openldap.org/doc/admin24/replication.html), а мы для при­ме­ра рас­смот­рим '''syncrepl''' – это ме­ханизм ре­п­ли­ка­ции со сто­ро­ны «по­тре­би­те­ля». Кон­фи­гу­ра­ция '''syncrepl''' оп­ре­де­ля­ет­ся в фай­ле '''slapd.conf''' на «сер­ве­ре-по­тре­би­те­ле». На­чаль­ная ре­п­ли­ка­ция мо­жет быть вы­полнена за­пуском ме­ханиз­ма '''syncrepl''' без син­хрониза­ции '''cookie''' или за­груз­кой фай­ла '''LDIF''', соз­дан­но­го как ре­зерв­ное ко­пи­ро­вание «про­вай­де­ра». '''Syncrepl''' ав­то­ма­ти­че­­ски син­хронизи­рует «по­тре­би­тель­скую» ко­пию с те­ку­щим со­дер­жи­мым «про­вай­де­ра», по­зво­ляя не оста­нав­ли­вать «про­вай­дер», во из­бе­жания несо­гла­со­ван­но­сти ко­пий. На сто­ро­не «про­вай­де­ра» в '''slapd.conf''', ос­нов­ной кон­фи­гу­ра­ци­он­ный файл OpenLDAP, до­бав­ля­ем стро­ки &lt;br /&gt;
&lt;br /&gt;
 database bdb&lt;br /&gt;
 suffix dc=lw,dc=lan&lt;br /&gt;
 rootdn dc=lw,dc=lan&lt;br /&gt;
 directory /var/ldap/db&lt;br /&gt;
 index entryCSN,entryUUID eq&lt;br /&gt;
 overlay syncprov&lt;br /&gt;
 syncprov-checkpoint 100 10&lt;br /&gt;
 syncprov-sessionlog 100&lt;br /&gt;
&lt;br /&gt;
'''Syncprov-checkpoint''' от­ве­ча­ет за тес­ти­ро­вание кон­троль­ных то­чек по­сле опе­ра­ции за­пи­си. 100 – это ко­ли­че­­ст­во опе­ра­ций, 10 – это ми­ну­ты. '''Syncprov-sessionlog''' от­ве­ча­ет за ве­дение ло­га, и па­ра­метр 100 – это раз­мер ло­га. На сто­ро­не «по­тре­би­те­ля» ос­нов­ной кон­фи­гу­ра­ци­он­ный файл '''slapd.conf''' вы­гля­дит так:&lt;br /&gt;
&lt;br /&gt;
 database hdb&lt;br /&gt;
 suffix dc=lw,dc=lan&lt;br /&gt;
 rootdn dc=lw,dc=lan&lt;br /&gt;
 directory /var/ldap/db&lt;br /&gt;
 index objectclass,entryCSN,entryUUID eq&lt;br /&gt;
 syncrepl rid=123&lt;br /&gt;
 provider=ldap://provider.lw.lan:389&lt;br /&gt;
 type=refreshOnly&lt;br /&gt;
 interval=01:00:00:00&lt;br /&gt;
 searchbase=”dc=lan,dc=lw”&lt;br /&gt;
 filter=”(objectClass=organizationalPerson)”&lt;br /&gt;
 scope=sub&lt;br /&gt;
 attrs=”cn,sn,ou,telephoneNumber,title,l”&lt;br /&gt;
 schemachecking=off&lt;br /&gt;
 bindmethod=simple&lt;br /&gt;
 binddn=”cn=syncuser,dc=lw,dc=lan”&lt;br /&gt;
 credentials=secret&lt;br /&gt;
&lt;br /&gt;
В этом при­ме­ре «по­тре­би­тель» бу­дет под­клю­чать­ся к «про­вай­де­ру» по пор­ту 389 для вы­полнения за­про­са син­хрониза­ции один разв день. Он бу­дет свя­зы­вать­ся [bind] как '''cn=syncuser,dc=lw,dc=lan''' с ис­поль­зо­ванием про­стой ау­тен­ти­фи­ка­ции по па­ро­лю «secret».&lt;br /&gt;
&lt;br /&gt;
Управ­ление досту­пом '''cn=syncuser,dc=lw,dc=lan''' долж­но быть уста­нов­ле­но на про­вай­де­ре. Для за­пуска син­хрониза­ции не надо пе­ре­за­гру­жать «про­вай­де­ра» – доста­точ­но за­пустить «по­тре­би­те­ля».&lt;br /&gt;
&lt;br /&gt;
===Сис­те­мы управ­ления===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF142_43_1.jpg|300px]] Рис. 1. Глав­ное ме­ню ''GOsa''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF142_43_2.jpg|300px]]  Рис. 2. Ин­тер­фейс сис­те­мы управ­ления ''Ebox''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF142_43_3.jpg|300px]]  Рис. 3. Соз­дание поль­зо­ва­те­ля в ''GOsa''.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Ад­минист­ри­ро­вание служ­бы ка­та­ло­гов OpenLDAP – доста­точ­но слож­ная за­да­ча для че­ло­ве­ка, толь­ко что по­зна­ко­мив­ше­го­ся с ней. Для уп­ро­щения за­дач ад­минист­ри­ро­вания су­ще­ст­ву­ют  раз­лич­ные сис­те­мы управ­ления, на­при­мер, ''Ebox, GOsa, Webmin, phpLDAPadmin'' и дру­гие. Их основ­ная за­да­ча – из­ба­вить вас от пря­мо­го об­ра­щения к ат­ри­бу­там и объ­ект­ным клас­сам. Со­гла­си­тесь, так го­раз­до про­ще!&lt;br /&gt;
&lt;br /&gt;
Все сис­те­мы управ­ления мож­но раз­де­лить на три ка­те­го­рии: &lt;br /&gt;
* Низ­ко­уровневые сред­ст­ва ре­дак­ти­ро­вания дан­ных&lt;br /&gt;
* Сис­те­мы управ­ления, ин­тег­ри­ро­ван­ные в служ­бу ка­та­ло­гов&lt;br /&gt;
* Сис­те­мы управ­ления с гра­фи­че­­ским ин­тер­фей­сом&lt;br /&gt;
&lt;br /&gt;
Рас­смот­рим их под­робнее. К низ­ко­уровневы­ем сред­ст­вам ре­дак­ти­ро­вания дан­ных от­но­сят­ся ''WebMin, phpLDAPadmin, Lume''. Осо­бен­ность дан­ных средств за­клю­ча­ет­ся в том, что у вас нет ог­раничений в управ­лении служ­бой ка­та­ло­гов, но вы опять же на­пря­мую свя­за­ны с ат­ри­бу­та­ми и объ­ект­ны­ми клас­са­ми. Ин­тег­ри­ро­ван­ные сис­те­мы управ­ления от­но­сят­ся к Red Hat Directory Server и по­доб­ных ему (Centos DS, 389 DS). Здесь су­ще­ст­ву­ют две реа­ли­за­ции сис­те­мы управ­ления: web-ин­тер­фейс и кли­ент-сер­вер­ная реа­ли­за­ция на ''Java''. Как пра­ви­ло, ин­тег­ри­ро­ван­ные сис­те­мы управ­ления да­ют ма­ло воз­мож­но­стей и неудоб­ны в ­поль­зо­вании для тех, кто не привык к служ­бе ка­та­ло­гов. Гра­фи­че­­ские сис­те­мы по­зво­ля­ют на­гляд­но ви­зуа­ли­зи­ро­вать объ­ек­ты, на­хо­дя­щие­ся в LDAP-ка­та­ло­ге, и из­бав­ля­ют вас от по­ис­ка необ­хо­ди­мых ат­ри­бу­тов и объ­ект­ных клас­сов при соз­дании за­пи­сей. Ча­ще все­го гра­фи­че­­ская сис­те­ма управ­ления пред­став­ля­ет со­бой не что иное, как web-ин­тер­фейс к служ­бе ка­та­ло­га.&lt;br /&gt;
&lt;br /&gt;
В хо­де ана­ли­за раз­лич­ных су­ще­ст­вую­щих гра­фи­че­­ских сис­тем управ­ления мож­но от­дель­но вы­де­лить ''GOsa'' (рис. 1). Эта гра­фи­че­­ская сис­те­ма управ­ления про­ста в ис­поль­зо­вании и на­строй­ке. Вы­бор сис­те­мы управ­ления осно­вы­вал­ся по та­ким кри­те­ри­ям, как&lt;br /&gt;
* кон­троль досту­па в ин­тернет (DHCP, DNS, Squid);&lt;br /&gt;
* управ­ление поч­то­вым сер­ве­ром и се­те­вым фильт­ром;&lt;br /&gt;
* под­держ­ка пла­ги­нов и те­ле­фонии;&lt;br /&gt;
* тон­кий кли­ент (FAI);&lt;br /&gt;
* Posix- и Kolab-ак­ка­унт.&lt;br /&gt;
&lt;br /&gt;
По­ми­мо ''GOsa'', су­ще­ст­ву­ет еще ряд раз­лич­ных сис­тем управ­ления, на­при­мер, ''Ebox'' (рис.2). Важ­но от­ме­тить, что ото­бра­жение объ­ек­тов в ''GOsa'' про­ис­хо­дит толь­ко в том слу­чае, ес­ли в их опи­сании при­сут­ст­ву­ет ка­кой-ли­бо из спе­ци­аль­ных клас­сов, за­ре­ги­ст­ри­ро­ван­ных в схе­мах ''GOsa''. Та­кой под­ход по­зво­ля­ет ис­поль­зо­вать дру­гие про­ек­ты, ра­бо­таю­щие с LDAP-ка­та­ло­гом, без су­ще­ст­вен­ной их мо­ди­фи­ка­ции. Со­от­вет­ст­вен­но, ес­ли планиру­ет­ся ис­поль­зо­вать ба­зу LDAP толь­ко для ад­минист­ри­ро­вания поль­зо­ва­тель­ских учет­ных за­пи­сей в локаль­ной се­ти и для ин­те­гра­ции с ''Samba'', то луч­ше­го сред­ст­ва ад­минист­ри­ро­вания про­сто не най­ти. Из рис. 3 вид­но, что знание ат­ри­бу­тов и объ­ект­ных клас­сов необя­за­тель­но для соз­дания ка­кой-ли­бо за­пи­си.&lt;br /&gt;
&lt;br /&gt;
Для ра­бо­ты ''GOsa'' в ди­ст­ри­бу­ти­ве CentOS необ­хо­ди­мо об­но­вить ''PHP'' до вер­сии 5.2. Это мож­но сде­лать, до­ба­вив ре­по­зи­то­рий '''ius'''. Для уста­нов­ки и на­строй­ки служ­бы ка­та­ло­гов OpenLDAP и сис­те­мы управ­ления ''GOsa'' мож­но восполь­зо­вать­ся скрип­том '''gosa.sh''', ко­то­рый вы най­де­те на дис­ке. Что же имен­но де­ла­ет наш скрипт?&lt;br /&gt;
&lt;br /&gt;
Для на­ча­ла соз­да­ет­ся файл '''ius.repo''', ко­то­рый нам по­на­до­бит­ся при об­нов­лении ''PHP''. По­ми­мо ''PHP'', необ­хо­ди­мо уста­но­вить ''perl-LDAP, perl-Crypt-SmbHash, httpd'' и, как са­мо со­бой ра­зу­мею­щее­ся, служ­бу ка­та­ло­гов OpenLDAP. По­сле че­го сме­ло мож­но уста­но­вить сис­те­му управ­ления ''GOsa''. Скрипт ска­чи­ва­ет и уста­нав­ли­ва­ет 3 па­ке­та: '''gosa-2.6.9‑1.noarch.rpm, gosa-schema-2.6.9‑1.noarch.rpm, gosa-help-en-2.6.9‑1.noarch.rpm'''. Так как в стан­дарт­ном па­ке­те '''gosa-schema-2.6.9‑1.noarch.rpm''' нет схе­мы '''gosa-custom.schema''', ко­то­рая со­дер­жит по­лез­ные ат­ри­бу­ты и клас­сы, соз­да­дим его са­ми.&lt;br /&gt;
&lt;br /&gt;
По­сле уста­нов­ки необ­хо­ди­мых па­ке­тов мож­но при­сту­пать к на­строй­ке OpenLDAP. Для это­го за­пи­шем в файл '''slapd.conf''' па­ра­мет­ры: '''suffix, rootdn, rootpw''', а так­же необ­хо­ди­мые ин­дек­сы для ''GOsa''. Те­перь поч­ти всё го­то­во; оста­лось за­дать па­ра­мет­ры ''PHP'' для сис­те­мы управ­ления GOsa, от­ре­дак­ти­ровав файл '''php.ini'''. Для ра­бо­то­спо­соб­но­сти все­го, что мы де­ла­ли, за­пуска­ем служ­бу ''ldap'' и служ­бу ''httpd''. Фи­наль­ный штрих – от­кры­ва­ем ''Mozilla Firefox'', в ад­рес­ной стро­ке вво­дим http://localhost/gosa и за­да­ем необ­хо­ди­мые па­ра­мет­ры «кон­фи­гу­ра­то­ру» ''GOsa''. По­ми­мо ис­поль­зо­ван­ных здесь трех па­ке­тов ''GOsa'', су­ще­ст­ву­ет немало пла­ги­нов для хранения дан­ных DNS, Samba, Squid и т. д. Все они доступ­ны по ад­ре­су http://oss.gonicus.de/pub/gosa/, где мож­но ска­чать ис­ходники или па­ке­ты для RedHat-ди­ст­ри­бу­ти­вов и для Debian-ди­ст­ри­бу­ти­вов.&lt;br /&gt;
&lt;br /&gt;
===Итог===&lt;br /&gt;
&lt;br /&gt;
В ито­ге мы име­ем служ­бу ка­та­ло­гов с гра­фи­че­­ской сис­те­мой управ­ления, по­зво­ляю­щую хранить всю необ­хо­ди­мую ин­фор­ма­цию о ре­сур­сах се­ти. Имен­но это и яв­ля­ет­ся основ­ной за­да­чей лю­бой служ­бы ка­та­ло­гов. Дан­ное ре­шение на те­ку­щем эта­пе не смо­жет за­менить AD, т. к. для это­го необ­хо­ди­мо на­стро­ить служ­бы ау­тен­ти­фи­ка­ции (''PAM''), фай­ло­во­го сер­ве­ра (''Samba''), поч­то­во­го сер­ве­ра (''Postfix'' и ''Dovecot''), про­кси-сер­ве­ра (''Squid'') и т. д. Дан­ный этап на­строй­ки бу­дет рас­смот­рен в сле­дую­щей ста­тье – «Служ­бы, ко­то­рые мо­гут ау­тен­ти­фи­ци­ро­вать­ся по LDAP».&lt;br /&gt;
&lt;br /&gt;
'''Плю­сы:'''&lt;br /&gt;
* От­кры­тость ре­шения и рас­ши­рен­ный функ­цио­нал.&lt;br /&gt;
* Воз­мож­ность пол­ной или час­тич­ной за­ме­ны AD, а сле­до­ва­тель­но, воз­мож­ность пря­мой эко­но­мии в руб­лях.&lt;br /&gt;
&lt;br /&gt;
'''Ми­ну­сы:'''&lt;br /&gt;
* Глав­ный и един­ст­вен­ный – от­сут­ст­вие груп­по­вых по­ли­тик.&lt;br /&gt;
&lt;br /&gt;
Дан­ной про­бле­ма­ти­кой ныне занима­ет­ся ка­фед­ра от­кры­тых ин­фор­ма­ци­он­ных тех­но­ло­гий и ин­фор­ма­ти­ки Пе­тер­бург­ского го­сунивер­си­те­та аэро­косми­че­­ско­­го при­бо­ро­строения, где ве­дут­ся раз­ра­бот­ки соз­дания ана­ло­га груп­по­вых по­ли­тик на ОС GNU/Linux и дру­гих ре­ше­ний на ба­зе СПО и служ­бы ка­та­ло­гов.&lt;br /&gt;
&lt;br /&gt;
===Служ­ба ка­та­ло­гов: Как это ра­бо­та­ет?===&lt;br /&gt;
&lt;br /&gt;
Для бо­лее яс­но­го понимания, что же та­кое служ­ба ка­та­ло­гов, мож­но при­вес­ти сравнение служ­бы ка­та­ло­гов OpenLDAP с те­ле­фон­ным или ад­рес­ным спра­вочника­ми (в анг­лоя­зыч­ном ва­ри­ан­те – ка­та­ло­га­ми, directory). Ес­ли вам по­на­до­би­лось най­ти те­ле­фон Ива­на Ива­но­ви­ча Ива­но­ва, то, от­крыв те­ле­фон­ный спра­вочник на странице N, вы най­дё­те ис­ко­мое. Но вот неза­да­ча! Пред­ставь­те, что на од­ной странице со­всем ря­дом ока­за­лось сра­зу два, а мо­жет, и три Ива­на Ива­но­ви­ча Ива­но­вых! Что же де­лать? Как оп­ре­де­лить­ся с тем, кто нам ну­жен?&lt;br /&gt;
&lt;br /&gt;
Имен­но для та­кой си­туа­ции и вво­дит­ся по­ня­тие уникаль­но­го имени – '''distinguished name (dn)'''. '''Distinguished name''' до­слов­но пе­ре­во­дит­ся как от­ли­чи­тель­ное имя; со­от­вет­ст­вен­но, его на­зна­чение – от­ли­чать од­ну запись от дру­гих за­пи­сей. Лю­бая служ­ба ка­та­ло­гов стро­ит­ся на уникаль­ных име­нах ре­сур­сов се­ти и опи­сании их свойств. Пре­иму­ще­ст­во служ­бы ка­та­ло­гов в том, что мы мо­жем за­пи­сы­вать не толь­ко фа­ми­лию че­ло­ве­ка (на­звание ком­пании, ор­ганиза­ции) и его те­ле­фон, а всё, что по­­же­­ла­­ем! Для соз­дания за­пи­си о ком­пании доста­точ­но ука­зать уникаль­ное имя и ис­поль­зо­вать объ­ект­ный класс ('''objectClass''') '''organization''' с вы­бран­ны­ми в нем ат­ри­бу­та­ми ('''attribytetype''').&lt;br /&gt;
&lt;br /&gt;
За­пись в те­ле­фон­ном спра­воч­ни­ке:&lt;br /&gt;
&lt;br /&gt;
 Organization Name: Acme Services&lt;br /&gt;
 Street Address: 123 West First Street&lt;br /&gt;
 City: Chicago&lt;br /&gt;
 State: Illinois&lt;br /&gt;
 Postal Code: 60616-1234&lt;br /&gt;
 Country: USA&lt;br /&gt;
 Phone Number: +1 773 555 8943&lt;br /&gt;
 Phone Number: +1 800 555 9834&lt;br /&gt;
&lt;br /&gt;
За­пись в служ­бе ка­та­ло­гов:&lt;br /&gt;
&lt;br /&gt;
 dn: o=Acme Services, l=Chicago, st=Illinois, c=US&lt;br /&gt;
 o: Acme Services&lt;br /&gt;
 postalAddress: 123 West First Street&lt;br /&gt;
 l: Chicago&lt;br /&gt;
 st: Illinois&lt;br /&gt;
 postalCode: 60616-1234&lt;br /&gt;
 c: US&lt;br /&gt;
 telephoneNumber: +1 773 555 8943&lt;br /&gt;
 telephoneNumber: +1 800 555 9834&lt;br /&gt;
 objectclass: organization&lt;br /&gt;
&lt;br /&gt;
Итак, мы соз­да­ли уникаль­ную запись об ор­ганиза­ции с ин­фор­ма­цией из те­ле­фон­но­го спра­вочника. Это и есть осно­ва служ­бы ка­та­ло­гов – уникаль­ные име­на ('''DN'''), опи­сан­ные с помощью клас­сов ('''objectClass''') и ат­ри­бу­тов ('''attributetype''').&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>