Ubuntu on Garfeild

HOWTO Gentoo, OpenLDAP, Automounter.

Введение

По просьбам (а если быть точным, одной просьбе) я решил написать HOWTO по установке и настройке OpenLDAP сервера на базе Gentoo GNU/Linux. Многие подходы в данном HOWTO работоспособных для других версий GNU/Linux.
На картинке приведена топология домена. В качестве машины, на которой проводилась настройка, в тексте HOWTO выступает машина с именем kitty-house и IP-адресом 192.168.1.5.

Серверная часть.

OpenLDAP

Все начинается с установки необходимых пакетов:


~ # emerge  -av net-nds/openldap sys-auth/pam_ldap sys-auth/nss_ldap

После того, как установятся необходимы пакеты начинается настройка OpenLDAP.

Первое, что нужно сделать, это сгенерировать хэш пароля для админа:


~ # slappasswd

Следующим шагом будет редактирование конфига /etc/openldap/slapd.conf. Ниже приведен конфиг, который используется на моем серверо-десктопе. Желательно не заменять им существующий файл, а именно редактировать, потому что некоторые дефолтные настройки и объяснения в комментариях пропущены.


#Здесь добавляются необходимые файлы *.schema,
#содержащие в себе описания соотношения атребутов и классов.
include		/etc/openldap/schema/core.schema
include		/etc/openldap/schema/corba.schema
include		/etc/openldap/schema/cosine.schema
include		/etc/openldap/schema/dyngroup.schema
include		/etc/openldap/schema/misc.schema
include		/etc/openldap/schema/nis.schema

pidfile		/var/run/openldap/slapd.pid
argsfile	/var/run/openldap/slapd.args

# Load dynamic backend modules:
 modulepath	/usr/lib/openldap/openldap
 moduleload	back_hdb.so

#Настройка доступа к базе.
 access to dn.base="" by * read
 access to dn.base="cn=Subschema" by * read
 access to *
	by self write
	by users read
	by anonymous auth

#Выбираем драйвер базы.
database    bdb
#Имя домена
suffix		"dc=kitty-domain,dc=com"
checkpoint	32	30 #
#Имя админа. Внимание! Не следует использовать
#имя root в качестве имени админа в целях безопасности.
rootdn		"cn=admin,dc=kitty-domain,dc=com"

rootpw      #Сюда следует добавить сгенерированный хэш пароля для админа

# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory	/var/lib/openldap-data
# Indices to maintain
index	objectClass	eq

Далее изменяем настройки в файле /etc/openldap/ldap.conf. Ниже опять приведен мой рабочий конфиг. Вместо IP можно указать имя хоста, например, kitty-house, но тогда в случае отсутствия сервера DNS в сети, должен быть изменен соответствующим образом файл /etc/hosts.


#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

BASE	dc=kitty-domain, dc=com
HOST    192.168.1.5
URI	ldap://192.168.1.5 

#SIZELIMIT	12
#TIMELIMIT	15
#DEREF		never

Следующим шагом будет создание конфигурационного файла базы данных. Это делается очень просто:


~ # cp /var/lib/openldap-data/DB_CONFIG.example /var/lib/openldap-data/DB_CONFIG

Перед запуском сервера необходимо проверить, что все конфигурационные файлы, файлы schema и база данных имеют верные права доступа:


~ # ls -l /etc/openldap/
итого 32
-rw------- 1 root root  921 Авг 16 02:10 DB_CONFIG.example
-rw-r--r-- 1 root root  230 Авг 16 03:22 ldap.conf
-rw-r--r-- 1 root root  246 Авг 16 02:09 ldap.conf.default
-r-------- 1 root root    8 Авг 17 00:03 ldap_passwd
drwxr-xr-x 2 root root 4096 Авг 16 02:15 schema
-rw-r----- 1 root ldap 2682 Авг 16 02:29 slapd.conf
-rw-r----- 1 root ldap 2309 Авг 16 02:15 slapd.conf.default
drwxr-xr-x 2 root root 4096 Авг 16 02:16 ssl
~ # ls -l /etc/openldap/schema/
итого 208
-r--r--r-- 1 root root  8231 Авг 16 02:10 corba.schema
-r--r--r-- 1 root root 20591 Авг 16 02:10 core.ldif
-r--r--r-- 1 root root 19762 Авг 16 02:10 core.schema
-r--r--r-- 1 root root 74080 Авг 16 02:10 cosine.schema
-r--r--r-- 1 root root  1553 Авг 16 02:10 dyngroup.schema
-r--r--r-- 1 root root  6360 Авг 16 02:10 inetorgperson.schema
-r--r--r-- 1 root root 13984 Авг 16 02:11 java.schema
-r--r--r-- 1 root root  2471 Авг 16 02:11 misc.schema
-r--r--r-- 1 root root  7723 Авг 16 02:11 nis.schema
-r--r--r-- 1 root root  3391 Авг 16 02:10 openldap.ldif
-r--r--r-- 1 root root  1601 Авг 16 02:11 openldap.schema
-r--r--r-- 1 root root 19689 Авг 16 02:11 ppolicy.schema
-r--r--r-- 1 root root  2968 Авг 16 02:10 README
~ # ls -l /var/lib/ |grep openldap
drwx------  2 ldap      ldap      4096 Авг 16 02:30 openldap-data
~ # ls -l /var/lib/openldap-data/
итого 788
-rw-r--r-- 1 ldap ldap     4096 Авг 18 03:33 alock
-rw------- 1 ldap ldap    24576 Авг 16 02:29 __db.001
-rw------- 1 ldap ldap   155648 Авг 16 02:29 __db.002
-rw------- 1 ldap ldap   270336 Авг 16 02:29 __db.003
-rw------- 1 ldap ldap    98304 Авг 16 02:29 __db.004
-rw------- 1 ldap ldap   352256 Авг 16 02:29 __db.005
-rw------- 1 ldap ldap    24576 Авг 16 02:29 __db.006
-rw------- 1 root root      921 Авг 16 02:29 DB_CONFIG
-rw------- 1 root root      921 Авг 16 02:10 DB_CONFIG.example
-rw------- 1 ldap ldap     8192 Авг 18 23:18 dn2id.bdb
-rw------- 1 ldap ldap    32768 Авг 18 23:18 id2entry.bdb
-rw------- 1 ldap ldap 10485760 Авг 18 23:18 log.0000000001
-rw------- 1 ldap ldap     8192 Авг 18 23:18 objectClass.bdb

После этого стартуем сервер:


~ # /etc/init.d/slapd start

Настала пора добавить необходимые узлы, пользователей и группы.
Для начала добавляем верхние узлы. Добавление происходит с использованием утилиты ldapadd и файлов базы данных. Вот так выглядит мой файл базы данных:


dn: dc=kitty-domain,dc=com
dc: kitty-domain
objectclass: dcObject
objectclass: organization
o: kitty-domain

dn: cn=admin,dc=kitty-domain,dc=com
objectclass: organizationalRole
cn: admin

dn: ou=users,dc=kitty-domain,dc=com
ou: users
objectclass: top
objectclass: organizationalUnit

dn: ou=groups,dc=kitty-domain,dc=com
ou: groups
objectclass: top
objectclass: organizationalUnit

Как только файл базы данных создан, добавляем в наш домен администратора и два контейнера: один для пользователей (users), а второй для групп (groups) с помощью следующей комманды:


~ # ldapadd -D "cn=admin,dc=kitty-domain,dc=com" -x -W -f root.ldif

Теперь можно приступать к добавлению пользователей в домен. Чтобы облечить себе задачу я использовал конфиг, приведенный в статье доктора Криса Брауна в LXF’05 2008. Но перед написанием этого HOWTO я его немного отредактировал и добавил несколько возможностей, которые не были реализованные Крисом Брауном: удаление пользователя, добавление новых групп пользователя и обновление пароля. Скачать скрипт можно отсюда. Для его использования необходимо наличие в системе утилит от PADL Software. После скачивания архив следует распаковать и скопировать его содержимое в /usr/share/openldap/migration. Следующим шаго является редактирование файла /usr/share/openldap/migration/migrate_common.ph. Нужно изменить следующие строки:


	$NAMINGCONTEXT{'passwd'}            = "ou=users";
	$NAMINGCONTEXT{'group'}             = "ou=groups";

Для работы скриптов так же необходимо сделать символьную ссылку на этот файл:


~ # ln -s /usr/share/openldap/migration/migrate_common.ph \
 /usr/lib/perl5/vendor_perl/5.8.8/i686-linux/migrate_common.ph

Так же для успешного выполнения скриптов мы укажем пароль admin’a в файле /etc/openldap/ldap_passwd (Спасибо Крису Брауну за такое решение):


~ # echo -n ADMIN_PASSWORD > /etc/openldap/ldap_passwd
~ # chmod 400 /etc/openldap/ldap_passwd

Теперь можно воспользоваться скриптом и добавить пользователя peter в домен. Для получения справки о флагах скрипта, его следует просто выполнить без каких либо флагов.


~ #  sh ldap_managment.sh -a --user=peter --admin=admin --domain=kitty-domain.com

На этом настройка сервера OpenLDAP закончена. Теперь в нашем домене находятся пользователь peter и его основная группа peter. Осталось только добавить slapd в загрузку при старте системы:


~ # rc-update add slapd boot

NFS

Как и настройка OpenLDAP, настройка NFS начинает с установки необходимых пакетов:


~ # emerge -av net-fs/nfs-utils

Далее редактируем конфигурационные файлы. А точнее /etc/exports. У меня он выглядит таким образом:


/home 192.168.1.0/24(no_subtree_check,rw)

Я думаю, что не следует объяснить что обозначают параметры в скобках, т.к. их описание можно получить набрав man exports.
Теперь приведем в боеготовность серверную часть NFS и добавим в автозагрузку:


~ # /etc/init.d/nfs start
~ # rc-update add nfs default

Ну вот мы и получили сервер NFS, который разрешает монтирование каталога /home всем компьютера сети 192.168.1.0/24.

Клиентская часть.

OpenLDAP.

Опять начинаем с установки пакетов:


~ # emerge  -av net-nds/openldap sys-auth/pam_ldap sys-auth/nss_ldap

После завершения установки редактируем конфигурационные файлы:
/etc/pam.d/system-auth. В данном случае нужно добавить следующие закомментированные строки на их места в конфиге. Будьте внимательны и не изменяйте ничего, кроме добавления строк, т.к. от этого конфига зависит система авторизации пользователей в системе!


#Добавляются следующие 4 (!!!) строки.
#auth       sufficient   pam_ldap.so use_first_pass
#account    sufficient   pam_ldap.so
#password   sufficient   pam_ldap.so use_authtok use_first_pass
#session    optional     pam_ldap.so

# Example file:
#%PAM-1.0

auth       required     pam_env.so
auth       sufficient   pam_unix.so try_first_pass likeauth nullok
auth       sufficient   pam_ldap.so use_first_pass
auth       required     pam_deny.so

account    sufficient   pam_ldap.so
account    required     pam_unix.so

password   required     pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 try_first_pass retry=3
password   sufficient   pam_unix.so try_first_pass use_authtok nullok md5 shadow
password   sufficient   pam_ldap.so use_authtok use_first_pass
password   required     pam_deny.so

session    required     pam_limits.so
session    required     pam_unix.so
session    optional     pam_ldap.so

Следующим на очереди является /etc/nsswitch.conf. Эти строки велят резольверу сперва посмотреть в локальных файлах (то есть в /etc/passwd и /etc/group), а затем спросить сервер LDAP конфигурации.


passwd:      compat files ldap
shadow:      compat files ldap
group:       compat files ldap

После этого следует отредактировать файл /etc/ldap.conf следующим образом (ниже приведен рабочий конфиг с комментариями к оставленным строкам):


# Another way to specify your LDAP server is to provide an
# uri with the server name. This allows to use
# Unix Domain Sockets to connect to a local LDAP Server.
uri ldap://kitty-house/
suffix "dc=kitty-domain,dc=com"

# Reconnect policy:
#  hard_open: reconnect to DSA with exponential backoff if
#             opening connection failed
#  hard_init: reconnect to DSA with exponential backoff if
#             initializing connection failed
#  hard:      alias for hard_open
#  soft:      return immediately on server failure
bind_policy soft

# Filter to AND with uid=%s
pam_filter objectclass=account

# The user ID attribute (defaults to uid)
pam_login_attribute uid

# Group member attribute
pam_member_attribute mememberuid

# RFC2307bis naming contexts
# Syntax:
# nss_base_XXX		base?scope?filter
# where scope is {base,one,sub}
# and filter is a filter to be &'d with the
# default filter.
# You can omit the suffix eg:
# nss_base_passwd	ou=People,
# to append the default base DN but this
# may incur a small performance impact.
nss_base_passwd		ou=users,dc=kitty-domain,dc=com
nss_base_shadow		ou=users,dc=kitty-domain,dc=com
nss_base_group		ou=groups,dc=kitty-domain,dc=com

scope one

Последним штирхом в настройке клиента будет копирование с сервера конфига /etc/openldap/openldap.conf:


~ # scp 192.168.1.5:/etc/openldap/ldap.conf /etc/openldap

Теперь проверяем, доступны ли нам списки пользователей:


~ # getent passwd |grep peter

Если на клиенте виден пользователь peter, то с настройкой OpenLDAP можно закончить. В случае проверки работоспособности на сервере, вывод будет состоять из 2-х копий строк информации о пользователе peter.

UPD:

Во время использования своей реальной учетной записи, состоящей в группе wheel,  я заметил, что не могу использовать команду su. Соответственно было проведено опертивное гуглирование на тему данной проблемы и было найдено решение. Состоит оно в редактировании еще одного файла, отвечающего за параметры аутентификации в системе: /etc/pam.d/su. Нужно добавить следующие строки (если они отутствуют):

auth     sufficient     pam_rootok.so
auth     required       pam_wheel.so
auth     required       pam_env.so
auth     sufficient     pam_ldap.so
auth     required       pam_deny.so

NFS и Automounter

Как и в случае с серверной частью, настройка NFS и Automounter оказывается относительно простой.
Для начала устанавливаем пакет net-fs/autofs:


~ # emerge -av net-fs/autofs

Немного отредактируем конфигурационный файл /etc/autofs/auto.master и раскомментируем строку


/home  /etc/autofs/auto.home

Далее добавляем в /etc/autofs/auto.home следующую строчку:


192.168.1.5:/home/

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


~ # /etc/init.d/rpc.statd start
~ # /etc/init.d/autofs start
~ # rc-update add rpc.statd default
~ # rc-update add autofs boot

Теперь можно проверить работоспособность нашей настройки:


Server:
peter@kitty-house ~ $ echo "Test" > test

Client:
peter@kitty-ps3 ~ $ ls -l
total 4
-rw-r--r-- 1 peter peter 5 Aug 19 01:07 test
peter@kitty-ps3 ~ $ cat test
Test

Используемая документация.

Creative Commons License
HOWTO Gentoo, OpenLDAP, Automounter. by Anton “Garfeild” Kolchunov is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
Based on a work at garfeild.ru.

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!