CentOS 7.x 搭建vsftpd服务

Posted 惊雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS 7.x 搭建vsftpd服务相关的知识,希望对你有一定的参考价值。


vsftpd部署

  1. 当前环境
  0 18:21:15 root@vsftpd,172.16.15.22:~ # cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
  1. 下载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

单用户配置

  1. 修改配置文件。
  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中添加允许跳出其主目录的用户名。
--------------------------------------------------------------------------------------------------------------------------------------------------------
  1. 创建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
  1. 启动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
  1. 随便找一个机器作为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
  1. 创建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
  1. 配置完成,重启vsftpd服务
  0 15:27:17 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # systemctl restart vsftpd.service
  1. 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.


文章参考


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

以上是关于CentOS 7.x 搭建vsftpd服务的主要内容,如果未能解决你的问题,请参考以下文章

CentOS搭建Vsftpd服务器

centos搭建ftp服务

CentOS 7搭建FTP服务器

在centos中搭建vsftpd服务器

CentOS 6.x上搭建vSFTPD服务器搭建与配置详解

腾讯云服务器基于centos7搭建ftp服务器(vsftpd)