Настройка LDAP-клиента под Solaris
Date September 7th, 2011 Author Vitaly Agapov
Рассмотрим, как интегрировать Solaris с директорией каталогов. То есть настроим LDAP-клиента, который позволит нам производить авторизацию пользователей и создавать домашние директории для тех, кто логинится впервые. Всё это осуществляется с помощью модуля PAM_ldap, но с некоторыми особенностями, способными поставить в тупик человека, который уже настраивал LDAP-клиентов под Linux.
Итак, где-то уже стоит OpenLDAP-сервер. Мы знаем uid и пароль пользователя с доступом к нужным веткам каталога. Начнём.
1. Подготовка LDAP-сервера.
Для LDAP-клиента под Solaris надо предусмотреть несколько вещей. Во-первых, LDAP-клиент перед тем, как забиндиться на сервер, будет спрашивать у него атрибуты из dn.base (supportedSASLMechanisms и supportedControl). Поэтому надо проверить, что ldap-сервер эти атрибуты нормально отдаёт:
$ ldapsearch -x -b "" -s base -h 172.17.0.16 '(objectclass=*)' supportedSASLMechanisms supportedControl supportedControl: 1.3.6.1.1.13.1 supportedControl: 1.3.6.1.1.12 supportedSASLMechanisms: NTLM supportedSASLMechanisms: DIGEST-MD5 supportedSASLMechanisms: CRAM-MD5
За эту фичу OpenLDAP отвечает строчка в slapd.conf:
access to dn.base="" by * read
Во-вторых, надо удостовериться, что у пользователей в каталоге присутствует objectClass shadowAccount. Без него пользователь залогиниться не сможет.
2. Настройка LDAP-клиента
Конфигурирование ldap-клиента производится командой:
ldapclient manual -v \ -a credentialLevel=proxy \ -a defaultsearchbase=dc=example,dc=com \ -a proxyDN=uid=manager,dc=example,dc=com \ -a proxyPassword=our_secret_password \ -a authenticationMethod=simple \ -a defaultServerList=<server_addr>
Он сам сделает все настройки, поправит файлы. Главное – в выхлопе смотреть, чтобы не было ошибок. Резервные копии конфигов он скинет в /var/ldap/restore/
# getent passwd ... test:x:10009:9100::/home/test:/bin/bash ...
Правим строчку в /etc/nsswitch.conf:
hosts: dns [NOTFOUND=return] files
Да и вообще в /etc/nsswitch.conf лучше убрать ldap отовсюду кроме passwd и group.
Для возможности дебага прописать в /etc/syslog.conf:
auth.debug /var/log/authlog
3. Автосоздание домашней директории
Дальше – самое интересное. Если нужно автосоздание домашней директории, то придётся компилить линуксовый pam_mkhomedir, так как чуваки из Sun портировать его или делать аналог не хотят. Но так как у нас атрибут homeDirectory в LDAP’е прописан в расчёте на нормальные системы, то есть в виде /home/username, а Солярка в /home/ создавать директории не даёт и а хомяки хранит по умолчанию в /export/home, то придётся перед компилированием залезть внутрь.
wget http://www.kernel.org/pub/linux/libs/pam/pre/library/Linux-PAM-0.81.tar.bz2 bzip2 -d Linux-PAM-0.81.tar.bz2 tar -xvf Linux-PAM-0.81.tar cd Linux-PAM-0.81 vi modules/pam_mkhomedir/pam_mkhomedir.c
Здесь ищем определение функции static int create_homedir и вставляем в самое начало функции:
char newdest[BUFSIZ]; snprintf(newdest, sizeof(newdest), "/export%s", dest);
Затем надо поменять
if (snprintf(remark,sizeof(remark),"Creating directory '%s'.", dest) == -1)
на
if (snprintf(remark,sizeof(remark),"Creating directory '%s'.", newdest) == -1)
и
if (rec_mkdir (dest,0755) != 0) { _log_err(LOG_DEBUG, "unable to create directory %s",dest); return PAM_PERM_DENIED; }
на
if (rec_mkdir (newdest,0755) != 0) { _log_err(LOG_DEBUG, "unable to create directory %s",newdest); return PAM_PERM_DENIED; }
Поехали дальше.
./configure cp _pam_aconf.h libpam/include/security cd modules/pammodutil gcc -c -O2 -D_REENTRANT -DPAM_DYNAMIC -Wall -fPIC -I../../libpam/include gcc -c -O2 -D_REENTRANT -DPAM_DYNAMIC -Wall -fPIC -I../../libpam/include -I../../libpamc/include -Iinclude modutil_cleanup.c gcc -c -O2 -D_REENTRANT -DPAM_DYNAMIC -Wall -fPIC -I../../libpam/include -I../../libpamc/include -Iinclude modutil_ioloop.c gcc -c -O2 -D_REENTRANT -DPAM_DYNAMIC -Wall -fPIC -I../../libpam/include -I../../libpamc/include -Iinclude modutil_getpwnam.c -D_POSIX_PTHREAD_SEMANTICS cd ../pam_mkhomedir gcc -c -O2 -D_REENTRANT -DPAM_DYNAMIC -Wall -fPIC -I../../libpam/include -I../../libpamc/include -I../pammodutil/include pam_mkhomedir.c ld -o pam_mkhomedir.so -B dynamic -G -lc pam_mkhomedir.o ../pammodutil/modutil_*.o cp pam_mkhomedir.so /usr/lib/security/pam_mkhomedir.so.1 cd /usr/lib/security/ ln -s pam_mkhomedir.so.1 pam_mkhomedir.so
Прописываем модуль в /etc/pam.conf:
other session required pam_mkhomedir.so skel=/etc/skel umask=0022
Настравиваем autofs на монтирование хомяка из /export/home/username в /home/username, чтобы ldap’овый пользователь нормально работал. В /etc/auto_master:
+auto_master /net -hosts -nosuid,nobrowse /home auto_home -nobrowse
В /etc/auto_home:
+auto_home * localhost:/export/home/&
И запускаем autofs:
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: LDAP, Solaris
Category:
Solaris |
1 Comment »
12 July 2013 - 5:00
спасибо за №4