URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 42577
[ Назад ]

Исходное сообщение
"LDAP аутентификация"

Отправлено Вадим , 06-Апр-04 13:22 
Добрый день!
При создании сервера аутентификации возникла следующая проблема:
существует 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.schema

pidfile         /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

loglevel 1

access to attrs="userPassword"
        by dn.base="cn=admin,dc=test,dc=ru" write
        by self write
        by anonymous auth
        by * none

access to *
        by self write
        by dn.base="cn=admin,dc=test,dc=ru" write
        by * read
#        by anonymous auth
#       by * none
allow bind_v2

database        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


Содержание

Сообщения в этом обсуждении
"LDAP аутентификация"
Отправлено Sampan , 06-Апр-04 18:33 
Считаем, что /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 для аутентификации, иначе - как он будет аутентифицировать?


"Re: LDAP аутентификация"
Отправлено Вадим , 06-Апр-04 20:58 
>Считаем, что /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 никак.


"Re: LDAP аутентификация"
Отправлено Andrek , 07-Апр-04 05:24 
Как делал я.
По умолчанию в 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=vmware

rootbinddn 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
----------------------------------------


"Re: LDAP аутентификация"
Отправлено Andrek , 07-Апр-04 05:26 
Естественно не забываем про /etc/nsswith.conf
;)

"Re: LDAP аутентификация"
Отправлено Вадим , 07-Апр-04 15:19 
Аутентификация по 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.schema

pidfile         /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/certs

loglevel 1

access to attrs="userPassword"
        by dn.base="cn=admin,dc=test,dc=ru" write
        by self write
        by anonymous auth
        by * none

access to *
        by self write
        by dn.base="cn=admin,dc=test,dc=ru" write
        by * read
        by anonymous auth

database        ldbm
suffix          "dc=test,dc=ru"
rootdn          "cn=admin,dc=test,dc=ru"
rootpw          1234567

directory       /usr/local/var/openldap-data


index   objectClass,uid,uidNumber,gidNumber,memberUid   eq
index   cn,mail,surname,givenname                       eq,subinitial


"Re: LDAP аутентификация"
Отправлено Sampan , 07-Апр-04 17:24 
>Запись в /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 рапечатай здесь - посмотрим.


"Re: LDAP аутентификация"
Отправлено Andrek , 08-Апр-04 03:45 
Если пользуешься RedHat-9 нет необходимости править pam.d/sshd.
Да и веcь pam практически завязан на pam.d/system-auth
За тебя это сделает в RedHat программа setup, запусти ее и в меню "Autentication configuration" подредактируй параметры сервера ldap.

"Re: LDAP аутентификация"
Отправлено Andrek , 08-Апр-04 03:59 
и еще на последок ;)
Попробуй в ldap шифровать пароли алгоритмом crypt. Так как в свое время у меня авторизация проходила именно при шифровании паролей этим методом.

"Re: LDAP аутентификация"
Отправлено Вадим , 08-Апр-04 13:21 
>и еще на последок ;)
>Попробуй в ldap шифровать пароли алгоритмом crypt. Так как в свое время
>у меня авторизация проходила именно при шифровании паролей этим методом.

Спасибо за совет, сейчас попробую.


"Re: LDAP аутентификация"
Отправлено Вадим , 08-Апр-04 13:21 
>>Запись в /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


"Re: LDAP аутентификация"
Отправлено Вадим , 08-Апр-04 13:54 
Нет, 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] files

bootparams: nisplus [NOTFOUND=return] files

ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files

netgroup:   files

#publickey:  nisplus

automount:  files
aliases:    files #nisplus


"Re: LDAP аутентификация"
Отправлено Alex Deiter , 08-Апр-04 22:30 
>Нет, 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 и ходите.


"Re: LDAP аутентификация"
Отправлено Вадим , 08-Апр-04 23:00 
Спасибо, 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 и ходите.



"Re: LDAP аутентификация"
Отправлено Sampan , 09-Апр-04 02:43 
>Опять в /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 ? Посмотри...


"Re: LDAP аутентификация"
Отправлено asser , 12-Апр-04 12:31 
Скорее всего при компиляции 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.                                      


"Re: LDAP аутентификация"
Отправлено Вадим , 12-Апр-04 12:41 
Авторизация SSH не проходит только с локальным LDAP сервером по SSL, причем ldapsearch по SSL работает.
Если настраиваю авторизацию через уже работающий LDAP сервер по SSL, то авторизация проходит.

***********
При компиляции pam_ldap без SSL не проходила бы и удаленная аутентификация.



"Re: LDAP аутентификация"
Отправлено andrek , 19-Апр-04 10:21 
Окей!
Повторил опыт.
Дистр 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 авторизации не проходят.

Ну кто "правильные мысли" раскажет?


"Re: LDAP аутентификация"
Отправлено Serg , 27-Апр-04 13:06 
Ну в общем, я и сам до конца не разобрался (настраиваю второй день), но у меня работает авторизация по ssh, причем LDAP работает с SSL.
В моем случае почему-то авторизация по ssh проходит только если закоментить все acl ...
При таком раскладе пароль виден всем :(
>Ну кто "правильные мысли" раскажет?