vsftpd per-IP方式配置: 需要启用vsftpd的tcp_wrappers集成功能,从版本1.1.3开始支持。
编译时修改builddefs.h文件,将#undef VSF_BUILD_TCPWRAPPER改成#define VSF_BUILD_TCPWRAPPERS并重新编译以启用该功能。之后修改vsftpd.conf配置文件:
tcp_wrappers=YES
之后需要一个单独的tcp_wrapper配置文件,并添加如下内容到/etc/hosts.allow文件中,在bsd类的unix系统中,如:
vsftpd: 192.168.1.3: setenv VSFTPD_LOAD_CONF /etc/vsftpd_tcp_wrap.conf
vsftpd: 192.168.1.4: DENY
在linux中,要改成:
vsftpd: 192.168.1.3: export VSFTPD_LOAD_CONF=/etc/vsftpd_tcp_wrap.conf
vsftpd: 192.168.1.4: DENY
第一行: 如果从192.168.1.3连进来的客户端,vsftpd进程会把/etc/vsftpd_tcp_wrap.conf文件作为该连接会话的配置,并且这里的配置选项优先级高于默认的vsftpd配置文件。这个特定非常的强大,可以根据ip地址或一个网段进行指定特定的访问权限控制,或者使一些地址不受max_clients=0的限制,还可以增大或减少一些网段或ip的带宽。
第二行:禁止192.168.1.4的客户端连接。这可以把那些捣乱的客户端拒之门外,并不需要使用xinetd来做。
vsftpd 虚拟用户配置:
创建一个虚拟用户文件,包含可连接的虚拟用户
修改vsftpd.conf配置文件,添加虚拟用户相关的配置
配置pam认证
具体详细过程:
虚拟用户文件/etc/vsftpd/login.txt,内容示例:
tom #username
foo #tom's password
fred #username
bar # user fred's password
执行db_load -T -t hash -f logins.txt /etc/ftpusers.db 生成用户数据库文件,为了安全: chmod 600 /etc/ftpusers.db
2. vsftpd.conf 配置文件内容:guest_enable,guest_username为必须项,login.txt中的用户,会以guest_username的身份访问ftp服务器。
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=realuser
listen=YES
listen_port=10021
pasv_min_port=30000
pasv_max_port=30999
3. pam认证配置,一般为/etc/pam.d/vsftpd或/etc/pam.d/ftp,如果配置文件中指定了pam_service_name=vsftpd,则为前者。
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
注意:虚拟用户只能访问全局可度的文件和目录
以上为简单的ftp虚拟用户配置,下面是更为复杂的ftp配置方式,假如需用区分虚拟用户,以分别进行权限控制,就需要该方式:
为每个用户指定一个配置文件,假如有tom和fred两个用户,希望tom只能下载不能上传,而fred既可以下载也能上传:
激活每个用户一个配置文件的功能,在vsftpd.conf文件中添加:
user_config_dir=/etc/vsftpd_user_conf #需要创建该目录:mkdir /etc/vsftpd_user_conf
2.使tom可以读取ftp服务器/下的所有文件
之前说虚拟用户只能访问全局可读的文件和目录,下面这种方式可以使tom访问到并非全局可读的文件:
echo "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/tom
这样就可以覆盖全局配置中的anon_world_readable_only选项,通过这种方式,可以为不同的虚拟用户赋予不同的访问权限。
3.使fred可以上传和下载
echo "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/fred
echo "write_enable=YES" >> /etc/vsftpd_user_conf/fred
echo "anon_upload_enable=YES" >> /etc/vsftpd_user_conf/fred