vsftpd部署
- 当前环境
0 18:21:15 root@vsftpd,172.16.15.22:~ # cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
- 下载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
单用户配置
- 修改配置文件。
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中添加允许跳出其主目录的用户名。
--------------------------------------------------------------------------------------------------------------------------------------------------------
- 创建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
- 启动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
- 随便找一个机器作为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主目录的需求,配置如下。
- 修改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
- 创建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
- 配置完成,重启vsftpd服务
0 15:27:17 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # systemctl restart vsftpd.service
- 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.
文章参考
- https://blog.51cto.com/u_14522065/2433463
- https://blog.csdn.net/hahahaxiaoyu/article/details/100582853
写作不易,转载请注明出处,谢谢~~