configurationvsftpd以使用Active Directory进行身份validation

我们正试图给vsftpd访问一些Active Directory用户。

这里是一些configuration文件的内容:

# 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 

但是,当我尝试login时,无论密码是否正确,我都会得到这个响应:

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

有人能指出我们正确的方向吗? 也许可以帮助我们获得更多的debugging信息或解释我们在PAMconfiguration中做错了什么。

在对PAM进行一些阅读之后,我意识到使用pam_ldapaccount接口是没有必要的。 由于我想要做的只是检查密码configuration,我将服务文件设置为:

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

像魅力一样工作。

我还没有与pam_ldap有最好的经验,所以我开始使用SSSD进行域authentication。 我在testing服务器上安装了VSFTPD,并在完全复制了vsftpd.conf文件后成功进行了身份validation。 域用户是否能够对此服务器上的任何其他服务进行身份validation? 我认为你的用户在尝试authentication时没有被发现。

 yum install sssd 

为了使用SSSD进行身份validation,您需要使用安全连接(使用TLS的LDAP,使用TCP / 636的LDAPS或使用TCP / 3269的LDAPS作为全局编录)。

下面是我在工作中使用的configuration文件的编辑版本,以在Centos 6上针对Active Directory进行身份validation。我在同一个林中有多个域,因此我使用LDAP查找,而不是通过Kerberos将服务器join域。让我的生活更轻松

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

写入configuration文件后,只能由root编辑。 如果权限不是600,则SSSD将立即退出,并拥有超级用户权限。

 chmod 600 /etc/sssd/sssd.conf 

启用S​​SSDvalidation(在你的情况下,你可以跳过制作主目录的开关,因为它是针对shell的使用)。

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

启动服务并启用它:

 service sssd start && chkconfig enable sssd 

另见: http : //www.gadgeteering.ca/blogs/active-directory-authentication-linux-through-sssd

如果你想通过Kerberos而不是使用LDAPjoin域,这是我在我的沙箱中所遵循的文章: http : //theblitzbit.com/2013/04/08/make-red-hat-talk-to-windows / 。