Настройка LDAP-клиента под Solaris

Date September 7th, 2011 Author Vitaly Agapov

Тому, кто станет тщательно изучать всевозможные данные о планете Солярис, трудно избавиться от впечатления, что перед ним обломки интеллектуальных построений, быть может и гениальных, перемешанные как попало с плодами полнейшей, граничащей с безумием глупости.

– Станислав Лем «Солярис»

solaris ldap
Рассмотрим, как интегрировать Solaris с директорией каталогов. То есть настроим LDAP-клиента, который позволит нам производить авторизацию пользователей и создавать домашние директории для тех, кто логинится впервые. Всё это осуществляется с помощью модуля PAM_ldap, но с некоторыми особенностями, способными поставить в тупик человека, который уже настраивал LDAP-клиентов под Linux.

Итак, где-то уже стоит OpenLDAP-сервер. Мы знаем uid и пароль пользователя с доступом к нужным веткам каталога. Начнём.

1. Подготовка LDAP-сервера.

Для LDAP-клиента под Solaris надо предусмотреть несколько вещей. Во-первых, LDAP-клиент перед тем, как забиндиться на сервер, будет спрашивать у него атрибуты из dn.base (supportedSASLMechanisms и supportedControl). Поэтому надо проверить, что ldap-сервер эти атрибуты нормально отдаёт:

1.$ ldapsearch -x -b "" -s base -h 172.17.0.16 '(objectclass=*)' supportedSASLMechanisms supportedControl
2.supportedControl: 1.3.6.1.1.13.1
3.supportedControl: 1.3.6.1.1.12
4.supportedSASLMechanisms: NTLM
5.supportedSASLMechanisms: DIGEST-MD5
6.supportedSASLMechanisms: CRAM-MD5

За эту фичу OpenLDAP отвечает строчка в slapd.conf:

1.access to dn.base="" by * read

Во-вторых, надо удостовериться, что у пользователей в каталоге присутствует objectClass shadowAccount. Без него пользователь залогиниться не сможет.

2. Настройка LDAP-клиента

Конфигурирование ldap-клиента производится командой:

1.ldapclient manual -v \
2.-a credentialLevel=proxy \
3.-a defaultsearchbase=dc=example,dc=com \
4.-a proxyDN=uid=manager,dc=example,dc=com \
5.-a proxyPassword=our_secret_password \
6.-a authenticationMethod=simple \
7.-a defaultServerList=<server_addr>

Он сам сделает все настройки, поправит файлы. Главное – в выхлопе смотреть, чтобы не было ошибок. Резервные копии конфигов он скинет в /var/ldap/restore/

1.# getent passwd
2....
3.test:x:10009:9100::/home/test:/bin/bash
4....

Правим строчку в /etc/nsswitch.conf:

1.hosts:      dns [NOTFOUND=return] files

Да и вообще в /etc/nsswitch.conf лучше убрать ldap отовсюду кроме passwd и group.

Для возможности дебага прописать в /etc/syslog.conf:

1.auth.debug /var/log/authlog

3. Автосоздание домашней директории

Дальше – самое интересное. Если нужно автосоздание домашней директории, то придётся компилить линуксовый pam_mkhomedir, так как чуваки из Sun портировать его или делать аналог не хотят. Но так как у нас атрибут homeDirectory в LDAP’е прописан в расчёте на нормальные системы, то есть в виде /home/username, а Солярка в /home/ создавать директории не даёт и а хомяки хранит по умолчанию в /export/home, то придётся перед компилированием залезть внутрь.

2.bzip2 -d Linux-PAM-0.81.tar.bz2
3.tar -xvf Linux-PAM-0.81.tar
4.cd Linux-PAM-0.81
5.vi modules/pam_mkhomedir/pam_mkhomedir.c

Здесь ищем определение функции static int create_homedir и вставляем в самое начало функции:

1.char newdest[BUFSIZ];
2.snprintf(newdest, sizeof(newdest), "/export%s", dest);

Затем надо поменять

1.if (snprintf(remark,sizeof(remark),"Creating directory '%s'.", dest) == -1)

на

1.if (snprintf(remark,sizeof(remark),"Creating directory '%s'.", newdest) == -1)

и

1.if (rec_mkdir (dest,0755) != 0)
2.{
3._log_err(LOG_DEBUG, "unable to create directory %s",dest);
4.return PAM_PERM_DENIED;
5.}

на

1.if (rec_mkdir (newdest,0755) != 0)
2.{
3._log_err(LOG_DEBUG, "unable to create directory %s",newdest);
4.return PAM_PERM_DENIED;
5.}

Поехали дальше.

01../configure
02.cp _pam_aconf.h libpam/include/security cd modules/pammodutil
03.gcc -c -O2 -D_REENTRANT -DPAM_DYNAMIC -Wall -fPIC -I../../libpam/include
04.gcc -c -O2 -D_REENTRANT -DPAM_DYNAMIC -Wall -fPIC -I../../libpam/include -I../../libpamc/include -Iinclude modutil_cleanup.c
05.gcc -c -O2 -D_REENTRANT -DPAM_DYNAMIC -Wall -fPIC -I../../libpam/include -I../../libpamc/include -Iinclude modutil_ioloop.c
06.gcc -c -O2 -D_REENTRANT -DPAM_DYNAMIC -Wall -fPIC -I../../libpam/include -I../../libpamc/include -Iinclude modutil_getpwnam.c -D_POSIX_PTHREAD_SEMANTICS
07.cd ../pam_mkhomedir
08.gcc -c -O2 -D_REENTRANT -DPAM_DYNAMIC -Wall -fPIC -I../../libpam/include -I../../libpamc/include -I../pammodutil/include pam_mkhomedir.c
09.ld -o pam_mkhomedir.so -B dynamic -G -lc pam_mkhomedir.o ../pammodutil/modutil_*.o
10.cp pam_mkhomedir.so /usr/lib/security/pam_mkhomedir.so.1
11.cd /usr/lib/security/
12.ln -s pam_mkhomedir.so.1 pam_mkhomedir.so

Прописываем модуль в /etc/pam.conf:

1.other session required pam_mkhomedir.so skel=/etc/skel umask=0022

Настравиваем autofs на монтирование хомяка из /export/home/username в /home/username, чтобы ldap’овый пользователь нормально работал. В /etc/auto_master:

1.+auto_master /net            -hosts          -nosuid,nobrowse /home           auto_home       -nobrowse

В /etc/auto_home:

1.+auto_home * localhost:/export/home/&

И запускаем autofs:

1.svcadm enable autofs

4. Sudo

Если после установки sudo и правки /usr/local/etc/sudoers попытки выполнить команду приводят к ошибкам:

$ sudo bash ld.so.1: sudo: fatal: relocation error: file /usr/lib/security/pam_mkhomedir.so: symbol pam_get_item: referenced symbol not found

То в /etc/pam.conf надо создать новую секцию для sudo без подключения модуля pam_mkhomedir.so:

sudo session required pam_unix_session.so.1

Tags: ,
Category: Solaris | 1 Comment »

Comments

Один комментарий на “Настройка LDAP-клиента под Solaris”

  1. non7top

    спасибо за №4

Leave a comment

 Comment Form 

Rich Text Editor, comment