1. 安装

    1
    yum install -y vsftpd db4 db4-utils
  2. 创建用于作为虚拟账号的系统账号

    1
    2
    useradd -d /home/vftpuser -s /sbin/nologin vftpuser 
    chmod 700 /home/vftpuser
  3. 创立虚拟用户表,单行用户名,双行密码

    1
    vim /etc/vsftpd/vftpuser.txt
  4. 生成虚拟用户的db数据库文件

    1
    db_load -T -t hash -f /etc/vsftpd/vftpuser.txt  /etc/vsftpd/vftpuser.db
  5. 在pam.d认证文件中加入授权信息

    1
    vim /etc/pam.d/vsftpd

    首行保留,其他内容注释掉,反正已经不要本地用户FTP的认证了

    • 32位系统增加以下两句:

      1
      2
      auth required pam_userdb.so db=/etc/vsftpd/vftpuser
      account required pam_userdb.so db=/etc/vsftpd/vftpuser
    • 64位系统增加以下两句:

      1
      2
      auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser
      account required /lib64/security/pam_userdb.sodb=/etc/vsftpd/vftpuser
  6. 创建每个虚拟用户自己的配置文件

    1
    vim /etc/vsftpd/vsftpd.conf

    增加配置:user_config_dir=/etc/vsftpd/vconf

  7. 创建chroot_list文件

    1
    touch /etc/vsftpd/chroot_list
  8. vsftpd配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    # Example config file /etc/vsftpd/vsftpd.conf
    #
    # 如果vsftpd处于独立模式,则这是它将侦听传入FTP连接的端口。
    listen_port=21
    #
    # 登入目录
    local_root=/www/wwwroot
    #
    # 是否允许匿名用户登录
    anonymous_enable=NO
    #
    # 设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
    local_enable=YES
    #
    # 设定允许进行写操作(上传、删除),默认为YES
    write_enable=YES
    #
    # 使用本地时间,如果不设置的话默认时间是GMT格林时间,会慢8个小时
    #use_localtime=YES
    #
    # 此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义了FTP服务器最大的并发连接数,当超过此连接数时,服务器拒绝客户端连接。默认值:0(无限制)。
    max_clients=5
    #
    # 此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义每个IP地址最大的并发连接数目。超过这个数目将会拒绝连接。此选项的设置将影响到象网际快车这类的多进程下载软件。默认值为0,表示不限制。
    max_per_ip=3
    #
    # 掩饰码
    local_umask=022
    #
    # 是否允许匿名FTP用户上传文件。
    #anon_upload_enable=YES
    #
    # 是否允许匿名FTP用户能够创建新目录
    #anon_mkdir_write_enable=YES
    #
    # 激活目录消息 - 当远程用户进入某个目录时发送的消息。
    dirmessage_enable=YES
    #
    # 设置为yes时,用户上传和下载文件都会被记录下来,记录文件位置与xferlog_file=/var/log/vsftpd/xferlog
    xferlog_enable=YES
    #
    # 在vsftpd_log_file和xferlog_file文件之间切换登录文件信息,NO 写入 vsftpd_log_file, YES 写入 xferlog_file
    xferlog_std_format=YES
    #
    # 设置另外一个vsftpd的日记文件,也可以不设置
    dual_log_enable=YES
    xferlog_file=/var/log/vsftpd/xferlog
    #
    # 设置日志目录
    vsftpd_log_file=/var/log/vsftpd/vsftpd.log
    #
    # 端口样式连接始发的端口(只要名称不正确的 connect_from_port_20 启用),默认值:20
    #connect_from_port_20=YES
    #
    # 是否修改匿名用户所上传文件的所有权。YES,匿名用户所上传的文件的所有权将改为另外一个不同的用户所有,用户由chown_username参数指定。此选项默认值为NO。
    #chown_uploads=YES
    #
    # 指定拥有匿名用户上传文件所有权的用户
    #chown_username=whoever
    #
    # 远程客户端建立与PASV样式数据连接的连接的超时(以秒为单位),默认值:60。
    #accept_timeout=60
    #
    # 远程客户端响应我们的端口样式数据连接的超时时间(秒)。默认值:60。
    #connect_timeout=60
    #
    # 远程客户端可能在FTP命令之间花费的最长时间(以秒为单位)。如果超时触发,远程客户端将被启动。默认值:300
    #idle_session_timeout=300
    #
    # 超时时间(以秒为单位),大概是允许数据传输停止而无进度的最大时间。如果超时触发,远程客户端将被启动。默认值:300
    #data_connection_timeout=300
    #
    # 本地认证用户允许的最大数据传输速率(以字节为单位)。默认值:0(无限制)
    #local_max_rate=0
    #
    # 建议您在系统上定义一个唯一的用户,ftp服务器可以用作完全独立且无特权的用户。
    #nopriv_user=ftpsecure
    #
    # 是否启动异步传输功能
    #async_abor_enable=YES
    #
    # 是否启用ASCII功能
    ascii_upload_enable=YES
    ascii_download_enable=YES
    #
    # 自定义登录显示的字符串
    #ftpd_banner=Welcome to blah FTP service.
    #
    # 指定某个纯文本作为用户登录时显示的欢迎字眼,也可以放置一些让用户知道本FTP服务器的目录架构
    #banner_file=/etc/vsftpd/welcome.txt
    #
    # 您可以指定一个不允许的匿名电子邮件地址的文件。 显然有助于打击某些DoS攻击。
    #deny_email_enable=YES
    # (default follows)
    #banned_email_file=/etc/vsftpd/banned_emails
    #
    # 锁定某些用户在自家目录中。即当这些用户登录后,不可以转到系统的其他目录,只能在自家目录(及其子目录)下。
    #chroot_local_user=YES
    chroot_list_enable=YES
    # (default follows)
    #chroot_list_file=/etc/vsftpd/chroot_list
    #
    # 此选项默认值为NO , 此时ftpusers 文件中的用户禁止登录FTP 服务器;若此项设为YES ,则 user_list 文件中的用户允许登录 FTP 服务器,而如果同时设置了 userlist_deny=YES ,则 user_list 文件中的用户将不允许登录FTP 服务器,甚至连输入密码提示信息都没有,直接被FTP服务器拒绝
    #userlist_enable=YES
    #
    # 此项默认为YES ,设置是否阻扯user_list 文件中的用户登录FTP 服务器,设置为NO时只允许user_list 当中的用户使用ftp,对于后新建的用户起到屏蔽作用,如果想要使用ftp则必须加入这个列表文件中
    #userlist_deny=NO
    #
    # 当启用“listen”指令时,vsftpd以独立模式运行,并在IPv4套接字上侦听。 该指令不能与listen_ipv6指令一起使用。
    listen=YES
    #
    # 此指令允许侦听IPv6套接字。 要监听IPv4和IPv6套接字,您必须运行两个vsftpd副本和两个配置文件。请确保其中一个listen选项被注释!
    #listen_ipv6=YES
    #
    # 设置 PAM 外挂模块提供的认证服务所使用的配置文件名 ,即/etc/pam.d/vsftpd 文件
    pam_service_name=vsftpd
    #
    # 是否开启用虚拟用户功能
    guest_enable=YES
    #
    # 指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了
    guest_username=ftp
    #
    # 匿名客户端允许的最大数据传输速率(以字节为单位)。默认值:0(无限制)
    #anon_max_rate=0
    #
    # 为匿名用户设置文件创建的umask的值。注意!如果要指定八进制值,请记住“0”前缀,否则该值将被视为基数10整数!默认值:077
    #anon_umask=022
    #
    # 设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名)
    user_config_dir=/etc/vsftpd/virtual_conf
    #
    # 如果要禁止PASV方法获取数据连接,请设置为NO。
    pasv_enable=YES
    #
    # 设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意。默认值为0。把端口范围设在比较高的一段范围内
    pasv_min_port=50000
    pasv_max_port=50020
    #
    # 默认值为NO。为YES时,将关闭PASV模式的安全检查。
    pasv_promiscuous=YES
    #
    # 如果您不想使用PORT方法获取数据连接,则设置为NO。
    #port_enable=YES
    #
    # 默认值为NO。如果要禁用PORT安全检查,确保传出数据连接只能连接到客户端,请设置为YES。
    #port_promiscuous=YES
    #
    # 表明服务器使用 tcp_wrappers 作为主机访问控制方式,tcp_wrappers 可以实现linux 系统中网络服务的基于主机地址的访问控制,在/etc 目录中的hosts.allow 和hosts.deny 两个文件用于设置tcp_wrappers 的访问控制,前者设置允许访问记录,后者设置拒绝访问记录。例如想限制某些主机对FTP 服务器12.36.126.141 的匿名访问,编缉/etc/hosts.allow 文件,如在下面增加两行命令:vsftpd:192.168.2.1:DENY 和vsftpd:192.168.2.20:DENY 表明限制IP 为192.168.2.1/192.168.2.20 主机访问IP 为12.36.126.141 的FTP 服务器,此时FTP 服务器虽可以PING 通,但无法连接
    tcp_wrappers=YES
  9. 重启服务

    1
    systemctl restart vsftpd