Configurando o vsftpd para autenticar com o Active Directory

2

Estamos tentando fornecer acesso vsftpd a alguns usuários do Active Directory.

Aqui estão alguns conteúdos do arquivo de configuração:

# 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

No entanto, quando tento fazer o login, recebo esta resposta independentemente da senha correta ou não:

# 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."

Alguém pode nos indicar a direção certa? Talvez nos ajude a obter mais algumas mensagens de depuração ou explique o que estamos fazendo de errado na configuração do PAM.

    
por Belmin Fernandez 14.02.2014 / 21:07

2 respostas

2

Depois de fazer algumas leituras no PAM, percebi que não era necessário usar a interface account para pam_ldap . Como tudo que eu queria fazer era verificar a configuração da senha, configurei o arquivo de serviço para isso:

#%PAM-1.0
auth     required    pam_ldap.so
account  required    pam_permit.so
session  required    pam_limits.so

Trabalhou como um encanto.

    
por 17.02.2014 / 00:11
1

Eu não tive a melhor experiência com o pam_ldap, então comecei a usar o SSSD para autenticação de domínio. Instalei o VSFTPD em um servidor de teste e consegui autenticar com êxito depois de copiar completamente o arquivo vsftpd.conf . Os usuários do domínio podem se autenticar em outros serviços neste servidor? Eu acho que seus usuários não estão sendo encontrados quando estão tentando autenticar.

yum install sssd

Para autenticar com o SSSD, você precisa usar uma conexão segura (LDAP com TLS, LDAPS via TCP / 636 ou LDAPS via TCP / 3269 para o Catálogo Global).

Abaixo está uma versão editada do arquivo de configuração que uso no trabalho para autenticar usuários no Active Directory no Centos 6. Eu tenho vários domínios na mesma floresta, então eu fui com pesquisas LDAP em vez de entrar no servidor para o domínio via Kerberos para tornar minha vida um pouco mais fácil.

[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)))

Depois de escrever o arquivo de configuração, ele só deve ser editável pelo root. O SSSD sairá imediatamente se as permissões forem diferentes de 600, com propriedade de raiz.

chmod 600 /etc/sssd/sssd.conf

Autenticação SSSD ativada (no seu caso, você pode pular o switch para criar diretórios home, pois ele é destinado ao uso do shell).

authconfig --enablesssd --enablesssdauth --enablemkhomedir --updateall

Inicie o serviço e ative-o:

service sssd start && chkconfig enable sssd

Veja também: link

Se você deseja, em vez disso, ingressar no domínio por meio do Kerberos, em vez de usar o LDAP, este é o artigo que segui em meu sandbox: .

    
por 14.02.2014 / 22:37