lesovsky
@lesovsky
System engineer and PostgreSQL DBA

ssh пускает пользователя без проверки соответствия пароля

Всем привет! Нужен человек разбирающийся в PAM и LDAP. Осваиваю OpenLDAP и первой практической задачей является хранение пользователей (их паролей и клиючей) в LDAP.
Есть два варианта: через pam_ldap и pam_nss (старый способ) и через sssd (современный). Хотя мое понимание вопроса может быть и ошибочным…
Сначала решил настроить через pam_ldap и pam_nss. Итак
1. со стороны сервера установил openldap, придумал схему каталога, сделал ldif залил его в ldap
2. со стороны клиента установил pam_ldap, pam_nss, openldap
начал настравать и в итоге настроил так, что sshd пускает пользователя с любым паролем. Т.е. я ввожу заранее неправильный пароль, а меня все равно пускает на сервер.

Где я допустил ошибку?

Имеющиеся данные
схема ldif, не стал ничего вырезать из стуруктуры

# extended LDIF
#
# LDAPv3
# base <dc=trew,dc=ru> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# trew.ru
dn: dc=trew,dc=ru
description: Snowboarding Trash-Ugar Band
objectClass: organization
objectClass: dcObject
dc: trew
o: Pixota, Inc.

# people, trew.ru
dn: ou=people,dc=trew,dc=ru
description: All people in organization
objectClass: organizationalUnit
ou: people

# accounts, people, trew.ru
dn: ou=accounts,ou=people,dc=trew,dc=ru
description: All accounts in organization
objectClass: organizationalUnit
ou: accounts

# roles, people, trew.ru
dn: ou=roles,ou=people,dc=trew,dc=ru
description: All accounts in organization
objectClass: organizationalUnit
ou: accounts
ou: roles

# sudoers, people, trew.ru
dn: ou=sudoers,ou=people,dc=trew,dc=ru
description: All can perform sudo
objectClass: organizationalUnit
ou: accounts
ou: sudoers

# projects, trew.ru
dn: ou=projects,dc=trew,dc=ru
description: All projects in organization
objectClass: organizationalUnit
ou: projects

# superproj, projects, trew.ru
dn: ou=superproj,ou=projects,dc=trew,dc=ru
description: Super project
objectClass: organizationalUnit
ou: superproj

# servers, trew.ru
dn: ou=servers,dc=trew,dc=ru
description: All servers in organization
objectClass: organizationalUnit
ou: servers

# vpupkin, accounts, people, trew.ru
dn: uid=vpupkin,ou=accounts,ou=people,dc=trew,dc=ru
cn: Vasya Pupkin
givenName: Vasya
sn: Pupkin
uid: vpupkin
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/vpupkin
mail: vpupkin@local.dev
loginShell: /bin/bash
objectClass: inetOrgPerson
objectClass: ldapPublicKey
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
sshPublicKey: ssh-rsa AAAA_тут_я_вырезал_длинный_кусок_ключа_a1T= vpupkin
userPassword:: e1NTSEF9R0dEYTVEL3l5RitxanVidFMxc194dXJocVJxRTAKcG8=

# search result
search: 2
result: 0 Success

клиентский pam.d/system-auth
auth required pam_env.so
auth sufficient pam_ldap.so
auth sufficient pam_unix.so use_first_pass likeauth nullok
auth optional pam_permit.so

account sufficient pam_ldap.so
account required pam_unix.so

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

session required pam_limits.so
session required pam_env.so
session required pam_unix.so
session optional pam_ldap.so
session required pam_mkhomedir.so umask=0077 skel=/etc/skel/

клиентский /etc/ldap.conf
suffix «dc=trew,dc=ru»
uri ldap://ldap.trew.ru
ldap_version 3
scope one
timelimit 2
bind_timelimit 2
bind_policy soft
nss_base_passwd ou=accounts,ou=people,dc=trew,dc=ru?sub
nss_base_shadow ou=accounts,ou=people,dc=trew,dc=ru?sub
nss_base_group ou=projects,dc=trew,dc=ru?sub
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_password exop
nss_reconnect_tries 4 # number of times to double the sleep time
nss_reconnect_sleeptime 1 # initial sleep value
nss_reconnect_maxsleeptime 16 # max sleep value to cap at
nss_reconnect_maxconntries 2 # how many tries before sleeping
nss_initgroups_ignoreusers ldap,openldap,mysql,syslog,root,postgres

Это пока единственные файлы в которых мне пришлось что-либо править.

по просьбе выкладываю кусочек лога при попытке входа
1) если попытаться зайти с пустым или правильным паролем
sshd[25424]: Set /proc/self/oom_score_adj to 0
sshd[25424]: Connection from 10.101.14.50 port 32817
sshd[25424]: SSH: Server;Ltype: Version;Remote: 10.101.14.50-32817;Protocol: 2.0;Client: OpenSSH_6.1p1-hpn13v11
sshd[25424]: SSH: Server;Ltype: Kex;Remote: 10.101.14.50-32817;Enc: aes128-ctr;MAC: hmac-md5;Comp: none [preauth]
sshd[25424]: SSH: Server;Ltype: Authname;Remote: 10.101.14.50-32817;Name: vpupkin [preauth]
sshd[25424]: [LDAP] 'vpupkin' is not in 'superprj'
sshd[25424]: [LDAP] 'vpupkin' is not in 'superprj'
sshd[25424]: Failed publickey for vpupkin from 10.101.14.50 port 32817 ssh2
sshd[25424]: Postponed keyboard-interactive for vpupkin from 10.101.14.50 port 32817 ssh2 [preauth]
sshd[25424]: Postponed keyboard-interactive/pam for vpupkin from 10.101.14.50 port 32817 ssh2 [preauth]
sshd[25424]: Accepted keyboard-interactive/pam for vpupkin from 10.101.14.50 port 32817 ssh2
sshd[25424]: User child is on pid 25430

2) если вбить абракадабру вместо пароля в логе ругнется но все равно заходит на машину
sshd[25436]: Postponed keyboard-interactive for vpupkin from 10.101.14.50 port 32962 ssh2 [preauth]
sshd[25440]: pam_ldap: error trying to bind as user «uid=vpupkin,ou=accounts,ou=people,dc=trew,dc=ru» (Invalid credentials)
sshd[25436]: Postponed keyboard-interactive/pam for vpupkin from 10.101.14.50 port 32962 ssh2 [preauth]
sshd[25436]: Accepted keyboard-interactive/pam for vpupkin from 10.101.14.50 port 32962 ssh2

хочу обратить внимание на [LDAP] 'vpupkin' is not in 'superprj'. На данный момент у меня настроена проверка ключей, и учитывая что vpupkin не находится в указанной группе, sshd поначалу его отпинывает. А вот дальше, запускает на сервер))

вот лог с включенный pam debug
gist.github.com/daevy/5269171
  • Вопрос задан
  • 5017 просмотров
Решения вопроса 1
Slipeer
@Slipeer
Есть подозрение, что авторизация проходит по строке:
auth optional pam_permit.so

(Если, конечно у Вас в /etc/pam.d/sshd не определены отдельные правила для процесса sshd)
Попробуйте перед этой строкой добавить:
auth  requisite  pam_deny.so
или
auth  required  pam_deny.so

P.S. Только на время эксперимента держите подключенной ssh сессию с правами root, чтобы если что — вернуть всё назад.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
lesovsky
@lesovsky Автор вопроса
System engineer and PostgreSQL DBA
>> А ещё попробуйте сменить пароль vpupkin в системе, с помощью passwd.
vpupkin@k105-zaria / $ passwd
Enter login(LDAP) password:
New password:
Retype new password:
LDAP password information update failed: Insufficient access
passwd: password updated successfully
Ответ написан
Комментировать
lesovsky
@lesovsky Автор вопроса
System engineer and PostgreSQL DBA
Спасибо!
>> auth requisite pam_deny.so
>> или
>> auth required pam_deny.so

теперь пускает только по паролю (сломались ключи, но я думаю смогу это починить), при неправильном пароле или пустом, предлагает ввести вновь или отказывает.
Спасибо!

может подскажете, на ваш взгляд, современную годную книжку по PAM?

P.S. параллельно поднял схему авторизации через sssd, там такого поведения с паролями нет)))
Ответ написан
lesovsky
@lesovsky Автор вопроса
System engineer and PostgreSQL DBA
увы, с вышеприведенной конфигой не заработали ключи.
дистрибутив Gentoo Linux

man это конечно хорошо)))) (я тоже всех туда посылаю) а что-то еще есть?
Ответ написан
lesovsky
@lesovsky Автор вопроса
System engineer and PostgreSQL DBA
да, я еще поковыраюсь и почитаю man. В любом случае Slipeer, большое вам спасибо!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы