Linux vsFTPd:针对虚拟用户的每用户IP筛选

Linux vsFTPd:针对虚拟用户的每用户IP筛选,linux,ftp,Linux,Ftp,我正在使用虚拟用户运行vsFTPd FTP服务器(即,用户存储在Berkeley DB中,在操作系统级别不存在)。用户通过/etc/pam.d/ftp进行身份验证: %PAM-1.0 需要身份验证的pam_userdb.so db=/etc/vsftpd/vsftpd虚拟用户 所需帐户pam_userdb.so db=/etc/vsftpd/vsftpd虚拟用户 我想通过tcp_包装器实现用户级IP过滤,例如: /etc/hosts.deny: vsftpd: toto@10.10.10.10

我正在使用虚拟用户运行vsFTPd FTP服务器(即,用户存储在Berkeley DB中,在操作系统级别不存在)。用户通过/etc/pam.d/ftp进行身份验证:

%PAM-1.0 需要身份验证的pam_userdb.so db=/etc/vsftpd/vsftpd虚拟用户 所需帐户pam_userdb.so db=/etc/vsftpd/vsftpd虚拟用户

我想通过tcp_包装器实现用户级IP过滤,例如:

/etc/hosts.deny:

vsftpd: toto@10.10.10.10
(用户“toto”)是虚拟用户

但是,toto可以从10.10.10.10登录到FTP服务器:

Status: Connecting to 10.10.10.10:21...
Status: Connection established, waiting for welcome message...
Response: 220 "FTP server"
Command: USER toto
Response: 331 Please specify the password.
Command: PASS ********
Response: 230 Login successful.
Status: Connected

如何让vsftpd的虚拟用户使用tcp_包装器?如何调试对tcp_wrappers的系统调用,以确保vsftpd向tcp_wrappers传递正确的用户名?

tcp wrappers可能听起来很有希望,但不起作用(详细解释),但是您可以通过PAM达到相同的粒度级别

例如,如果您的vsFTPd是使用PAM支持(ldd/usr/sbin/vsFTPd | grep PAM)编译的,您可以找到PAM的FTP conf文件,并替换帐户行以使用PAM访问控制

# vi /etc/pam.d/vsftpd
account    include    password-auth  (comment this line out)
# add the following line
account    required     pam_access.so
然后您可以编辑/etc/security/access.conf并创建更复杂的规则来定制您的需求,即

+ : restricted_username : 192.168.1.10
+ : ALL EXCEPT restricted_username : ALL
- : ALL : ALL
上述规则将允许用户“restricted_username”仅从该特定IP登录,同时允许其余用户从所有其他来源登录