Доброго дня.
Проблема вот какая. Необходимо дать ssh доступ пользователям домена Windows. Не бейте сильно. Судя по количеству постов в инете тема избита. Однако проблема сохраняется.
Система freebsd 8.2 amd64. Домен AD на Windows 2008 SP2.
Бьюсь уже третьи сутки - но решения все равно пока не нашел. А это решение очень нужно!!! Прошу помощи!!!
Доступ к ssh реализован через pam_winbind.
Вот файл /etc/pam.d/sshd:
Код: Выделить всё
auth sufficient /usr/local/lib/pam_winbind.so debug
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth required pam_unix.so no_warn try_first_pass
# account
account sufficient /usr/local/lib/pam_winbind.so debug
account required pam_nologin.so
account required pam_login_access.so
account required pam_unix.so
# session
session required pam_permit.so
# password
password required pam_unix.so no_warn try_first_pass
В smb.conf есть строка, определяющая пользовательский shell:
Код: Выделить всё
template shell=/bin/csh
template homedir = /home/%D/%U
Пользователь test проходит проверку по winbind:
Код: Выделить всё
id test
uid=10015(test) gid=10005(пользователи домена) groups=10005(пользователи домена)
Код: Выделить всё
wbinfo -a test%111111
plaintext password authentication succeeded
challenge/response password authentication succeeded
Код: Выделить всё
ntlm_auth --request-nt-key --username=test --password=11111
NT_STATUS_OK: Success (0x0)
При попытке входя пользователя test по ssh получаем следующее:
трижды запрашивается пароль, но в конце все равно выкидывает
Код: Выделить всё
ssh test@server
Password:
Password:
Password:
Permission denied (publickey,keyboard-interactive).
в файле /var/log/auth
Код: Выделить всё
May 12 10:26:12 server sshd[9628]: pam_winbind(sshd): Verify user 'test' with password '111111'
May 12 10:26:12 server sshd[9628]: pam_winbind(sshd): user 'test' granted access
May 12 10:26:12 server sshd[9628]: pam_winbind(sshd): Returned user was 'test'
May 12 10:26:16 server sshd[9629]: pam_winbind(sshd): Verify user 'test' with password '111111'
May 12 10:26:16 server sshd[9629]: pam_winbind(sshd): user 'test' granted access
May 12 10:26:16 server sshd[9629]: pam_winbind(sshd): Returned user was 'test'
May 12 10:26:19 server sshd[9630]: pam_winbind(sshd): Verify user 'test' with password '111111'
May 12 10:26:19 server sshd[9630]: pam_winbind(sshd): user 'test' granted access
May 12 10:26:19 server sshd[9630]: pam_winbind(sshd): Returned user was 'test'
в файле /var/log/messages
Код: Выделить всё
May 12 10:26:12 server sshd[9628]: pam_winbind(sshd): user 'test' granted access
May 12 10:26:12 server kernel: pid 9628 (sshd), uid 0: exited on signal 11
May 12 10:26:16 server sshd[9629]: pam_winbind(sshd): user 'test' granted access
May 12 10:26:16 server kernel: pid 9629 (sshd), uid 0: exited on signal 11
May 12 10:26:19 server sshd[9630]: pam_winbind(sshd): user 'test' granted access
May 12 10:26:19 server kernel: pid 9630 (sshd), uid 0: exited on signal 11
в файле /var/log/debug
Код: Выделить всё
May 12 10:26:07 server sshd[9628]: pam_winbind(sshd): [pamh: 0x801e089c0] ENTER: pam_sm_authenticate (flags: 0x0001)
May 12 10:26:07 server sshd[9628]: pam_winbind(sshd): getting password (0x00000001)
May 12 10:26:12 server sshd[9628]: pam_winbind(sshd): request wbcLogonUser succeeded
May 12 10:26:12 server sshd[9628]: pam_winbind(sshd): [pamh: 0x801e089c0] LEAVE: pam_sm_authenticate returning 0 (PAM_SUCCESS)
May 12 10:26:12 server sshd[9628]: pam_winbind(sshd): [pamh: 0x801e089c0] ENTER: pam_sm_acct_mgmt (flags: 0x0000)
May 12 10:26:12 server sshd[9629]: pam_winbind(sshd): [pamh: 0x801e089c0] ENTER: pam_sm_authenticate (flags: 0x0001)
May 12 10:26:12 server sshd[9629]: pam_winbind(sshd): getting password (0x00000001)
May 12 10:26:16 server sshd[9629]: pam_winbind(sshd): request wbcLogonUser succeeded
May 12 10:26:16 server sshd[9629]: pam_winbind(sshd): [pamh: 0x801e089c0] LEAVE: pam_sm_authenticate returning 0 (PAM_SUCCESS)
May 12 10:26:16 server sshd[9629]: pam_winbind(sshd): [pamh: 0x801e089c0] ENTER: pam_sm_acct_mgmt (flags: 0x0000)
May 12 10:26:16 server sshd[9630]: pam_winbind(sshd): [pamh: 0x801e089c0] ENTER: pam_sm_authenticate (flags: 0x0001)
May 12 10:26:16 server sshd[9630]: pam_winbind(sshd): getting password (0x00000001)
May 12 10:26:19 server sshd[9630]: pam_winbind(sshd): request wbcLogonUser succeeded
May 12 10:26:19 server sshd[9630]: pam_winbind(sshd): [pamh: 0x801e089c0] LEAVE: pam_sm_authenticate returning 0 (PAM_SUCCESS)
May 12 10:26:19 server sshd[9630]: pam_winbind(sshd): [pamh: 0x801e089c0] ENTER: pam_sm_acct_mgmt (flags: 0x0000)
Есть еще один момент - существование домашнего каталога пользователя.
Для того, что бы каталог создавался автоматически необходимо собрать из портов модуль pam_mkhomedir.
Он у меня собран.
Но если добавлять этот модуль в раздел session, где он и должен быть, не происходит ровным счетом ничего. Где-то на просторах сети нашел, что его надо переместить в раздел auth.
Итак, добавляем его в файл /etc/pam.d/sshd:
Код: Выделить всё
auth required /usr/local/lib/pam_mkhomedir.so debug
дефолтные параметры модуля меня устраивают.
Однако при входе я получил тоже самое.
В файле /var/log/auth.log
Код: Выделить всё
May 12 10:35:33 server sshd[9765]: in openpam_dispatch(): /usr/local/lib/pam_mkhomedir.so: no pam_sm_authenticate()
May 12 10:35:37 server sshd[9765]: pam_winbind(sshd): Verify user 'test' with password '111111'
May 12 10:35:37 server sshd[9765]: pam_winbind(sshd): user 'test' granted access
May 12 10:35:37 server sshd[9765]: pam_winbind(sshd): Returned user was 'test'
May 12 10:35:37 server sshd[9766]: in openpam_dispatch(): /usr/local/lib/pam_mkhomedir.so: no pam_sm_authenticate()
May 12 10:35:41 server sshd[9766]: pam_winbind(sshd): Verify user 'test' with password '111111'
May 12 10:35:41 server sshd[9766]: pam_winbind(sshd): user 'test' granted access
May 12 10:35:41 server sshd[9766]: pam_winbind(sshd): Returned user was 'test'
May 12 10:35:41 server sshd[9767]: in openpam_dispatch(): /usr/local/lib/pam_mkhomedir.so: no pam_sm_authenticate()
May 12 10:35:44 server sshd[9767]: pam_winbind(sshd): Verify user 'test' with password '111111'
May 12 10:35:44 server sshd[9767]: pam_winbind(sshd): user 'test' granted access
May 12 10:35:44 server sshd[9767]: pam_winbind(sshd): Returned user was 'test'
в файле /var/log/messages
Код: Выделить всё
May 12 10:35:33 server sshd[9765]: in openpam_dispatch(): /usr/local/lib/pam_mkhomedir.so: no pam_sm_authenticate()
May 12 10:35:37 server sshd[9765]: pam_winbind(sshd): user 'test' granted access
May 12 10:35:37 server sshd[9766]: in openpam_dispatch(): /usr/local/lib/pam_mkhomedir.so: no pam_sm_authenticate()
May 12 10:35:37 server kernel: pid 9765 (sshd), uid 0: exited on signal 11
May 12 10:35:41 server sshd[9766]: pam_winbind(sshd): user 'test' granted access
May 12 10:35:41 server sshd[9767]: in openpam_dispatch(): /usr/local/lib/pam_mkhomedir.so: no pam_sm_authenticate()
May 12 10:35:41 server kernel: pid 9766 (sshd), uid 0: exited on signal 11
May 12 10:35:44 server sshd[9767]: pam_winbind(sshd): user 'test' granted access
May 12 10:35:44 server kernel: pid 9767 (sshd), uid 0: exited on signal 11
в debug файле строки ровно теже, что и без модуля.
Таким образом получается, что модуль pam_mkhomedir либо не работает, либо я его использую не по назначению...
Кстати, если создать домашний каталог пользователя test руками и дать ему соответствующего хозяина и группу ничего не меняется. Пользователь все равно не может войти в систему.
Локально в консоли проверить не могу. Сервак очень далеко от меня. А на месте нет никого, кто бы хоть что-то мог сделать в консоли.
В политиках безопасности домена и контроллера домена выставлено следующий параметр:
Сетевая безопасность: уровень проверки подлинности LAN Manager - LM и NTLM ответы с использованием сессионной безопастности.
На сколько я понял - это означает, что будут выдаватся ответы LM и NTLM, а при согласовании и NTLMv2.
На самом деле с ntlm аутентификацией проблем нет. На этом сервере успешно работает squid с ntlm аутентификацией пользователей. Также успешно работает dovecot SASL. Клиенты из Thunderbird-а успешно проходят аутентификацию по NTLM.
Проверка существования пользователей домена также успешно проходит по nss_winbind.
Но как только дело доходит до проверки пароля средствами pam_winbind - все, дело дрянь. Ни одна проверка не проходит.
Дополнительно привожу файлы nsswitch.conf и krb5.conf:
Код: Выделить всё
# cat /etc/krb5.conf
[libdefaults]
default_realm = RS.LOCAL
clockskew = 300
ticket_lifetime = 24H
dns_lookup_realm = false
dns_lookup_kdc = false
kdc_req_checksum_type = 2
checksum_type = 2
ccache_type = 1
forwardable = true
proxiable = true
[realms]
RS.LOCAL = {
kdc = tcp/rs-dc.rs.local
admin_server = tcp/rs-dc.rs.local
default_domain = rs.local
}
[domain_realm]
RS.LOCAL = RS.LOCAL
.rs.local = RS.LOCAL
Код: Выделить всё
# cat /etc/nsswitch.conf
#
# nsswitch.conf(5) - name service switch configuration file
# $FreeBSD: src/etc/nsswitch.conf,v 1.1.10.1.6.1 2010/12/21 17:09:25 kensmith Exp $
#
group: files winbind
hosts: files dns
networks: files
passwd: files winbind
shells: files
services: files
protocols: files
rpc: files
Код: Выделить всё
# klist
Credentials cache: FILE:/tmp/krb5cc_0
Principal: SERVER$@RS.LOCAL
Issued Expires Principal
May 12 11:40:18 May 12 21:40:18 krbtgt/RS.LOCAL@RS.LOCAL
May 12 11:40:18 May 12 21:40:18 ldap/rs-dc.rs.local@RS.LOCAL
May 12 11:40:18 May 12 21:40:18 ldap/rs-dc.rs.local@RS.LOCAL
May 12 11:40:18 May 12 21:40:18 ldap/rs-dc.rs.local@RS.LOCAL
May 12 11:40:18 May 12 21:40:18 ldap/rs-dc.rs.local@RS.LOCAL
при проверке лога аудита безопасности на контроллере домена нашел вот что:
Код: Выделить всё
Имя журнала: Security
Подача: Microsoft-Windows-Security-Auditing
Дата: 12.05.2011 13:44:11
Код события: 4776
Категория задачи:Проверка учетных данных
Уровень: Сведения
Ключевые слова:Аудит выполнен успешно
Пользователь: Н/Д
Компьютер: rs-dc.rs.local
Описание:
Контроллер домена попытался проверить учетные данные учетной записи.
Пакет проверки подлинности: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
Учетная запись входа: test
Исходная рабочая станция: \\SERVER
Код ошибки: 0x0
Xml события:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-a5ba-3e3b0328c30d}" />
<EventID>4776</EventID>
<Version>0</Version>
<Level>0</Level>
<Task>14336</Task>
<Opcode>0</Opcode>
<Keywords>0x8020000000000000</Keywords>
<TimeCreated SystemTime="2011-05-12T09:44:11.132Z" />
<EventRecordID>604506</EventRecordID>
<Correlation />
<Execution ProcessID="636" ThreadID="9240" />
<Channel>Security</Channel>
<Computer>rs-dc.rs.local</Computer>
<Security />
</System>
<EventData>
<Data Name="PackageName">MICROSOFT_AUTHENTICATION_PACKAGE_V1_0</Data>
<Data Name="TargetUserName">test</Data>
<Data Name="Workstation">\\SERVER</Data>
<Data Name="Status">0x0</Data>
</EventData>
</Event>
и таких записи три - совпадает с тем, сколько раз запрашивает пароль sshd
Код: Выделить всё
ssh test@server
Password:
Password:
Password:
Permission denied (publickey,keyboard-interactive).
Только я вот чего не понял, а прошел ли проверку пользователь test?
То, что аудит выполнен успешно - это понятно. Но вот результат проведения аудита каков? Или успешный аудит и означает что ползователь успешно прошел проверку? Тогда я вообще не понимаю где здесь собака зарыта...