Настройка 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-сервер эти атрибуты нормально отдаёт:
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: LDAP, Solaris
Category:
Solaris |
1 Comment »
12 July 2013 - 5:00
спасибо за №4