Добрый день!
При создании сервера аутентификации возникла следующая проблема:
существует LDAP сервер на базе OpenLDAP 2.0.27-8 и RedHat Linux 9.0 файл конфигурации slapd.conf приведен ниже. Сервер запущен следующим образом:
/usr/local/libexec/slapd -h ldaps:///В базе содержатся данные о пользователях.
Попытка получить данные после аутентификации с помощью ldapsearch оканчивается успешно. То есть команда вида:
ldapsearch -D "uid=a,cn=aa,dc=test,dc=ru" -W
после ввода правильного пароля успешно завершается.Попытка подключиться по SSH после настройки PAM и NSSWITCH оканчивается неудачей. (При изменении записи URI в /etc/ldap.conf на уже работающий сервер аутентификация проходит)
В лог файле /var/log/secure появляются следующие записи.
Apr 5 16:58:07 coala sshd[16810]: pam_ldap: ldap_simple_bind Can't contact LDAP server
Apr 5 16:58:09 coala sshd[16810]: Failed password for a from 192.168.4.76 port 1368
Apr 5 16:58:13 coala sshd[16810]: pam_ldap: ldap_simple_bind Can't contact LDAP server
# slapd.conf.
# This file should NOT be world readable.
#
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schemapidfile /usr/local/var/run/slapd.pid
argsfile /usr/local/var/run/slapd.args# TLS
TLSCertificateFile /usr/local/etc/openldap/certs/cert.pem
TLSCertificateKeyFile /usr/local/etc/openldap/certs/privkey.pemloglevel 1
access to attrs="userPassword"
by dn.base="cn=admin,dc=test,dc=ru" write
by self write
by anonymous auth
by * noneaccess to *
by self write
by dn.base="cn=admin,dc=test,dc=ru" write
by * read
# by anonymous auth
# by * none
allow bind_v2database ldbm
suffix "dc=test,dc=ru"
rootdn "cn=admin,dc=test,dc=ru"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw 1234567
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.# Mode 700 recommended.
directory /usr/local/var/openldap-data# Indices to maintain
index objectClass,uid,uidNumber,gidNumber,memberUid eq
index cn,mail,surname,givenname eq,subinitial/etc/ldap.conf
uri ldaps://127.0.0.1
base dc=test,dc=ru
#ldap_version 3
#referrals no
port 636
scope sub
#nss_map_objectclass posixAccount User
#nss_map_attribute uid msSFU30Name
#nss_map_attribute uniqueMember posixMember
#nss_map_attribute userPassword msSFU30Password
#nss_map_attribute homeDirectory msSFU30HomeDirectory
#nss_map_attribute gidNumber msSFU30GidNumber
#nss_map_attribute uidNumber msSFU30UidNumber
#nss_map_objectclass posixGroup Group
#nss_map_attribute loginShell msSFU30LoginShell
#pam_login_attribute msSFU30Name
pam_filter objectclass=posixAccount
#pam_password ad
#TLS_REQCERT never
Считаем, что /etc/pam.d/sshd настроен1. убери allow bind_v2 из slapd.conf и включи ldap_version 3 в /etc/ldap.conf (нехрена даунгрэйдом заниматься)
2. у меня в /etc/ldap.conf присутствует:
pam_filter objectclass=posixAccount
pam_login_attribute uid
3. как ты генеришь пароли, хранимые в LDAP, тот же тип хэша нужно указать в /etc/ldap.conf, варианты:
pam_password clear
pam_password crypt
pam_password md5
и т.п.
4. Обрати внимание на:
nss_base_passwd ou=next,o=test,c=ru?one
nss_base_shadow ou=next,o=test,c=ru?one
nss_base_group ou=next,o=test,c=ru?one
(DN у тебя, естественно другой будет, one или sub - тебе решать)
5. Обрати внимание на binddn и bindpw в /etc/ldap.conf. Их нужно указать правильные (анонимный бинд не пройдет). pam_ldap все же нужно читать юзерский пароль из LDAP для аутентификации, иначе - как он будет аутентифицировать?
>Считаем, что /etc/pam.d/sshd настроен
>
>1. убери allow bind_v2 из slapd.conf и включи ldap_version 3 в /etc/ldap.conf
>(нехрена даунгрэйдом заниматься)
>
>2. у меня в /etc/ldap.conf присутствует:
>
>pam_filter objectclass=posixAccount
>
>pam_login_attribute uid
>
>3. как ты генеришь пароли, хранимые в LDAP, тот же тип хэша
>нужно указать в /etc/ldap.conf, варианты:
>
>pam_password clear
>
>pam_password crypt
>
>pam_password md5
>
>и т.п.
>
>4. Обрати внимание на:
>
>nss_base_passwd ou=next,o=test,c=ru?one
>
>nss_base_shadow ou=next,o=test,c=ru?one
>
>nss_base_group ou=next,o=test,c=ru?one
>
>(DN у тебя, естественно другой будет, one или sub - тебе решать)
>
>
>5. Обрати внимание на binddn и bindpw в /etc/ldap.conf. Их нужно указать
>правильные (анонимный бинд не пройдет). pam_ldap все же нужно читать юзерский
>пароль из LDAP для аутентификации, иначе - как он будет аутентифицировать?
>
Огромное спасибо за советы.
При дальнейшем разборе полетов без внесения приведенных изменений протестировал LDAP без SSL - работает, а с SSL никак.
Как делал я.
По умолчанию в RedHat-9 TLS опции закомментированы.
Раскомментировал TLS опции (ключ уже был сгенерен) и подредактировал /etc/init.d/ldap, оставил строку запуска ldaps.
Стартанул, проверил, netstat -atn | grep LISTEN, порт светится 636 то что надо.
Для работоспособности ldap-овских утилит надо править /etc/openldap/ldap.conf:
URI ldaps://ldap.vmware
BASE dc=vmware
TLS_REQCERT never
этого достаточно чтобы к примеру с помощью ldapsearch -D"cn=admin,dc=vmware" -x -W , авторизоваться и провести поиск.
Далее чтобы nss_ldap увидел наш ldaps server, подредактируем /etc/ldap/conf, там много лишнего.
Вот что у меня в минимуме:
host ldap.vmware
base dc=vmwarerootbinddn cn=,dc=vmware #user который имеет доступ на чтение аккаунтов и его пароль в ldap.secret
scope one
nss_base_passwd ou=users,dc=vmware?one
nss_base_shadow ou=users,dc=vmware?one
nss_base_group ou=groups,dc-vmware?one
ssl yesЭто все, проверяем getent passwd, и в конце списка вижу пользователя из базы ldap.
да вот еще мой тестовый ldif если надо ;)
----------------------------------------
# vmware
dn: dc=vmware
objectClass: dcObject
objectClass: organization
dc: vmware
o: VmWare Corp# admin, vmware
dn: cn=admin,dc=vmware
objectClass: organizationalRole
cn: admin
description: Administrator LDAP# users, vmware
dn: ou=users,dc=vmware
objectClass: top
objectClass: organizationalUnit
ou: users# groups, vmware
dn: ou=groups,dc=vmware
objectClass: top
objectClass: organizationalUnit
ou: groups# sandy, groups, vmware
dn: cn=sandy,ou=groups,dc=vmware
objectClass: top
objectClass: posixGroup
cn: sandy
gidNumber: 3000
memberUid: sandy# sandy, users, vmware
dn: uid=sandy,ou=users,dc=vmware
objectClass: top
objectClass: posixAccount
cn: sandy
uid: sandy
uidNumber: 3000
gidNumber: 3000
homeDirectory: /home/sandy
loginShell: /bin/bash
gecos: SandySandy
----------------------------------------
Естественно не забываем про /etc/nsswith.conf
;)
Аутентификация по LDAP проходит, все нормально работает, по LDAPS - нет.
Запись в /var/log/secure.
Apr 7 15:09:44 coala sshd[3122]: Illegal user a from 194.67.67.194Аутентификация по LDAPS через уже работающий сервер аутентификации тоже проходит без проблем.
После такого могу грешить только на настройки ldap сервера, либо SSL.
Измененный /usr/local/etc/openldap/slapd.conf
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schemapidfile /usr/local/var/run/slapd.pid
argsfile /usr/local/var/run/slapd.args# TLS
TLSCertificateFile /usr/local/etc/openldap/certs/cert.pem
TLSCertificateKeyFile /usr/local/etc/openldap/certs/privkey.pem
TLSCACertificatePath /usr/local/etc/openldap/certsloglevel 1
access to attrs="userPassword"
by dn.base="cn=admin,dc=test,dc=ru" write
by self write
by anonymous auth
by * noneaccess to *
by self write
by dn.base="cn=admin,dc=test,dc=ru" write
by * read
by anonymous authdatabase ldbm
suffix "dc=test,dc=ru"
rootdn "cn=admin,dc=test,dc=ru"
rootpw 1234567directory /usr/local/var/openldap-data
index objectClass,uid,uidNumber,gidNumber,memberUid eq
index cn,mail,surname,givenname eq,subinitial
>Запись в /var/log/secure.
>Apr 7 15:09:44 coala sshd[3122]: Illegal user a from 194.67.67.194А в /etc/pam.d/sshd у тебя /lib/security/pam_ldap.so прописан?
На всякий случай, /etc/pam.d/sshd рапечатай здесь - посмотрим.
Если пользуешься RedHat-9 нет необходимости править pam.d/sshd.
Да и веcь pam практически завязан на pam.d/system-auth
За тебя это сделает в RedHat программа setup, запусти ее и в меню "Autentication configuration" подредактируй параметры сервера ldap.
и еще на последок ;)
Попробуй в ldap шифровать пароли алгоритмом crypt. Так как в свое время у меня авторизация проходила именно при шифровании паролей этим методом.
>и еще на последок ;)
>Попробуй в ldap шифровать пароли алгоритмом crypt. Так как в свое время
>у меня авторизация проходила именно при шифровании паролей этим методом.Спасибо за совет, сейчас попробую.
>>Запись в /var/log/secure.
>>Apr 7 15:09:44 coala sshd[3122]: Illegal user a from 194.67.67.194
>
>А в /etc/pam.d/sshd у тебя /lib/security/pam_ldap.so прописан?
>
>На всякий случай, /etc/pam.d/sshd рапечатай здесь - посмотрим.
#%PAM-1.0
auth required /lib/security/pam_nologin.so
auth sufficient /lib/security/pam_ldap.so
auth required /lib/security/pam_unix_auth.so try_first_pass
account sufficient /lib/security/pam_ldap.so
account required /lib/security/pam_unix_acct.so
password required /lib/security/pam_cracklib.so
password sufficient /lib/security/pam_ldap.so
password required /lib/security/pam_pwdb.so use_first_pass
session required /lib/security/pam_unix_session.so
Нет, crypt не помогает.
Напомню, что такае ерунда творится только при использовании SSL, без SSL
авторизация проходит нормально.Опять в /var/log/secure
Apr 8 13:46:31 coala sshd[3735]: Illegal user b from 192.168.4.76
Apr 8 13:46:31 coala sshd[3735]: Failed none for illegal user b from 192.168.4.76 port 1175
Apr 8 13:46:33 coala sshd[3735]: Failed password for illegal user b from 192.168.4.76 port 1175На всякий случай.
/etc/nsswitch.conf
passwd: files ldap
shadow: files ldap
group: files ldap#hosts: db files nisplus nis dns
hosts: files dns# Example - obey only what nisplus tells us...
#services: nisplus [NOTFOUND=return] files
#networks: nisplus [NOTFOUND=return] files
#protocols: nisplus [NOTFOUND=return] files
#rpc: nisplus [NOTFOUND=return] files
#ethers: nisplus [NOTFOUND=return] files
#netmasks: nisplus [NOTFOUND=return] filesbootparams: nisplus [NOTFOUND=return] files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: filesnetgroup: files
#publickey: nisplus
automount: files
aliases: files #nisplus
>Нет, crypt не помогает.
Советы Вам дают неправильные.>Напомню, что такае ерунда творится только при использовании SSL, без SSL
>авторизация проходит нормально.У Вас в /etc/ldap.conf строка: uri ldaps://127.0.0.1 всё портит.
Для какого хоста выданы сертификаты, описанные в slapd.conf:# TLS
TLSCertificateFile /usr/local/etc/openldap/certs/cert.pem
TLSCertificateKeyFile /usr/local/etc/openldap/certs/privkey.pemВот к этому хосту посредством ssl и ходите.
Спасибо, Alex.
Но, к сожалению, замена uri на имя машины в сертификате тоже не помогает.Причем во время использования SSL команда
ldapsearch -D "uid=a,cn=gr,dc=test,dc=ru" -W
после ввода правильного пароля проходит.>У Вас в /etc/ldap.conf строка: uri ldaps://127.0.0.1 всё портит.
>Для какого хоста выданы сертификаты, описанные в slapd.conf:
>
># TLS
>TLSCertificateFile /usr/local/etc/openldap/certs/cert.pem
>TLSCertificateKeyFile /usr/local/etc/openldap/certs/privkey.pem
>
>Вот к этому хосту посредством ssl и ходите.
>Опять в /var/log/secure
>Apr 8 13:46:31 coala sshd[3735]: Illegal user b from 192.168.4.76
>Apr 8 13:46:31 coala sshd[3735]: Failed none for illegal user b
>from 192.168.4.76 port 1175
>Apr 8 13:46:33 coala sshd[3735]: Failed password for illegal user b
>from 192.168.4.76 port 1175А чего все неудачные примеры sshd?
Может в sshd_config не правильно настроен AllowUsers ? Посмотри...
Скорее всего при компиляции pam_ldap не скомпилировал поддержку SSL. Читаем pam_ldap/README.Q: Where is ldap_ssl.h? It's in the Netscape LDAP
C SDK. Download it from developer.netscape.com. If you
don't want to use SSL, removed -DSSL from CFLAGS. I
don't have any experience building with the SSL/TLS
support in OpenLDAP.
Авторизация SSH не проходит только с локальным LDAP сервером по SSL, причем ldapsearch по SSL работает.
Если настраиваю авторизацию через уже работающий LDAP сервер по SSL, то авторизация проходит.***********
При компиляции pam_ldap без SSL не проходила бы и удаленная аутентификация.
Окей!
Повторил опыт.
Дистр RedHat-7.2 но это не важно.
Собрал openldap-2.2.9, nss_ldap-217, pam_ldap-169, cyrus-sasl-2.1.18.
Настроил только ldaps.
Создал пользователя.
Действительно локально пользователь заходит, через ssh нет.
Проблема как я и говорил в криптовании, пароли принимает криптованные только crypt, ни md5 smd5 sha ssha пароли через pam_ldap для ssh авторизации не проходят.Ну кто "правильные мысли" раскажет?
Ну в общем, я и сам до конца не разобрался (настраиваю второй день), но у меня работает авторизация по ssh, причем LDAP работает с SSL.
В моем случае почему-то авторизация по ssh проходит только если закоментить все acl ...
При таком раскладе пароль виден всем :(
>Ну кто "правильные мысли" раскажет?