LinuxForum.Fans
Тема

SAMBA+LDAP+SSL

Автор: Cruiser78 12 сообщений 4221 просмотров
#11689

Привет всем!

Имеем:
1. Федора 12.х64
2. Самба
3. ldap на базе 389-ds (очень достойный каталог)
4. требование сервера каталогов поднять защищенное соединение для работы с самбой (защита передаваемых паролей).
5. развернут openssl, сгенеритрован самоподписанный сертификат CA, выпущен сертификат сервера LDAP, это безобразие загружено в 389-ds.
6. в /etc/samba/smb.conf в секции глобал пишем следующее (ну и всё остальное тоже, но здесь главное - эти параметры):

text

#passdb backend = ldapsam:ldaps://DBServer.local.alma.ru:636
passdb backend = ldapsam:ldap://DBServer.local.alma.ru:389
#ldap ssl = start tls
ldap ssl = off

И, соответственно, меняем эти параметры для достижения нужного результата. Увы - нужный результат недостигается. А есть проблема:
Самба видит ldap по незащищенному каналу (ldap...:389) и даже заносит в него юзера (или дополняет существующую регистрационную запись юзера своими атрибутами). Но занести пароль юзерский команда smppasswd -a username не может, для этого нужно защищенное соединение, о чем она говорит английским по понятному. Включаем его (SSL).
Имеем следующее сообщение:

text

failed to bind to server ldaps://DBServer.local.corp.ru:636 with dn="cn=Directory Manager" Error: Can't contact LDAP server
    error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Connection to LDAP server failed for the 1 try!
Connection to LDAP server failed for the 2 try!
.........

То есть самба явно не может проверить сертификат или не может отдать в LDAP свой.

Вопрос - как подружить самбу с SSL. Где и что нужно прописать в её конфиге, чтобы SSL/TLS заработал корректно.

Кстати, дополнение: При поднятом (не до конца) SSL на самбе занесение группы в ldap не работает аналогичным образом:

text
# net groupmap add unixgroup=smbadmin rid=512 type=domain
[2010/03/10 10:55:29,  0] lib/smbldap.c:1052(smbldap_connect_system)
  failed to bind to server ldaps://DBServer.local.corp.ru:636 with dn="cn=Directory Manager" Error: Can't contact LDAP server
      error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

а при отключенном - пишет:

text

# net groupmap add unixgroup=smbadmin rid=512 type=domain
adding entry for group smbadmin failed!
#11718

для какого имени сервера был выпущен сертификат? имя в сертификате обязательно должно соответствовать имени по которому ты обращаешься к ldap.

#11728

Я ошибся или у Вас в разных листингах разные домены?
DBServer.local.alma.ru и DBServer.local.corp.ru

Покажите полностью конфиги DS и самбы.. а также напишите, как настраивали DS и как настраивали схему самбы

#11782
Loky написал:
для какого имени сервера был выпущен сертификат? имя в сертификате обязательно должно соответствовать имени по которому ты обращаешься к ldap.

Уточни: я обращаюсь к ldap следующим образом:

passdb backend = ldapsam:ldaps://DBServer.local.corp.ru:636

Имя сервера это DBServer.local.corp.ru или что-то иное? Или это имя инстанса LDAP'а?
Словом, проверил оба варианта - ни тот, ни другой к успеху не привели. Увы.

#11784

в сертификате безопасности должно быть прописано СТРОГО, что он выдан именно для сервера DBServer.local.corp.ru

#11786

если позволите. я все же хотел бы получить некоторую информацию :)
1. как ставилась Fedora DS, по каким инструкциям и т.д.
2. Как создавались сертификаты
3. Как прикручивалась самба, а точнее ее схема для Лдапа

А вопросы вот с чем связаны: в основе федора-вс кончено лдап. но тоже со своими заворотами. Потому имеется множество нюансов.

#11796
Hrafn написал:

Покажите полностью конфиги DS и самбы.. а также напишите, как настраивали DS и как настраивали схему самбы

Если бы я знал, где находятся конфиги этого 389-ds. Я перерыл все *.conf файлы в каталогах /etc/dirsrv, но ничего похожего на осмыссленный slapd.conf там и близко не лежало. Видимо всё у 389го закопано в базах данных. И управляется он или через GUI или через ldapmodify.

Настраивался DS (389-ds) как написано в статье
http://habrahabr.ru/company/scalaxy/blog/86090/
Только репликация окончательно не настроена. Но есть два инстанса, конфигурационный config-instance и рабочий, который висит на портах 389 и 636, и нормально "населяется" в типовых настройках. Схему самбы я уже публиковал (если не работать с LDAP, только с файлом стандартным, то проблем нет), но повторить [global] - несложно:

text

# имя домена
workgroup = CORP_NEW

# имя сервера netbios name = FileServer # аутентификация по имени пользователя security = USER template shell = /sbin/nologin # Описание сервера server string = Samba PDC CORP

# Администратор самбы admin users = root

# Работа с LDAP

# Корень LDAP сервера ldap suffix = dc=local,dc=corp,dc=ru

# Контейнер пользователей ldap user suffix = ou=People # Контейнер групп ldap group suffix = ou=Groups # Контейнер компьютеров ldap group suffix = ou=Computers

# объект администратора самбы в LDAP ldap admin dn = "cn=Directory Manager"

# Запрещаю удалять объекты ldap delete dn = no

# При смене пользователем пароля SAMBA (по сети или # через smbpasswd автоматически менять пароль LDAP) ldap passwd sync = yes

# Здесь перебираем то, что должно работать на аутентификацию #passdb backend = tdbsam passdb backend = ldapsam:ldaps://DBServer.local.corp.ru:636 #passdb backend = ldapsam:ldap://DBServer.local.corp.ru:389 ldap ssl = start tls #ldap ssl = off

nt acl support = no client lanman auth = yes client plaintext auth = Yes null passwords = yes

logon script = %U.bat

# Пустое значение - неперемещаемые профили logon path = logon drive = H:

# Поставить 254 при вводе в промышленную эксплуатацию os level = 66 preferred master = Yes domain master = Yes domain logons = Yes local master = yes cups options = raw

time server = yes

guest account = nobody guest ok = No

log level = 3 log file = /var/log/samba/%m.log max log size = 500

#add user script = /usr/sbin/useradd -d /opt/pub/samba/homes/"%u" -g ntusers -m -k /etc/samba/skel_domain -s /sbin/nologon "%u" delete user script = /usr/sbin/userdel "%u" add group script = /usr/sbin/groupadd "%g" delete group script = /usr/sbin/groupdel "%g" delete user from group script = /usr/sbin/userdel "%u" "%g" add machine script = /usr/sbin/useradd -d /dev/null -g computers -c "Workstation (%u)" -s /sbin/nologon -M "%u"

wins support = yes # Диапазон номеров локальных пользователей, который будет # использован для динамического создания пользователей домена. winbind uid = 10000-65000 # Диапазон номеров локальных групп пользователей, который будет # использован для динамического создания групп пользователей # домена. winbind gid = 10000-65000 # Символ-разделитель, используемый для составления доменных имен # пользователей и располагающийся между именем домена и именем # пользователя. #winbind separator = + # Интервал времени (в секундах) между запросами winbind к PDC # в целях синхронизации списков пользователей и групп. winbind cache time = 10 # Шаблон имени домашних каталогов доменных пользователей, # автоматически присваиваемых каждому пользователю. Сами каталоги, # однако, динамически не создаются. Вместо переменой %D подставляется # имя домена, а вместо %U подставляется имя пользователя. template homedir = /home/%D/%U

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

#Настройки SAMBA для работы блокировок 1C и MS-Access kernel oplocks = yes level2 oplocks = no locking = no oplocks = no

Я давно имею дело с криптографией, но здесь не вижу даже намека на процедуры Диффи-Хелмана, на указание сертификатов ремутного сервера LDAP'а, своих ключей и сертификатов... Где то это всё должно настраиваться, но вот где? Да и 389-ds берет в себя только сертификат CA, и свой сертификат. А как в него грузить сертификаты иных служб - непонятно... Непонятно, что должно быть в поле CN= этих сертификатов...

#11798

хорошо, а порт 636 вообще открыт? можешь попробовать порять каталог командой ldapsearch.

#11810
Hrafn написал:

2. Как создавались сертификаты

Сертификаты делались просто. Вначале сделал в openssl самоподписанный сертификат удостоверяющего центра (CA):

text
# cat genCAkey.ch 

#!/bin/bash # dd if=/dev/urandom of=/tmp/.rnd count=64 RAND="/tmp/.rnd" REQ="openssl req" X509="openssl x509" RSA="openssl rsa" GENRSA="openssl genrsa" O="OOO CORP" C="RU" ST="Saint-Petersburg" L="Saint-Petersburg" PURPOSES="digitalSignature, keyEncipherment" CERTTYPE="client, email, objsign" CA="/etc/openssl/CAcert.pem" CAkey="/etc/openssl/CAkey.pem" OUTDIR="/etc/openssl/clientcert/" CN="$1" BITS=4096 DAYS=365

# Создаём конфиг для CA cat > cfg <<EOT [ req ] default_bits = $BITS distinguished_name = req_DN extensions = v3_req [ req_DN ] countryName = "1. Country Name (2 letter code)" countryName_default = "$C" countryName_min = 2 countryName_max = 2 stateOrProvinceName = "2. State or Province Name (full name) " stateOrProvinceName_default = "$ST" localityName = "3. Locality Name (eg, city) " localityName_default = "$L" 0.organizationName = "4. Organization Name (eg, company) " 0.organizationName_default = "$O" organizationalUnitName = "5. Organizational Unit Name (eg, section) " organizationalUnitName_default = "$OU" commonName = "6. Common Name (eg, CA name) " commonName_max = 64 commonName_default = "$CN" emailAddress = "7. Email Address (eg, name@FQDN)" emailAddress_max = 40 emailAddress_default = "" [ v3_req ] basicConstraints = CA:FALSE keyUsage = $PURPOSES nsCertType = $CERTTYPE EOT

# Генерим ключ CA $GENRSA -out CAkey.pem -rand $RAND -des3 $BITS # Создаём самоподписанный сертификат CA $REQ -new -x509 -key CAkey.pem -out CAcert.pem -days 365 -config cfg

Затем в 389-console в визарде по ключевым делам генерим заявку на сертификацию (то есть секретный ключ уходит в софтверный токен, открытый - в pem-файл.) При этом, собственно и задается имя сервера, название организации, город, страна, то есть определяется запись CN= будущего сертификата. Этот файл-заявку обрабатываю опять же в openssl (то есть выпускаю сертификат):

text

X509 -req -in $CN.pem -CA $CA -CAkey $CAkey -CAcreateserial -days 365 -out $OUTDIR$CN.pem 

Скрипт (переменные) тот же, только эта строка и работает в нем, остальное - см. выше.
Далее - загружаю сертификат CА в 389-console в место для сертификатов CA, а сетификат сервера ldap - в место для сертификатов серверов. Там ошибиться [мне] сложно. Естественно путь сертификации рисутся корректно. Возможно, область применения сертификата задана некорректно... Но как надо для ldap? Я не знаю.

#11814

сертификат для лдап делается как для обычного сервера. точнее сервис лдап должен использовать сертификат Вашего сервера.
хотелось бы глянуть на результат ldapsearch по 636 порту.

#11850
Loky написал:
хорошо, а порт 636 вообще открыт? можешь попробовать порять каталог командой ldapsearch.
text
# netstat -nap | grep slapd
tcp        0      0 192.168.43.6:52909          192.168.43.6:6389           ESTABLISHED 7248/ns-slapd       
tcp        0      0 :::6389                     :::*                        LISTEN      7316/ns-slapd       
tcp        0      0 :::636                      :::*                        LISTEN      7248/ns-slapd       
tcp        0      0 :::389                      :::*                        LISTEN      7248/ns-slapd       
tcp        0      0 ::ffff:192.168.43.6:6389    ::ffff:192.168.43.6:52909   ESTABLISHED 7316/ns-slapd 

Порт 6389 - это репликационный инстанс, 636 и 389 - понятно что...
МЭ поставлен в тотальный ACCEPT.

А вот ldapseach, помню только ключ -LLL, подскажи, что там дальше надо писать

============
немного понял. Мне надо дополнительно еще и nss_ldap поднастроить... Я его не трогал совершенно. А там, как раз ключи конкретные и вписываются.

Войдите или зарегистрируйтесь, чтобы ответить.