CentOS 7.x 搭建vsftpd服务

单用户配置

  1. 当前环境。

      0 18:21:15 root@vsftpd,172.16.15.22:~ # cat /etc/redhat-release 
    CentOS Linux release 7.9.2009 (Core)
    
  2. 下载vsftpd包并安装

      0 18:21:19 root@vsftpd,172.16.15.22:~ # mkdir -p /server/packages
      0 18:21:58 root@vsftpd,172.16.15.22:~ # cd /server/packages
      0 18:22:01 root@vsftpd,172.16.15.22:/server/packages # wget http://www.rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/vsftpd-3.0.2-28.el7.x86_64.rpm
      0 18:22:08 root@vsftpd,172.16.15.22:/server/packages # rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm
    
  3. 修改配置文件。

      0 18:22:25 root@vsftpd,172.16.15.22:/server/packages # cd /etc/vsftpd/
      0 18:22:43 root@vsftpd,172.16.15.22:/etc/vsftpd # cp vsftpd.conf{,.bak}
      0 18:23:20 root@vsftpd,172.16.15.22:/etc/vsftpd # egrep -v '^#|^$' vsftpd.conf.bak >vsftpd.conf
      0 18:23:25 root@vsftpd,172.16.15.22:/etc/vsftpd # vim vsftpd.conf
    # 如下对常用的一些配置做解释。
    use_localtime=YES                        # 使用本地时间,否则ftp中的文件会有8小时时差。
    anonymous_enable=NO                      # 关闭匿名登录。
    write_enable=YES                         # 允许本地用户写入。
    xferlog_enable=YES                       # 启用记录用户上传下载的日志。
    xferlog_std_format=YES                   # 启用日志格式化。
    xferlog_file=/var/log/xferlog            # 设置日志目录。
    local_enable=YES                         # 开启本地账户登录。
    local_umask=022                          # 设置本地用户上传文件的默认文件掩码(022代表最终文件权限为755)。
    local_root=/server/ftpdir                # 设置本地用户登录后的主目录。
    userlist_enable=YES                      # 是否启用“限制登录名单”的功能。
    userlist_deny=NO                         # NO代表user_list名单中的用户可登录,YES代表名单中的用户不可登录。
    userlist_file=/etc/vsftpd/user_list      # 指定名单文件的路径,此文件默认存在。
    allow_writeable_chroot=YES               # 开启目录限制名单可写。
    chroot_list_enable=YES                   # 是否启用“限制目录切换名单”功能。
    chroot_local_user=YES                    # 限制用户只能在自己的主目录。
    chroot_list_file=/etc/vsftpd/chroot_list # 指定名单文件的路径,此文件需手动创建。
    listen=YES                               # 启用独立监听。
    listen_port=50522                        # 自定义监听端口。
    connect_from_port_20=YES                 # 开启主动模式数据传输的20端口。
    pam_service_name=vsftpd                  # pam模块的名称,默认放在/etc/pam.d/vsftpd。
    tcp_wrappers=YES                         # 启用主机访问控制机制。
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    # 此处对vsftpd.conf中比较绕的两块配置进行说明。
    1. 关于限制登录名单功能,该功能由以下三个配置项决定:
    ① userlist_enable:是否启用“限制登录名单”的功能。
    ② userlist_deny为YES,表示拒绝user_list文件中的用户登录;为NO表示允许user_list文件中用户的登录。
    ③ userlist_file用来指定存储用户名单的文件,一个用户名占一行。
    2. 关于限制目录切换名单功能,该功能由以下三个配置项决定:
    ① chroot_list_enable:是否启用“限制目录切换名单”功能。
    ② chroot_local_user为YES,表示所有的用户都只能在设置的主目录内切换;为NO表示所有用户都可任意切换目录。
    ③ chroot_list_file用来指定存储用户名单的文件,一个用户名占一行。
    综上所述,以方便的理解记忆的角度,全部设为白名单,即:
    userlist_enable=YES、userlist_deny=NO、userlist_file中添加允许登录的用户名。
    chroot_list_enable=YES、chroot_local_user=YES、chroot_list_file中添加允许跳出其主目录的用户名。
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    
  4. 创建ftp用户。

      0 19:45:55 root@vsftpd,172.16.15.22:/etc/vsftpd # useradd -s /sbin/nologin -d /server/ftpdir shannon
      0 19:46:00 root@vsftpd,172.16.15.22:/etc/vsftpd # passwd shannon
    # 此处注意,出于安全我创建用户使用的shell是/sbin/nologin,需要将其添加到/etc/shells文件中以表合法,否则ftp客户端登录验证会报530错误。
      0 19:46:12 root@vsftpd,172.16.15.22:/etc/vsftpd # cat /etc/shells 
    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash
    /bin/tcsh
    /bin/csh
      0 19:46:29 root@vsftpd,172.16.15.22:/etc/vsftpd # echo "/sbin/nologin" >>/etc/shells
    # 创建配置文件中的配置文件中的chroot_list
      0 19:47:05 root@vsftpd,172.16.15.22:/etc/vsftpd # cp -p user_list chroot_list
      0 19:47:14 root@vsftpd,172.16.15.22:/etc/vsftpd # >chroot_list
      0 19:47:47 root@vsftpd,172.16.15.22:/etc/vsftpd # ls -l
    总用量 24
    -rw------- 1 root root    0 5月  11 19:51 chroot_list    # 限制目录切换白名单
    -rw------- 1 root root  125 10月 14 2020 ftpusers        # 限制用户登录黑名单。
    -rw------- 1 root root  361 10月 14 2020 user_list       # 限制用户登录白名单。
    -rw------- 1 root root  455 5月  11 18:25 vsftpd.conf    # vsftpd的配置文件。
    -rw------- 1 root root 5116 5月  11 18:22 vsftpd.conf.bak
    -rwxr--r-- 1 root root  338 10月 14 2020 vsftpd_conf_migrate.sh
    # 清空白名单,将创建的ftp用户添加到user_list中。
      0 19:48:49 root@vsftpd,172.16.15.22:/etc/vsftpd # echo shannon >user_list
    # 在ftp主目录中创建几个文件作为测试文件
      0 19:48:55 root@vsftpd,172.16.15.22:/etc/vsftpd # touch /server/ftpdir/test{1..3}
      0 19:48:57 root@vsftpd,172.16.15.22:/etc/vsftpd # ll /server/ftpdir/
    总用量 0
    -rw-r--r-- 1 root root 0 5月  11 20:21 test1
    -rw-r--r-- 1 root root 0 5月  11 20:21 test2
    -rw-r--r-- 1 root root 0 5月  11 20:21 test3
    
  5. 启动vsftpd服务.

      0 19:51:17 root@vsftpd,172.16.15.22:/etc/vsftpd # systemctl start vsftpd.service 
      0 19:51:48 root@vsftpd,172.16.15.22:/etc/vsftpd # systemctl enable vsftpd.service
      0 19:52:57 root@vsftpd,172.16.15.22:/etc/vsftpd # netstat -lntp | grep 50522
    tcp        0      0 0.0.0.0:50522           0.0.0.0:*               LISTEN      15189/vsftpd
    
  6. 随便找一个机器作为ftp客户端进行测试。

      0 17:54:27 root@test,172.16.2.9:~ # yum -y install ftp
      0 19:54:02 root@test,172.16.2.9:~ # ftp 172.16.15.22 50522
    Connected to 172.16.15.22 (172.16.15.22).
    220 (vsFTPd 3.0.2)
    Name (172.16.15.22:root): shannon
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (172,16,15,22,63,63).
    150 Here comes the directory listing.
    -rw-r--r--    1 0        0               0 May 11 19:48 test1
    -rw-r--r--    1 0        0               0 May 11 19:48 test2
    -rw-r--r--    1 0        0               0 May 11 19:48 test3
    226 Directory send OK.
    

多用户配置

  • 说明:有时我们也会有不同用户访问不同ftp主目录的需求,配置如下。
  1. 修改vsftpd的配置文件。

      0 14:44:05 root@vsftpd,172.16.15.22:/etc/vsftpd # vim vsftpd.conf
    use_localtime=YES
    anonymous_enable=NO
    write_enable=YES
    xferlog_enable=YES
    xferlog_std_format=YES
    xferlog_file=/var/log/xferlog
    local_enable=YES
    local_umask=022
    user_config_dir=/etc/vsftpd/user_config          # 指定多用户配置文件的目录
    userlist_enable=YES
    userlist_deny=NO
    userlist_file=/etc/vsftpd/user_list
    allow_writeable_chroot=YES
    chroot_local_user=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    listen=YES
    listen_port=50522
    connect_from_port_20=YES
    pam_service_name=vsftpd
    tcp_wrappers=YES
    # 创建配置文件目录,并添加配置文件,配置文件的名字需要与用户名一致。
      0 14:49:07 root@vsftpd,172.16.15.22:/etc/vsftpd # mkdir -p /etc/vsftpd/user_config
      0 14:49:12 root@vsftpd,172.16.15.22:/etc/vsftpd # cd /etc/vsftpd/user_config
      0 15:12:14 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # echo 'local_root=/server/ftpdir' >shannon
      0 15:13:27 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # echo 'local_root=/server/ftpdir2' >shannon2
      0 15:13:57 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # ll
    总用量 8
    -rw-r--r-- 1 root root 26 5月  12 15:12 shannon
    -rw-r--r-- 1 root root 27 5月  12 15:13 shannon2
    
  2. 创建shannon2用户

      0 15:14:00 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # useradd -s /sbin/nologin -d /server/ftpdir2 shannon2
      0 15:19:18 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # passwd shannon2
    # 创建测试文件
      0 15:25:53 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # touch /server/ftpdir2/info{1..3}
    # 将此用户添加至可登录白名单中
      0 15:26:29 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # echo 'shannon2' >>/etc/vsftpd/user_list 
      0 15:26:40 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # cat /etc/vsftpd/user_list
    shannon
    shannon2
    
  3. 配置完成,重启vsftpd服务.

      0 15:27:17 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # systemctl restart vsftpd.service
    
  4. ftp客户端测试,实现不同ftp用户登录到不同主目录中。

      0 15:34:36 root@test,172.16.2.9:~ # ftp 172.16.15.22 50522
    Connected to 172.16.15.22 (172.16.15.22).
    220 (vsFTPd 3.0.2)
    Name (172.16.15.22:root): shannon
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (172,16,15,22,63,63).
    150 Here comes the directory listing.
    -rw-r--r--    1 0        0               0 May 11 19:48 test1
    -rw-r--r--    1 0        0               0 May 11 19:48 test2
    -rw-r--r--    1 0        0               0 May 11 19:48 test3
    226 Directory send OK.
    ftp> close
    221 Goodbye.
    ftp> open 172.16.15.22 50522
    Connected to 172.16.15.22 (172.16.15.22).
    220 (vsFTPd 3.0.2)
    Name (172.16.15.22:root): shannon2
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (172,16,15,22,236,87).
    150 Here comes the directory listing.
    -rw-r--r--    1 0        0               0 May 12 15:27 info1
    -rw-r--r--    1 0        0               0 May 12 15:27 info2
    -rw-r--r--    1 0        0               0 May 12 15:27 info3
    226 Directory send OK.
    ftp> quit
    221 Goodbye.
    

参考

写作不易,转载请注明出处,谢谢~~

posted @ 2021-05-12 15:55  merlee  阅读(124)  评论(0编辑  收藏  举报