| ||
В организации стал вопрос по созданию корпоративной почты с поддержкой электронных сертификатов пользователей.
Имеем внутренний настроенный dns с доменом domain.ru
Сервер где поднимаем LDAP называем ldap.domain.ru
Создание сертификата организации
openssl genrsa -des3 -out ca.key 2048 openssl req -new -x509 -days 1825 -utf8 -key ca.key -out ca.cert
Создание пользовательского подписанного сертификата
openssl genrsa -out user.key 1024 openssl req -new -key user.key -out user.csr -utf8 openssl x509 -req -in user.csr -out user.cert -CA ca.cert -CAkey ca.key -CAcreateserial -days 1095
Большая часть сетевых служб использует сертификат формата service.pem
Формат этого файла подразумевает оба ключа (публичный и приватный) в одном файле:
cat service.key > service.pem cat service.cert >> service.pem
В системе установлен пакет:
Настройка серверной части openldap
Файл конфигурации /etc/openldap/slapd.conf по умолчанию,
из опций добавлено:
TLSCertificateFile /usr/share/ssl/private/slapd.pem TLSCertificateKeyFile /usr/share/ssl/private/slapd.pem TLSCACertificateFile /usr/share/ssl/certs/ca.cert suffix "dc=domain,dc=ru" rootdn "cn=admin,dc=domain,dc=ru"Генерируем публичный и приватный ключ как описано выше.
Common Name (eg, YOUR name) []: ldap.domain.ruУстанавливаем права:
chmod 440 /usr/share/ssl/private/slapd.pem chown .ldap /usr/share/ssl/private/slapd.pemЗапускаем
service ldap startПроверяем
netstat -atn | grep LISTEN tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTENОтлично! Редактируем строку запуска сервиса в файле /etc/rc.d/init.d/ldap (для систем RedHat)
#daemon ${slapd} -u ldap -h 'ldap:/// ldaps:///' $OPTIONS $SLAPD_OPTIONS daemon ${slapd} -u ldap -h 'ldaps:///' $OPTIONS $SLAPD_OPTIONSКомандуем
service ldap restart netstat -atn | grep LISTENРезультат:
tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTENЭто то, что нам нужно!
Настройка клиентской части openldap
Файл конфигурации /etc/openldap/ldap.conf, добавляем:
BASE dc=domain,dc=ru URI ldaps://ldap.domain.ru TLS_CACERT /usr/share/ssl/certs/ca.certСоздадим базовый ldif файл, с содержанием:
dn: dc=domain,dc=ru objectClass: dcObject objectClass: organization dc: domain o: Organization dn: cn=admin,dc=domain,dc=ru objectClass: organizationalRole cn: admin description: Administrator LDAPИ добавим его в базу:
ldapadd -D"cn=admin,dc=domain,dc=ru" -W -x -f base.ldif Enter LDAP Password: adding new entry "dc=domain,dc=ru" adding new entry "cn=admin,dc=domain,dc=ru"Таким образом имеем работающие ldap сервер и клиент с SSL поддержкой.
Авторизация LDAP
Настраиваем на примере клиентскую систему с именем redhat72.domain.ru
Так же в системе провели настройку клиентской части openldap, как описано выше.
В системе установлен пакет:
passwd: files ldap shadow: files ldap group: files ldapФайл конфигурации /etc/ldap.conf:
host ldap.domain.ru base dc=domain,dc=ru rootbinddn cn=login,dc=domain,dc=ru scope one nss_base_passwd ou=users,dc=domain,dc=ru?one nss_base_shadow ou=users,dc=domain,dc=ru?one nss_base_group ou=group,dc=domain,dc=ru?one ssl yesВ файл конфигурации /etc/openldap/slapd.conf на сервере ldap.domain.ru добавляем необходимые схемы
include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/inetorgperson.schemaСоздаем ниже пользователя login, которому доступны необходимые данные для чтения, для этого определим права ACL:
access to attr=userPassword by self write by anonymous auth by dn.base="cn=admin,dc=domain,dc=ru" write by dn.base="cn=login,dc=domain,dc=ru" read by * none access to attr=userPKCS12 by self write by anonymous auth by dn.base="cn=admin,dc=domain,dc=ru" write by * none access to * by self write by dn.base="cn=admin,dc=domain,dc=ru" write by * readФайл login.ldif:
dn: cn=login,dc=domain,dc=ru objectClass: top objectClass: person cn: login sn: login userPassword: {CRYPT}lVT9EK/cNnd/2Для генерации хеша пароля, используем команду:
slappasswd -h{crypt}Так же и в файле /etc/ldap.secret необходимо сохранить етот пароль.
ldapadd -D"cn=admin,dc=domain,dc=ru" -W -x -f login.ldif Enter LDAP Password: adding new entry "cn=login,dc=domain,dc=ru"Создаем две группы, файл group.ldif:
dn: ou=users,dc=domain,dc=ru objectClass: top objectClass: organizationalUnit ou: users dn: ou=group,dc=domain,dc=ru objectClass: top objectClass: organizationalUnit ou: groupСохраняем в базе:
ldapadd -D"cn=admin,dc=domain,dc=ru" -W -x -f group.ldif Enter LDAP Password: adding new entry "ou=users,dc=domain,dc=ru" adding new entry "ou=group,dc=domain,dc=ru"Создаем пользователя nikolas:
dn: cn=nikolas,ou=users,dc=domain,dc=ru objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: nikolas uid: nikolas uidNumber: 3001 gidNumber: 3001 homeDirectory: /home/nikolas loginShell: /bin/bash userPassword: {CRYPT}Dre676jtUt6tg dn: cn=nikolas,ou=group,dc=domain,dc=ru objectClass: top objectClass: posixGroup cn: nikolas gidNumber: 3001 memberUid: nikolasЗаносим в базу, стандартной последовательностью команд.
[test@redhat72 test]$ getent passwd . . . . test:x:500:500::/home/test:/bin/bash sandy:x:3001:3001:sandy:/home/sandy:/bin/bash nikolas:x:3002:3002:nikolas:/home/nikolas:/bin/bash [test@redhat72 test]$ getent shadow sandy:x:::::::0 nikolas:x:::::::0 [test@redhat72 test]$ getent group . . . . test:x:500: sandy:x:3001:sandy nikolas:x:3002:nikolas [test@redhat72 test]$Так же в файл /etc/pam.d/login, полезно добавить:
session optional /lib/security/pam_mkhomedir.so umask=077После этого можно подключиться пользователем nikolas локально в систему:
Red Hat Linux release 7.2 (Enigma) Kernel 2.4.26-grsec on an i686 redhat72 login: nikolas Password: Creating directory '/home/nikolas'. [nikolas@redhat72 nikolas]$ cd .. [nikolas@redhat72 home]$ ls -la total 12 drwxr-x-r-x 3 root root 4096 May 5 15:56 . drwxr-x-r-x 19 root root 4096 May 5 10:00 .. drwx------- 2 nikolas nikolas 4096 May 5 15:50 nikolasПосле установки пакета:
UsePAM yesПосле этих манипуляций также подключаемся и удаленно.
[andrek@boss andrek]$ ssh -lnikolas redhat72 Password: Last login: Wed May 5 16:15:45 2004 [nikolas@redhat72 nikolas]$
Сервер электронной почты.
В системе установлены пакеты:
Для включения встроенных функций поддержки ldap в sendmail, его необходимо собрать с поддержкой ldap, если используете стандартный из дистрибутива, то она присутствует по умолчанию.
Иначе при сборке необходимо в файл devtools/Site/site.config.m4 добавить строки:
APPENDDEF(`confMAPDEF',`-DLDAPMAP') APPENDDEF(`confLIBS',`-lldap -llber -lldap_r')Добавляем поддержку необходимой схемы sendmail.shema в файл конфигурации slapd.conf на стороне сервера ldap.domain.ru.
include /etc/openldap/schema/sendmail.schemaВключаем альясы в файле конфигурации sendmail, путем определения параметров в файле sendmail.mc:
define(`confLDAP_CLUSTER', `servers') define(`confLDAP_DEFAULT_SPEC',`-w 3 -H ldaps:///ldap.domain.ru -b ou=aliases,dc=domain,dc=ru') define(`ALIAS_FILE',`ldap:')Работоспособность альяса будет ограничена в рамках значения sendmailMTACluster = servers
Так же при использовании этой ветки, столкнулся со следующей ситуацией:
При отправлении почты на почтовый альяс, адресат получает письмо.
Но отправитель также получает сообщение об ошибке, в которой говорится что невозможно доставить письмо также адресатам
Для поддержки SSL при сборке необходимо в файл devtools/Site/site.config.m4 добавить строки:
APPENDDEF(`confENVDEF',`-DSTARTTLS')И в файле конфигурации sendmail.mc определить:
define(`confCACERT_PATH',`/usr/share/ssl/certs') define(`confCACERT',`/usr/share/ssl/certs/ca.cert') define(`confSERVER_CERT',`/usr/share/ssl/private/sendmail.pem') define(`confSERVER_KEY',`/usr/share/ssl/private/sendmail.pem') DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')И не забываем перегенерировать:
m4 sendmail.mc > sendmail.cfПакет imap-2004 рекомендую собирать также c поддержкой SSL:
make lnp SSLDIR=/usr SSLCERTS=/usr/share/ssl/private
Соответственно в каталоге /usr/share/ssl/private должны быть сертификаты ipop3d.pem и imapd.pem .
Централизованная адресная книга, и пользовательские сертификаты в каталогах LDAP.
Краткое вступление:
Процесс этот утомительный, если в системе порядочное количество пользователей.
Я позволил себе написать (небольшой скрипт управления корпоративной почты) CGI сценарий, с помощью которого можно решать следующие задачи:
При добавлении пользователя, сертификаты автоматически добавляются в каталог LDAP.
Несколько скриншотов:
Взять можно здесь.
Настройка вся в файле конфигурации.
Система работает естественно с глюками :))
Планирую в дальнейшем добавить полную поддержку sendmail, а также более упрощеный вариант управления служб DNS и DHCP.
Небольшая информация о клиентских программах.
Замеченные ошибки, умные мысли и комментарии приветствуются!
Иркутск, лето 2004г. | Андрей Афлетдинов |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |