下面给你一个在 Ubuntu 上让 vsftpd 通过 LDAP 认证的常见可行方案。
vsftpd 本身不直接支持 LDAP,通常需要借助 PAM + nsswitch / sssd / pam_ldap 来实现。
FTP 客户端
↓
vsftpd
↓
PAM (pam_ldap / sssd)
↓
LDAP 服务器
vsftpd 只负责 FTP 协议
认证交给系统 PAM
LDAP 用户看起来像系统用户
sudo apt update
sudo apt install vsftpd libpam-ldap nslcd
也可用
sssd替代nslcd + pam_ldap(推荐生产环境用 sssd)
sudo nano /etc/nslcd.conf
示例:
uid nslcd
gid nslcd
uri ldap://ldap.example.com
base dc=example,dc=com
binddn cn=readonly,dc=example,dc=com
bindpw yourpassword
ssl no
tls_reqcert never
sudo systemctl restart nslcd
sudo systemctl enable nslcd
sudo nano /etc/nsswitch.conf
确保有:
passwd: files ldap
group: files ldap
测试:
getent passwd ldapuser
能查到说明 LDAP 用户已可见。
sudo nano /etc/pam.d/vsftpd
内容示例:
auth required pam_ldap.so
account required pam_ldap.so
(可保留原有 common-auth 结构)
sudo nano /etc/vsftpd.conf
关键配置:
anonymous_enable=NO
local_enable=YES
write_enable=YES
pam_service_name=vsftpd
如果使用虚拟路径:
chroot_local_user=YES
allow_writeable_chroot=YES
LDAP 用户通常没有 /home/ldapuser
homeDirectory: /home/ldapuser
local_root=/srv/ftp
sudo apt install sssd libnss-sss libpam-sss
/etc/sssd/sssd.conf 示例:
[domain/example]
id_provider = ldap
auth_provider = ldap
ldap_uri = ldap://ldap.example.com
ldap_search_base = dc=example,dc=com
[sssd]
services = nss, pam
domains = example
sudo systemctl restart sssd
PAM 会自动使用 SSSD,无需改 vsftpd PAM。
sudo tail -f /var/log/auth.log
sudo tail -f /var/log/vsftpd.log
常见错误:
✅ 使用 LDAPS / StartTLS
✅ 限制 FTP 用户 Shell(/sbin/nologin)
✅ 考虑用 SFTP 替代 FTP
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置文件。