1. 新建系统用户

$ useradd -s /sbin/nologin -c "VSFTPD SYSTEM Users" vsftpd

2. 创建虚拟用户目录

在系统用户家目录下新建虚拟用户目录,并更改目录权限和属组权限

$ mkdir /home/vsftpd/ftpuser{1,2}
$ chmod 755 /home/vsftpd
$ chown vsftpd:root /home/vsftpd/ftpuser{1,2}

3. 创建虚拟用户

/etc/vsftpd/ 目录下新建 viruser.conf 文件(文件名可以自定义)。

在文件中添加虚拟用户、密码,格式如下:

ftpuser1
123456
ftpuser2
123456

4. 生成 FTP 验证数据库文件

  • 生产验证数据库文件

    $ db_load -T -t hash -f /etc/vsftpd/viruser.conf /etc/vsftpd/viruser.db
  • 更改文件访问权限

    $ chmod 600 /etc/vsftpd/viruser.db

5. 配置登录pam身份验证文件

注释 /etc/pam.d/vsftpd 文件中的所有内容,添加如下配置:

auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/viruser
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/viruser

6. 配置虚拟用户配置文件

  • 创建配置文件目录

    $ mkdir /etc/vsftpd/virconf
  • 添加配置文件以及虚拟用户权限配置

    $ cat>/etc/vsftpd/virconf/ftpuser1<<EOF
    local_root=/home/vsftpd/ftpuser1 #设置登录后禁锢的目录
    anon_umask=022 #设置用户上传的文件的权限为022
    write_enable=YES #给用户写权限
    anon_upload_enable=yes #开放上传权限
    anon_world_readable_only=no #开放下载权限
    anon_mkdir_write_enable=yes #开放创建目录的权限
    anon_other_write_enable=yes #开放删除和重命名的权限
    EOF

    $ cat>/etc/vsftpd/virconf/ftpuser2<<EOF
    local_root=/home/vsftpd/ftpuser2 #设置登录后禁锢的目录
    anon_umask=022 #设置用户上传的文件的权限为022
    write_enable=YES #给用户写权限
    anon_upload_enable=yes #开放上传权限
    anon_world_readable_only=no #开放下载权限
    anon_mkdir_write_enable=yes #开放创建目录的权限
    anon_other_write_enable=yes #开放删除和重命名的权限
    EOF

7. 修改主配置文件

配置文件路径为: /etc/vsftpd/vsftpd.conf

更改配置前,先对原文件进行备份。

$ cp -a /etc/vsftpd/vsftpd.conf{,.bak}
  • 对配置文件进行变更:

    # 更改
    anonymous_enable=NO #禁止匿名用户登录

    # 取消注释
    chroot_local_user=YES #禁止用户访问除主目录以外的目录
    ascii_upload_enable=YES
    ascii_download_enable=YES #设定支持ASCII模式的上传和下载功能

    # 开启IPV4监听,注释IPV6监听
    listen=YSE
    #listen_ipv6=NO

    # 设置虚拟用户进行PAM认证的文件名,文件路径为/etc/pam.d/vsftpd
    pam_service_name=vsftpd

    # 文件尾部加入如下配置
    guest_enable=YES #启动虚拟用户
    guest_username=vsftpd #虚拟用户使用的系统用户名
    user_config_dir=/etc/vsftpd/virconf #虚拟用户使用的配置文件目录
    allow_writeable_chroot=YES #最新版的vsftpd为了安全必须用户主目录(也就是/home/vsftpd/ftpuser1)要有写权限,才能登录
  • 最终所有的开启的配置:

    $ grep -Ev '^&|^#|^[[:space:]]*$' /etc/vsftpd/vsftpd.conf
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    xferlog_file=/var/log/vsftpd.log
    connect_from_port_20=YES
    xferlog_std_format=YES
    ascii_upload_enable=YES
    ascii_download_enable=YES
    chroot_local_user=YES
    listen=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    guest_enable=YES
    guest_username=vsftpd
    user_config_dir=/etc/vsftpd/virconf
    allow_writeable_chroot=YES

8. 重启 vsftpd 服务

$ systemctl restart vsftpd.service

参考链接: