vsftpd 流行ftp配置记录说明

jopen 9年前

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 虚拟用户配置:

  1. 创建一个虚拟用户文件,包含可连接的虚拟用户

  2. 修改vsftpd.conf配置文件,添加虚拟用户相关的配置

  3. 配置pam认证

具体详细过程:

  1. 虚拟用户文件/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=virtual

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既可以下载也能上传:

  1. 激活每个用户一个配置文件的功能,在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