vsFTPd使用SSSD进行身份validation

我目前正在尝试设置一个使用SSSD通过Active Directory进行身份validation的FTP服务器。

我的configuration文件如下:

的/ etc / VSFTPD / VSFTPD:

[root@StudentOrgFTP vsftpd]# cat vsftpd.conf anonymous_enable=NO 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=YES userlist_log=YES tcp_wrappers=NO chroot_local_user=YES session_support=YES 

/etc/sssd/sssd.conf

 [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 ldap_id_mapping = True override_shell = /bin/bash override_homedir = /srv/student_ftp/%u # Connection Properties ldap_uri = ldaps://xxxxx.xxxxxxxx.xxx # Temporary measure until I can get a hold of a proper certificate ldap_tls_reqcert = never ldap_search_base = dc=xxxxxxxx,dc=xxx ldap_group_search_base = OU=students,dc=xxxxxxxx,dc=xxx ldap_default_bind_dn = CN=<AD User>,OU=Users,OU=Labs,dc=xxxxxxxx,dc=xxx ldap_default_authtok_type = password ldap_default_authtok = <password> ldap_access_filter = (&(objectClass=person)(ou=students,dc=xxxxxxxx,dc=xxx)) 

/etc/pam.d/vsftpd

 auth required pam_env.so auth sufficient pam_sss.so ce with pam_winbind.so account sufficient pam_sss.so ce with pam_winbind.so session required pam_loginuid.so session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpuse rs onerr=succeed auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth 

我能够得到SSSD与这个configuration工作,我可以运行'身份证用户名'或'getent密码用户名',他们都返回正确的信息,但如果我使用通用的Linux'FTP'命令vsftp似乎无法validation正确。

编辑: / var / log /安全输出:

 Jan 27 04:32:36 StudentOrgFTP vsftpd: vsftpd: PAM (vsftpd) illegal module type: ce Jan 27 04:32:36 StudentOrgFTP vsftpd: PAM pam_parse: expecting return value; [...with] Jan 27 04:32:36 StudentOrgFTP vsftpd: PAM (vsftpd) illegal module type: ce Jan 27 04:32:36 StudentOrgFTP vsftpd: PAM pam_parse: expecting return value; [...with] Jan 27 04:32:36 StudentOrgFTP vsftpd: PAM (vsftpd) illegal module type: rs Jan 27 04:32:36 StudentOrgFTP vsftpd: PAM pam_parse: expecting return value; [...onerr=succeed] Jan 27 04:32:36 StudentOrgFTP vsftpd: PAM (vsftpd) no module name supplied Jan 27 04:32:36 StudentOrgFTP vsftpd: pam_sss(vsftpd:auth): authentication success; logname= uid=0 euid=0 tty=ftp ruser=some_username rhost=localhost user=some_username Jan 27 04:32:36 StudentOrgFTP vsftpd: pam_sss(vsftpd:account): Access denied for user some_username: 6 (Permission denied) Jan 27 04:32:36 StudentOrgFTP vsftpd: pam_sss(vsftpd:account): Access denied for user some_username: 6 (Permission denied) 

我首先检查了shell设置,并将以下行添加到我的/etc/sss/sssd.conf中:

 [domain/example.org] override_shell = /sbin/rbash 

但是这并没有解决问题。

在发表评论之后

 account [default=bad success=ok user_unknown=ignore] pam_sss.so 

/etc/pam.d/common-auth活动目录中,用户可以用他们的AD账户login。

但是这个设置会影响比vsftpd更多的login服务。 所以我删除了该行的注释(回到原来的版本),并改为使用vsftpd'd pamconfiguration:

/etc/pam.d/vsftpd

 # Standard behaviour for ftpd(8). auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed # Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so. # Standard pam includes ##@include common-account account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so account requisite pam_deny.so account required pam_permit.so account sufficient pam_localuser.so @include common-session @include common-auth auth required pam_shells.so 

我怀疑缺less的shell是问题,configuration文件使用override_shell指令为shell指定一个本地覆盖。

你在/ var / log / secure(或你的发行版的等价物)中看到任何错误吗? 你可以打开[pam]和[domain]部分的debug_level,看看有没有什么感兴趣的东西?

检查AD用户是否能够通过另一个PAM服务进行身份validation(也许是su)也可能有助于查明问题在于SSSD还是vsftpd。

我的猜测是,问题是

 auth required pam_shells.so 

在你的/etc/pam.d/vsftpdconfiguration文件中。 这要求所有用户都有一个在/ etc / shells中列出的默认shell,而您的ADauthentication可能没有正确提供。

我会通过简单的评论这条线来进行testing,然后如果有效的话,就会决定是否需要该testing提供的安全性,以及是否知道如何使它与AD和SSSD协同工作。

检查用户shell! 如果shell没有列出( chsh -l ),这是/etc/pam.d/vsftpd进入的地方。
我们将用户从默认的/usr/bin/ksh更改为/bin/ksh ,不需要其他更改。