<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.muffty.org &#187; apache</title>
	<atom:link href="http://blog.muffty.org/category/camputers/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.muffty.org</link>
	<description>Дневникът на Милен Панков</description>
	<lastBuildDate>Thu, 05 Mar 2009 08:42:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Удостоверяване на потребител в Apache към Microsoft Active Directory</title>
		<link>http://blog.muffty.org/44/</link>
		<comments>http://blog.muffty.org/44/#comments</comments>
		<pubDate>Sun, 15 Apr 2007 11:31:19 +0000</pubDate>
		<dc:creator>Милен Панков</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[как-да-та]]></category>
		<category><![CDATA[кампютри]]></category>

		<guid isPermaLink="false">http://blog.muffty.org/?p=44</guid>
		<description><![CDATA[Ако трябва да правим удостоверяване към Apache сървър работещ под линукс в Windows базирана мрежа използването на вече съществуващите акаунти на потребителите в активната директория на Windows сървъра ще улесни потребителите ни и няма да се налага да ги караме да помнят по две или повече потребителски имена и пароли. Тук ще опиша как може [...]]]></description>
			<content:encoded><![CDATA[<p>Ако трябва да правим удостоверяване към Apache сървър работещ под линукс в Windows базирана мрежа използването на вече съществуващите акаунти на потребителите в активната директория на Windows сървъра ще улесни потребителите ни и няма да се налага да ги караме да помнят по две или повече потребителски имена и пароли. Тук ще опиша как може да стане това.<br />
Конфигурациите по-долу са тествани на Ubuntu 5.10 Breezy Badger и Fedora Core release 6 (Zod). Ползвана е инсталация на Microsoft Windows Server 2003 Enterprise Edition Service Pack 1 с инсталиран Microsoft Exchange Server 2003 Service Pack 2. Командите и конфигурациите важат за Ubuntu 5.10 Breezy Badger, но не би трябвало да има проблем да се пригодят и за други дистрибуции.</p>
<p><em>ToDo: Да се тества дали конфигурациите работят към Windows 2000 Server.</em></p>
<p><strong>Вариант I &#8211; ползване на mod_auth_ldap</strong></p>
<p>Инсталираме си apache и openldap, ако нямаме вече инсталирани:</p>
<p><code>apt-get install apache2 libldap2</code></p>
<p>За да позволим удостоверяване, във файла &#8216;/etc/apache2/sites-enabled/000-default&#8217; в секцията &#8216;&lt;Directory /var/www/&gt;&#8217; трябва да променим реда &#8216;AllowOverride None&#8217; на &#8216;AllowOverride AuthConfig None&#8217;.<br />
Активираме mod_auth_ldap в конфигурацията на apache:</p>
<p><code>cd /etc/apache2/mods-enabled/<br />
ln -s /etc/apache2/mods-available/auth_ldap.load</code></p>
<p>Създаваме директория, за която ще искаме удостоверяване:</p>
<p><code>mkdir /var/www/ldap_test</code></p>
<p>и я описваме в конфигурацията на apache:</p>
<p><code>touch /etc/apache2/conf.d/ldap_test</code></p>
<p>Файлът &#8216;/etc/apache2/conf.d/ldap_test&#8217; трябва да съдържа следното:</p>
<blockquote><p>&lt;Directory /var/www/ldap_test&gt;<br />
   &nbsp;&nbsp;&nbsp;&nbsp;AuthType Basic<br />
   &nbsp;&nbsp;&nbsp;&nbsp;AuthName &#8222;LDAP&#8220;<br />
   &nbsp;&nbsp;&nbsp;&nbsp;AuthLDAPURL ldap://ldap.domain.com:3268/DC=domain,\<br />
   DC=com?samAccountName?sub?(objectClass=*)<br />
   &nbsp;&nbsp;&nbsp;&nbsp;AuthLDAPBindDN DOMAIN\username<br />
   &nbsp;&nbsp;&nbsp;&nbsp;AuthLDAPBindPassword password<br />
   &nbsp;&nbsp;&nbsp;&nbsp;Require valid-user<br />
&lt;&#47;Directory&gt;</p></blockquote>
<p>Директивата &#8216;AuthLDAPURL&#8217; ни дава адреса на &#8216;LDAP&#8217; сървъра, като съответно трябва да замените &#8216;ldap.domain.com&#8217; със хоста на Windows сървъра, а също така и &#8216;DC=domain&#8217; и &#8216;DC=com&#8217; със тези във вашата структура. За директивата &#8216;AuthLDAPBindDN&#8217; ползвайте активен акаунт в MS Active Directory, като синтаксиса е от вида DOMAIN\username, а за директивата &#8216;AuthLDAPBindPassword&#8217; &#8211; паролата на акаунта. Последните две са нужни, защото активната директория не позволява анонимни връзки. За порт ползвайте 3268 &#8211; порта на Global Catalog-а, защото при използването на стандартния LDAP порт 389 активната директория връща препратки, с които има проблеми.<br />
След рестартиране на Apache-то:</p>
<p><code>/etc/init.d/apache2 restart</code></p>
<p>вече всичко би трябвало да работи и адреса &#8222;http://the_linux_box/ldap_test&#8220; да ни удостовери с валиден потребител към активната директория.</p>
<p>За да използваме удостоверяване по принадлежнаст към група, трябва да направим следните промени в конфигурацията &#8211; закоментираме или махаме директивата &#8216;Require valid-user&#8217; и я заменяме със следното:</p>
<p><code>Require group cn=GroupName,cn=Users,dc=domain,dc=com</code></p>
<p>където &#8216;GroupName&#8217; е името на групата, а domain и com заменяте с тези във вашата структурата.<br />
Горното поради някаква причина не работи за потребители, за които дефинираната група е &#8216;Primary Group&#8217;. По подразбиране в активната директория &#8216;Primary Group&#8217; е &#8216;Domain Users&#8217;. Също така то не работи и ако потребителят не е член директно на групата (например член е на група, която от своя страна е член на дефинираната група).</p>
<p><em>ToDo: Да се провери за възможност горните проблеми да се преодолеят.</em></p>
<p>Ако искаме да удостоверяваме към група Administrators синтаксисът е по-различен, тъй като тя се намира в Builtin структурата на активната директория:</p>
<p><code>Require group CN=Administrators,CN=Builtin,DC=domain,DC=com</code></p>
<p><strong>Вариант II &#8211; ползване на mod_auth_pam</strong></p>
<p>Инсталираме libapache2-mod-auth-pam и libpam-ldap, ако нямаме вече инсталирани:</p>
<p><code>apt-get install libapache2-mod-auth-pam libpam-ldap libnss-ldap</code></p>
<p>Създаваме директория, за която ще искаме удостоверяване:</p>
<p><code>mkdir /var/www/pam_test</code></p>
<p>и я описваме в конфигурацията на apache:</p>
<p><code>touch /etc/apache2/conf.d/pam_test</code></p>
<p>Файлът &#8216;/etc/apache2/conf.d/pam_test&#8217; трябва да съдържа следното:</p>
<blockquote><p>&lt;Directory /var/www/pam_test&gt;<br />
   &nbsp;&nbsp;&nbsp;&nbsp;AuthPAM_Enabled on<br />
   &nbsp;&nbsp;&nbsp;&nbsp;AuthType Basic<br />
   &nbsp;&nbsp;&nbsp;&nbsp;AuthName &#8222;PAM&#8220;<br />
   &nbsp;&nbsp;&nbsp;&nbsp;Require valid-user<br />
&lt;&#47;Directory&gt;</p></blockquote>
<p>Във файла &#8216;/etc/pam.d/apache2&#8242; закоментираме всичко и добавяме следните два реда:</p>
<blockquote><p>auth required pam_ldap.so<br />
account required pam_permit.so</p></blockquote>
<p>Във файла &#8216;/etc/pam_ldap.conf&#8217; закоментираме всичко и добавяме следните редове:</p>
<blockquote><p>host ldap.domain.com<br />
base dc=domain,dc=com<br />
binddn username@domain.com<br />
bindpw password<br />
port 3268<br />
scope sub<br />
pam_filter objectclass=*<br />
pam_login_attribute sAMAccountName</p></blockquote>
<p>Конфигурацията е аналогична с варианта с mod_auth_ldap. &#8216;host&#8217; трябва да сочи към Windows хоста, &#8216;binddn&#8217; и &#8216;bindpw&#8217; съдържат активни потребителско име и парола от активната директория, като потребителското име е от вида &#8216;username@domain.com&#8217;. За порт пак ползваме порта на Global Catalog-а.<br />
След рестартиране на Apache-то:</p>
<p><code>/etc/init.d/apache2 restart</code></p>
<p>вече всичко би трябвало да работи и адреса &#8222;http://the_linux_box/pam_test&#8220; да ни удостовери с валиден потребител към активната директория.</p>
<p><em>ToDo: Да се провери за възможност да се имплементира аутентикация по принадлежност към група.</em></p>
<p><strong>Вариант III &#8211; ползване на mod_auth_kerb</strong></p>
<p>За да ползваме  удостоверяване чрез Kerberos първо трябва да направим няколко неща на Windows сървъра.<br />
Първото нещо е да добавим хоста на Apache сървъра към DNS-а на Windows сървъра. Трябва да създадем A-запис за линукс машината, например ubuntu.domain.com, който да сочи към IP адреса на Apache сървъра. След това трябва да създадем т.н. kerberos ticket, с който ще извършваме аутентикацията. Командата, която трябва да изпълним в Windows от команден ред е следната:</p>
<p><code>ktpass -princ HTTP/ubuntu.domain.com@DOMAIN.COM -mapuser DOMAIN\username -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapop set +desonly -pass password -out C:\keytab</code></p>
<p>Съответно заменяме &#8216;ubuntu.domain.com&#8217; и &#8216;DOMAIN.COM&#8217; с тези в нашата структура, а за &#8216;DOMAIN\username&#8217; и &#8216;password&#8217; използваме активен потребител от активната директория. След това трябва да копираме файла keytab някъде на линукс машината, например в &#8216;/etc/apache2/auth&#8217; и да рестриктираме правата върху него, така че само Apache сървъра да има достъп:</p>
<p><code>chown www-data.www-data /etc/apache2/auth/keytab<br />
chmod 400 /etc/apache2/auth/keytab</code></p>
<p>На Apache сървъра инсталираме mod-auth-kerb и krb5-config, ако вече нямаме инсталирани:</p>
<p><code>apt-get install libapache2-mod-auth-kerb krb5-config</code></p>
<p>Файлът  &#8216;/etc/krb5.conf&#8217; трябва да съдържа следното:</p>
<blockquote><p>[libdefaults]<br />
    &nbsp;&nbsp;&nbsp;&nbsp;default_realm = DOMAIN.COM<br />
[realms]<br />
     &nbsp;&nbsp;&nbsp;&nbsp;DOMAIN.COM = {<br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;admin_server = kdc.domain.com<br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kdc = kdc.domain.com<br />
     &nbsp;&nbsp;&nbsp;&nbsp;}</p></blockquote>
<p>Като трябва да замените &#8216;DOMAIN.COM&#8217; с името на домейна във вашата структура, а вместо &#8216;kdc.domain.com&#8217; да сложите хоста на Windows сървъра.</p>
<p>Създаваме директория, за която ще искаме удостоверяване:</p>
<p><code>mkdir /var/www/krb_test</code></p>
<p>и я описваме в конфигурацията на apache:</p>
<p><code>touch /etc/apache2/conf.d/krb_test</code></p>
<p>Файлът &#8216;/etc/apache2/conf.d/krb_test&#8217; трябва да съдържа следното:</p>
<blockquote><p>&lt;Directory /var/www/krb_test&gt;<br />
  &nbsp;&nbsp;&nbsp;&nbsp;AuthType Kerberos<br />
  &nbsp;&nbsp;&nbsp;&nbsp;AuthName &#8222;KERBEROS&#8220;<br />
  &nbsp;&nbsp;&nbsp;&nbsp;KrbServiceName HTTP<br />
  &nbsp;&nbsp;&nbsp;&nbsp;KrbMethodNegotiate On<br />
  &nbsp;&nbsp;&nbsp;&nbsp;KrbMethodK5Passwd On<br />
  &nbsp;&nbsp;&nbsp;&nbsp;KrbAuthRealms DOMAIN.COM<br />
  &nbsp;&nbsp;&nbsp;&nbsp;Krb5KeyTab /etc/apache2/auth/keytab<br />
  &nbsp;&nbsp;&nbsp;&nbsp;require valid-user<br />
&lt;&#47;Directory&gt;</p></blockquote>
<p>като съответно заменяме &#8216;DOMAIN.COM&#8217; с нашия домейн.<br />
След рестартиране на Apache-то:</p>
<p><code>/etc/init.d/apache2 restart</code></p>
<p>вече всичко би трябвало да работи и адреса &#8222;http://the_linux_box/krb_test&#8220; да ни удостовери с валиден потребител към активната директория.</p>
<p><em>ToDo: Да се провери за възможност да се имплементира аутентикация по принадлежност към група.</em></p>
<p><strong>Вариант IV &#8211; ползване на mod_auth_imap</strong></p>
<p>Това не е точно удостоверяване към активната директория, защото се прави удостоверяване към IMAP сървъра на Windows-а, но може да свърши работа, ако имаме инсталиран Microsoft Exchange Server и потребителите, които удостоверяваме имат активни пощенски кутии на Exchange-а. Тук удостоверяването става по следния начин &#8211; потребителите подават към Apache-то потребителско име и парола, а Apache-то от своя страна пробва да се свърже с тях към IMAP сървъра. Ако IMAP сървъра удостовери потребителя, то и Apache-то от своя страна го удостоверява.</p>
<p>На Apache-то ще ползваме mod_auth_imap и тъй като единствената дистрибуция, който има пакет за него е Mandriva 2007 ще го свалим и компилираме от <a href="http://ben.brillat.net/projects/mod_auth_imap">официалната му станица</a>, но първо за да го компилираме ще ни трябва dev пакета на Apache сървъра:</p>
<p><code>apt-get install apache2-threaded-dev</code></p>
<p>след това ще компилираме и инсталираме mod_auth_imap:</p>
<p><code>cd /tmp<br />
wget http://ben.brillat.net/files/projects/mod_auth_imap2/\<br />
mod_auth_imap2-current.tar.gz<br />
tar xzf mod_auth_imap2-current.tar.gz<br />
cd mod_auth_imap2-x.x.x<br />
apxs2 -i -a -c mod_auth_imap.c</code></p>
<p>Създаваме директория, за която ще искаме удостоверяване:</p>
<p><code>mkdir /var/www/imap_test</code></p>
<p>и я описваме в конфигурацията на apache:</p>
<p><code>touch /etc/apache2/conf.d/imap_test</code></p>
<p>Файлът &#8216;/etc/apache2/conf.d/imap_test&#8217; трябва да съдържа следното:</p>
<blockquote><p>&lt;Directory /var/www/imap_test&gt;<br />
  &nbsp;&nbsp;&nbsp;&nbsp;Auth_IMAP_Enabled on<br />
  &nbsp;&nbsp;&nbsp;&nbsp;AuthName &#8222;IMAP&#8220;<br />
  &nbsp;&nbsp;&nbsp;&nbsp;AuthType Basic<br />
  &nbsp;&nbsp;&nbsp;&nbsp;Require valid-user<br />
  &nbsp;&nbsp;&nbsp;&nbsp;Auth_IMAP_Authoritative on<br />
  &nbsp;&nbsp;&nbsp;&nbsp;Auth_IMAP_Server imap.domain.com<br />
  &nbsp;&nbsp;&nbsp;&nbsp;Auth_IMAP_Port 143<br />
  &nbsp;&nbsp;&nbsp;&nbsp;Auth_IMAP_Log on<br />
&lt;&#47;Directory&gt;</p></blockquote>
<p>като за &#8216;imap.domain.com&#8217; слагаме IMAP сървъра, а в &#8216;Auth_IMAP_Port&#8217; &#8211; IMAP порта.<br />
След рестартиране на Apache-то:</p>
<p><code>/etc/init.d/apache2 restart</code></p>
<p>вече всичко би трябвало да работи и адреса &#8222;http://the_linux_box/imap_test&#8220; да ни удостовери с валиден потребител към активната директория.</p>
<p>Ако ползвате mod_auth_pam и mod_auth_imap едновременно, добавете реда &#8216;AuthPAM_Enabled off&#8217; в конфигурацията за директорията, за да забраните pam аутентикацията за тази директория, защото в противен случай ако pam модула се зарежда преди imap модула, то Apache-то винаги ще ползва удостоверяване чрез pam.<br />
Тук няма вариант за имплементиране на удостоверяване по принадлежност към група.</p>
<p><em>ToDo: Всички конфигурации позволяват единствено ползване на потребителско име от вида &#8216;username&#8217;, но не и от вида &#8216;DOMAIN\username&#8217; или &#8216;username@domain.com&#8217;. Да се провери за възможност това да се имплементира.</em></p>
<p>За неточности, забележки и всякакви мнения ползвайте коментарите.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muffty.org/44/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

