配置 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 配置中做錯了什麼。
在對 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.conf
我在測試伺服器上安裝了 VSFTPD,並且在完全複製您的文件後能夠成功進行身份驗證。域使用者是否能夠對該伺服器上的任何其他服務進行身份驗證?我認為您的使用者在嘗試進行身份驗證時沒有被發現。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 /。