Настройка vsftpd для аутентификации в Active Directory
Мы пытаемся предоставить доступ к vsftpd некоторым пользователям Active Directory.
Вот некоторые содержимое файла конфигурации:
# egrep -v '^(#.*|)$' vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=NO
tcp_wrappers=YES
dual_log_enable=YES
log_ftp_protocol=YES
local_root=/srv/ftp/users
chroot_local_user=YES
# egrep -v '^(#.*|)$' /etc/pam.d/vsftpd
auth required pam_ldap.so use_first_pass
account required pam_ldap.so
session required pam_limits.so
# egrep -v '^(#.*|)$' /etc/pam_ldap.conf
host ad.example.lan
base dc=example,dc=lan
binddn cn=ftp_auth,dc=example,dc=lan
bindpw password
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_attribute uid sAMAccountName
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute shadowLastChange pwdLastSet
nss_map_objectclass posixGroup group
nss_map_attribute uniqueMember member
pam_login_attribute sAMAccountName
pam_filter objectclass=User
Однако, когда я пытаюсь войти в систему, я получаю этот ответ независимо от правильного пароля или нет:
# tail -f -n0 /var/log/messages /var/log/vsftpd.log
==> /var/log/messages <==
==> /var/log/vsftpd.log <==
Fri Feb 14 14:55:46 2014 [pid 3747] CONNECT: Client "192.168.1.49"
Fri Feb 14 14:55:46 2014 [pid 3747] FTP response: Client "192.168.1.49", "220 (vsFTPd 2.2.2)"
Fri Feb 14 14:55:46 2014 [pid 3747] FTP command: Client "192.168.1.49", "USER melbin"
Fri Feb 14 14:55:46 2014 [pid 3747] [melbin] FTP response: Client "192.168.1.49", "331 Please specify the password."
Fri Feb 14 14:55:46 2014 [pid 3747] [melbin] FTP command: Client "192.168.1.49", "PASS <password>"
Fri Feb 14 14:55:46 2014 [pid 3746] [melbin] FAIL LOGIN: Client "192.168.1.49"
Fri Feb 14 14:55:47 2014 [pid 3747] [melbin] FTP response: Client "192.168.1.49", "530 Login incorrect."
Может ли кто-нибудь указать нам правильное направление? Возможно, поможет нам получить больше отладочных сообщений или объяснить, что мы делаем неправильно в конфигурации PAM.
2 ответа
Прочитав PAM, я понял, что используя account
интерфейс для pam_ldap
не было необходимости Так как все, что я хотел сделать, это проверить конфигурацию пароля, я установил файл службы так:
#%PAM-1.0
auth required pam_ldap.so
account required pam_permit.so
session required pam_limits.so
Работал как шарм.
У меня не было лучшего опыта с pam_ldap, поэтому я начал использовать SSSD для аутентификации домена. Я установил VSFTPD на тестовом сервере и смог успешно пройти аутентификацию после прямого копирования вашего vsftpd.conf
файл. Могут ли пользователи домена проходить аутентификацию на других сервисах на этом сервере? Я думаю, что ваши пользователи не найдены, когда они пытаются аутентифицироваться.
yum install sssd
Для аутентификации с помощью SSSD необходимо использовать безопасное соединение (LDAP с TLS,LDAPS через TCP/636 или LDAPS через TCP/3269 для Глобального каталога).
Ниже приведена отредактированная версия файла конфигурации, который я использую на работе для аутентификации пользователей в Active Directory в Centos 6. У меня есть несколько доменов в одном лесу, поэтому я пошел с поиском LDAP, а не присоединял сервер к домену через Kerberos для сделай мою жизнь немного проще
[sssd]
domains = WORK
services = nss, pam
config_file_version = 2
[pam]
offline_credentials_expiration = 5
[nss]
[domain/WORK]
description = Work domains
enumerate = false
id_provider = ldap
auth_provider = ldap
chpass_provider = none
access_provider = ldap
ldap_pwd_policy = none
ldap_schema = ad
ldap_user_name = sAMAccountName
ldap_user_object_class = person
ldap_group_object_class = group
ldap_id_mapping = True
case_sensitive = false
override_shell = /bin/bash
override_homedir = /home/%u
ldap_uri = ldaps://10.9.8.6:3269
ldap_tls_reqcert = never
ldap_search_base = dc=work,dc=local
ldap_default_bind_dn = CN=Shell Auth Lookup,OU=Service Accounts,DC=work,DC=local
ldap_default_authtok_type = password
ldap_default_authtok = password-for-the-proxy-user
ldap_access_filter = (&(objectClass=person)(|(memberOf:1.2.840.113556.1.4.1941:=CN=shell-admins,OU=Groups,DC=work,DC=local)(memberOf:1.2.840.113556.1.4.1941:=CN=shell-access,OU=Groups,DC=work,DC=local)))
После записи файла конфигурации он должен редактироваться только пользователем root. SSSD немедленно выйдет из системы, если права доступа отличны от 600, с правами root.
chmod 600 /etc/sssd/sssd.conf
Включена аутентификация SSSD (в вашем случае вы можете пропустить переключатель для создания домашних каталогов, так как он нацелен на использование оболочки).
authconfig --enablesssd --enablesssdauth --enablemkhomedir --updateall
Запустите сервис и включите его:
service sssd start && chkconfig enable sssd
Смотрите также: http://www.gadgeteering.ca/blogs/active-directory-authentication-linux-through-sssd
Если вы хотите вместо этого присоединиться к домену через Kerberos вместо использования LDAP, то за этой статьей я следил в своей песочнице: http://theblitzbit.com/2013/04/08/make-red-hat-talk-to-windows/.