Apache + Kerberos + LDAP + PHP на архитектуре sparc 64



От автора

На просторах рунета очень мало русскоязычной документации по настройке и сборке программ, и иногда приходится просмотреть кучу всевозможной инфы, в поисках мало-мальски достойного HOW-TO. Спасибо тем людям которые собирают крохи информации и объединяют их в хорошие, понятные мануалы. Как говорится респект им и уважуха. Вот я решил поделится своим опытом. Может то, что собрал, поможет пусть не всем, но многим.

Благодарности

Выражаю особую благодарность Морозову Алексею и Александре (aka Pandora) за правку, дополнения и багрепорт статьи.

Введение

Все чаще и чаще приходится сталкиваться с тем, что новые приложения требуют решения на 64 битных платформах, но к сожалению, так сложилось, по крайней мере для Solaris, что все пакеты которые выкладываются 32-х разрядные(в частности sunfreeware.com все пакеты 32-х разрядные). Поэтому пришлость долго компилить все зависимости и утилиты вручную.

Что имеем

Sun Solaris 10 5/08
Cервер на SPARC архитектуре

Установка переменных, которые будут использоваться

export CC=gcc
export CFLAGS="-des -Duse64bitall"
export LDFLAGS="-mcpu=v9 -m64"
export LDDLFLAGS="-mcpu=v9 -m64" -тип процессора и опция 64-х разрядной компиляции
export BAP=/future_apache_directory - куда будем устанавливать апач
export PREFIX=/future_packets_directory - куда будут помещатся скомпилинные зависимости
export SOURCE=/source_path - директория где содержаться наши сырцы

Установка Apache

Для начала мы должны опредилится, что нам требуется от Apache. Мне нужно что бы он поддерживал Kerberos, LDAP, балансировку и проксирование. Поэтому зависимости Apache сводятся к следующему списку

expat, libiconv, openldap, zlib, openssl, libgcc, gcc, kerberos

Два пакета, это libgcc и gcc, содержат в себе 64 битные версии библиотек, поэтому компилить их не надо. Хоть немного счастья:

ZLIB

gmake distclean
./configure \
--prefix=/PREFIX/zlib
gmake
gmake install

EXPAT

gmake distclean
./configure \
--prefix=/PREFIX/expat_path \
--enable-shared \
--disable-static
gmake
gmake install

LIBICONV

gmake distclean

./configure \
--prefix=/PREFIX/libiconv_path \
--enable-shared \
--disable-static
gmake
gmake install

OPENLDAP

gmake distclean
./configure \
--prefix=/PREFIX/ldap_path \
--enable-syslog \
--with-tls-openssl \
--without-cyrus-sasl
gmake
gmake install

KERBEROS

Я использовал исходники кербероса от MIT (web.mit.edu/Kerberos/dist)

gmake distclean
./configure \
--prefix=/PREFIX/krb_path\
--without-krb4 \
--enable-maintainer-made \
--sysconfdir=/etc/krb5 \
--with-krb5 \
--with-ldap
gmake
gmake install

Ну вот мы и подошли к компиляции Апача.
Для начала нужно скомпилить две утилиты, которые находятся в дистрибутиве Апача.

cd SOURCE/apache/srclib

Утилита arp

cd srclib/apr
gmake distclean
./configure --prefix=$BAP --enable-threads
gmake
gmake install

Утилита arp-util

cd ../apr-util
gmake distclean
./configure --prefix=$BAP \
--with-ldap \
--with-ldap-lib=/PREFIX/ldap/lib \
--with-ldap-include=/PREFIX/ldap/include \
--with-iconv=/PREFIX/iconv \
--with-expat=/PREFIX/expat \
--with-apr=$BAP
gmake
gmake install

Теперь конфигурим и собираем апач:
cd ../../
gmake distclean
./configure \
--enable-maintainer-mode \
--prefix=$BAP \
--disable-auth-digest \
--without-perl \
--with-z=/PREFIX/zlib \
--with-iconv=/PREFIX/iconv \
--with-expat=/PREFIX/expat \
--with-apr=$BAP \
--with-apr-util=$BAP \
--with-ssl=/PREFIX/ssl \
--enable-ldap \
--enable-proxy \
--enable-proxy-connect \
--enable-proxy-ftp \
--enable-proxy-http \
--enable-proxy-balancer \
--enable-ssl \
--enable-authnz-ldap \
--enable-krb5=/PREFIX/kerberos \
--enable-modules="all" \
--enable-mods-shared="all"
gmake
gmake install
Ура Апач скомпилен, но нужно сделать еще один шаг - скомпилить модуль апача для работы с керберосом:

KERBEROS for APACHE

(http://modauthkerb.sourceforge.net/install.html)
gmake distclean
./configure \
--prefix=/PREFIX/kerberos\
--without-krb4 \
--with-apache=$BAP \
--with-krb5
gmake
gmake install

Настройка Апач + Kerberos + LDAP

в http.conf

############################## KERBEROS
KrbMethodK4Passwd off #выключаем авторизацию кербероса 4
KrbAuthoritative On - если не прошла проверка авторизации то запретить доступ(если опция ставится в офф, то управление передается следующему модулю)

AuthName "Kerberos Login"
AuthType Kerberos
Krb5Keytab /usr/local/proxy/conf/http_keytab.keytab - о кейтабах чуть ниже)
KrbServiceName "HTTP/FULL_NAME_SERVER@DOMAIN_SERVER_NAME" - имя сервиса в домене
KrbAuthRealm DOMAIN_SERVER_NAME
KrbMethodNegotiate On -включение прозрачной авторизации
KrbDelegateBasic On
KrbSaveCredentials On
KrbVerifyKDC Off

########################## END KERBEROS
############################## LDAP

AuthzLDAPAuthoritative On
AuthLDAPURL "ldap://domain_ip_address:389/DC=DOMAIN,DC=RU?userPrincipalName?sub?(objectClass=*)" NONE
Если используете модуль NTLM то используйте вместо userPrincipalName sAMAccountName
AuthLDAPURL "ldap://domain_ip_address:389/DC=DOMAIN,DC=RU?sAMAccountName?sub?(objectClass=*)" NONE

AuthLDAPBindDN "CN=user,OU=Support,OU=Organization Structure,DC=domain,DC=ru" - полное имя юзера для подключения к домену
AuthLDAPBindPassword password - пароль оного юзера
AuthLDAPGroupAttributeIsDN on
AuthLDAPGroupAttribute member
#Require valid-user
Require ldap-group CN=group,DC=domain,DC=ru - проверка принадлежности к группе
########################## END LDAP

Создания кейтабов

Все приведенные команды выполняются на контролерре домена(у меня он Windows)
ktpass -princ host/FULL_NAME_SERVER@DOMAIN_SERVER_NAME -mapuser host@DOMAIN_NAME \
-crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapop set +desonly -pass passwd -out c:\host.keytab - кейтаб для хоста

ktpass -princ HTTP/FULL_NAME_SERVER@DOMAIN_NAME -mapuser http@DOMAIN__NAME \
-crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapop set +desonly -pass passwd -out c:\http.keytab - кейтаб для сервиса

setspn.exe -A HTTP/FULL_NAME_SERVER@DOMAIN_NAME http - добавляем сервис

так же требуется создания юзера с минимальными правами для подключения LDAP:

в krb5.conf

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
krb = SYSLOG:INFO:DAEMON
krb = FILE:/usr/local/proxy/logs/krb.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
ticket_lifetime = 24000
default_realm = DOMAIN_NAME - обязательно большими буквами
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
MEGAFONDV.RU = {
kdc = first_dc.DOMAIN_NAME
kdc = second_dc.DOMAIN_NAME
admin_server = first_dc.DOMAIN_NAME
default_domain = DOMAIN_NAME }
[domain_realm]
.domain.ru = DOMAIN_NAME
domain.ru = DOMAIN_NAME
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
#[kdc]
# profile = /var/kerberos/krb5kdc/kdc.conf

в ldap.conf

#
# LDAP Defaults
#
# See ldap.conf(5) for details
# This file should be world readable but not world writable.
#BASE dc=example, dc=com
#URI ldap://ldap.example.com ldap://ldap-master.example.com:666
#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never
BASE DC=DOMAIN,DC=RU
URI ldap://domain_ip_address
REFERRALS off
searchmode:OS
ldapservers:omain_ip_address
binddn:CN=user,CN=Users,DC=DOMAIN,DC=RU
bindpwd:password
userbasedn:CN=Users,DC=DOMAIN,DC=RU
Все на этом на этом авторизация работает, переходим к сборке PHP

Установка PHP

Если для апача было не много зависимостей, то PHP его в этом дела опережает на порядок. Мне нужно что бы PHP работал с oracle, графикой(GD), xml и перенаправлял запросы(CURL), поэтому список зависимостей следующий:
expat, oracle, zlib, libiconv, curl, png, jpeg, freetype, xml2, gd
Компиляцию некоторых пакетов описана выше, поэтому описывать их не буду.

CURL

./configure \
--prefix=/PREFIX/curl \
--with-iconv=/PREFIX/iconv \
--with-zlib=/PREFIX/zlib \
--enable-shared \
--disable-static
gmake
gmake install

FREETYPE2

gmake distclean
./configure \
--prefix=/PREFIX/freetype \
--enable-shared \
--disable-static
gmake
gmake install

PNG

gmake distclean
./configure \
--prefix=/PREFIX/png \
--enable-shared \
--disable-static
gmake
gmake install

JPEG

gmake distclean
./configure \
--prefix=/PREFIXjpeg \
--enable-shared \
--disable-static
gmake
gmake install

XML

./configure \
--prefix=/PREFIX/xml2 \
--with-iconv=/PREFIX/iconv \
--with-zlib=/PREFIX/zlib \
--enable-shared \
--disable-static
gmake
gmake install

GPG (графика)

gmake distclean
./configure \
--prefix=/PREFIX/gp \
--with-free-type=/PREFIX/freetype \
--with-jpeg=/PREFIX/jpeg \
--with-png=/PREFIX/png \
--without-x \
--without-xpm
gmake
gmake install
Теперь можно переходить к сборке PHP:
./configure \
--with-apxs2=$BAP/bin/apxs \
--with-config-file-path=$BAP/conf \
--prefix=/PREFIX/php \
--with-zlib=/PREFIX/z \
--with-zlib-dir=/PREFIX/z \
--with-iconv=/PREFIX/iconv \
--disable-dba \(убрать если есть oci8)
--with-curl=/PREFIX/curl \
--with-png-dir=/PREFIX/png \
--with-jpeg-dir=/PREFIX/jpeg \
--with-freetype-dir=/PREFIX/freetype \
--with-libxml-dir=/PREFIX/xml2 \
--with-ttf \
--with-oci8=/PREFIX/oracle \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--with-gd 2>&1 | tee configure.log
make && make install

Все. PHP собран. Теперь осталось только скопировать модуль php в директорию апача и подключить его. Настройки PHP, виртуальных хостов я рассматривать не буду, об этом и так много статей написано.
PS с керберосом бывают проблемы в плане обнаружения библиотек, будьте внимательны и прописывайте LD_LIBRARY_PATH
Спасибо за внимание. Надеюсь эта статья поможет страждущим:)

С Уважением, Ковальчук Егор.
19.01.2009



www.leo-fender.narod.ru

Рейтинг@Mail.ru