一、目标:使用linux本地用户,隐式SSL加密
安装 yum -y install vsftpd
systemctl start vsftpd
systemctl status vsftpd
自启 systemctl enable vsftpd.service
1. VSFTPD的配置文件 vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
force_local_data_ssl=NO
implicit_ssl=YES
ssl_enable=YES
ssl_request_cert=NO
listen_port=990
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/certs/vsftpd.key
pasv_min_port=60000
pasv_max_port=61000
2. SSL证书的生成
sudo openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /etc/ssl/certs/vsftpd.key -out /etc/ssl/certs/vsftpd.pem
-keyout :生成私钥 -out 生成公钥
3. 防火墙的设置
sudo firewall-cmd --zone=public --add-port=990/tcp --permanent
sudo firewall-cmd --zone=public --add-port=60000-61000/tcp --permanent
firewall-cmd --reload
如果不考虑安全因素,则可以直接关闭防火墙:
vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出
二、目标:使用vsftpd虚拟用户,优点:系统更安全、更加便于用户信息的迁移和管理
1. 安装db4
操作系统CENTOS8虚拟机,
yum install db4-utils db4 -y
如果用yum -y install 安装失败,找不到db4安装包,网上找到了资源,用下面命令安装
sudo dnf install https://pkgs.dyn.su/el8/base/x86_64/libdb4-devel-4.8.30-30.el8.x86_64.rpm --skip-broken
2.建立用户账户的文本文件 vusers.txt
user1
user1pass
user2
user2pass
3.生成数据库
# db_load -T -t hash -f vusers.txt vsftpd-virtual-user.db
# chmod 600 vsftpd-virtual-user.db
# rm vusers.txt
4.配置vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
force_local_data_ssl=NO
implicit_ssl=YES
ssl_enable=YES
ssl_request_cert=NO
listen_port=990
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/certs/vsftpd.key
pasv_min_port=60000
pasv_max_port=65535
pam_service_name=vsftpd.virtual
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/home/vftp/$USER
hide_ids=YES
pasv_address=x.x.x.x
5.创建pam文件
# sudo vim /etc/pam.d/vsftpd.virtual
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
account required pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
session required pam_loginuid.so
:wq!
6.创建用户目录
# mkdir /home/vftp
# mkdir -p /home/vftp/{user1,user2}
# chown -R ftp:ftp /home/vftp --将目录主人改为ftp用户
#cd vftp
#chmod 555 user1 -只读:因为设置了chroot_local_user=YES,根据手册说明,用户根目录必须设置为只读,如果要上传文件,则必须创建可读写的子目录
#chmod 555 user2 -只读
7. 脚本:为了方便创建ftp用户,编写了脚本,执行时带2个参数,1是用户名2密码
#!/bin/bash
sudo mkdir /home/vftp/$1
sudo mkdir /home/vftp/$1/ftp
sudo chmod 555 /home/vftp/$1
sudo chown -R ftp:ftp /home/vftp/$1
sudo sh -c "echo ${1}>>/etc/vsftpd/vusers.txt"
sudo sh -c "echo ${2}>>/etc/vsftpd/vusers.txt"
sudo db_load -T -t hash -f /etc/vsftpd/vusers.txt /etc/vsftpd/vsftpd-virtual-user.db
不知何故,重装了centos7.6(原版本8.1),FluentFtp不支持ssl session reuse,只好在 vsftpd.conf 添加一行配置:
require_ssl_reuse=NO
看了fluentftp的论坛,获悉是由于windows API没有提供相关的接口,fluentftp作者只能作罢。
参考文章:
https://www.cyberciti.biz/tips/centos-redhat-vsftpd-ftp-with-virtual-users.html