Всем привет! Нужен человек разбирающийся в 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