配置 vsftpd 以使用 Active Directory 进行身份验证

配置 vsftpd 以使用 Active Directory 进行身份验证

我们正在尝试授予一些 Active Directory 用户 vsftpd 访问权限。

以下是一些配置文件的内容:

# 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 配置中做错了什么。

答案1

在阅读了一些有关 PAM 的资料后,我意识到使用该account接口pam_ldap是没有必要的。由于我只想检查密码配置,因此我将服务文件设置为:

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

非常有效。

答案2

我对 pam_ldap 的体验并不好,所以我开始使用 SSSD 进行域身份验证。我在测试服务器上安装了 VSFTPD,在直接复制您的vsftpd.conf文件后能够成功进行身份验证。域用户是否能够向此服务器上的任何其他服务进行身份验证?我认为您的用户在尝试进行身份验证时无法被找到。

yum install sssd

为了使用 SSSD 进行身份验证,您需要使用安全连接(带有 TLS 的 LDAP、通过 TCP/636 的 LDAPS 或通过 TCP/3269 的 LDAPS 用于全局目录)。

下面是我在工作中用来根据 Centos 6 上的 Active Directory 对用户进行身份验证的配置文件的修订版本。我在同一个林中有多个域,因此我使用 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 编辑。如果权限不是 600,SSSD 将立即退出,并拥有 root 所有权。

chmod 600 /etc/sssd/sssd.conf

启用 SSSD 身份验证(在您的情况下,您可以跳过创建主目录的开关,因为它旨在用于 shell 使用)。

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/

相关内容