一、CentOS
1.安装vsftp以及相关依赖
yum -y install vsftpd* pam* db4*
· vsftpd: ftp软件
· pam:认证模块
· DB4:支持文件数据库
关闭selinux
setenforce 0 #暂时关闭
sed -ri 's#(SELINUX=)enforcing#\1disabled#' /etc/selinux/config #永久关闭
grep ^SELINUX= /etc/selinux/config
getenforce
不关可能可以登录但是创建文件和查看会异常
关闭火开放防火墙端口
systemctl stop firewalld #临时关闭
systemctl disable firewalld #禁止开机自启
firewall-cmd --add-service=ftp --permanent && firewall-cmd --reload #开放ftp服务
配置文件 | 作用 |
---|---|
/etc/vsftpd/vsftpd.conf | vsftpd的核心配置文件 |
/etc/vsftpd/ftpusers | 用于指定哪些用户不能访问FTP服务器 |
/etc/vsftpd/user_list | 指定允许使用vsftpd的用户列表文件 |
/etc/vsftpd/vsftpd_conf_migrate.sh | 是vsftpd操作的一些变量和设置脚本 |
/var/ftp/ | 默认情况下匿名用户的根目录 |
配置虚拟用户模式:
1.建立虚拟FTP用户的账号
useradd -s /sbin/nologin vu
2.建立虚拟用户文件
cat >/etc/vsftpd/user<<EOF
user1
123456
user2
456789
EOF
· 基数行代表用户名,偶数行代表密码
3.创建数据文件
· 通过 db_load 工具创建出 Berkeley DB 格式的数据库文件
cd /etc/vsftpd/ && db_load -T -t hash -f user user.db
· -f 指定数据原文件
· -T 允许非Berkeley DB的应用程序使用文本格式转换的DB数据文件
· -t hash 读取文件的基本方法
4.建立虚拟用户的PAM认证文件
cat >>/etc/pam.d/vsftpd.vu<<EOF
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
EOF
# 对应刚才生成user.db的文件
5.备份并修改配置文件
备份
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-default
使用被动模式:
cat>/etc/vsftpd/vsftpd.conf<<EOF
#不允许匿名用户认证
anonymous_enable=NO
# 是否启用写入权限(上传,删除文件)
write_enable=YES
# 用户切换进入目录时显示.message文件
dirmessage_enable=YES
# 启用日志文件,记录
xferlog_enable=YES
# 设置日志文件路径,需要手动touch且设置所属权限为宿主用户
xferlog_file=/var/log/vsftpd.log
# 是否使用 20 端口来连接 FTP,被动模式的时候注释掉
# connect_from_port_20=YES
# 启用标准的xferlog日志格式,禁用此项将使用vsftpd自己的格式
xferlog_std_format=YES
#如果为 YES,vsftpd 将以独立模式运行并监听IPv4的套接字,处理相关连接请求(该指令不能与listen_ipv6 一起使用)
listen=YES
#是否启用 user_list 文件来控制用户登录
userlist_enable=YES
#是否使用 tcp_wrappers 作为主机访问控制方式
tcp_wrappers=YES
#是否允许用户对 ftp 根目录具有写权限,如果设置成不允许而目录实际上却具备写权限,则会报错
allow_writeable_chroot=YES
# 设置启用虚拟用户功能
guest_enable=YES
# 指定虚拟用户的宿主用户
guest_username=vu
# 设置 PAM 外挂模块提供的认证服务所使用的配置文件名 ,即 /etc/pam.d/vsftpd.vu 文件,此文件中file=/etc/vsftpd/ftpusers 字段,说明了 PAM 模块能抵挡的帐号内容来自文件 /etc/vsftpd/ftpusers 中
pam_service_name=vsftpd.vu
# 是否允许本地系统用户登录
local_enable=YES
# 本地用户的 umask 设置,如果注释该设置则默认为077,但一般都设置成 022,他和权限值相反,077权限就是700
local_umask=077
# 是否将所有的用户限制在主目录
chroot_local_user=YES
# 设定虚拟用户的权限符合他们的宿主用户
virtual_use_local_privs=YES
# 设置虚拟用户个人vsftpd的配置文件路径
user_config_dir=/etc/vsftpd/user_dir
# 被动模式
# 允许服务器被动模式
pasv_enable=YES
# 设置被动模式服务器的最大端口号
pasv_max_port=24600
# 设置被动模式服务器的最小端口号
pasv_min_port=24500
EOF
6.为虚拟用户建立独立的配置及文件
mkdir /etc/vsftpd/user_dir
touch /var/log/vsftpd.log
chown vu:vu /var/log/vsftpd.log
cat >/etc/vsftpd/user_dir/user1<<EOF
# 设置虚拟用户数据的存放路径
local_root=/data/ftp/user1
EOF
cat >/etc/vsftpd/user_dir/user2<<EOF
# 设置虚拟用户数据的存放路径
local_root=/data/ftp/user2
EOF
7.创建虚拟用户数据存放目录
mkdir -p /data/ftp/{user1,user2}
chown vu:vu /data/ftp -R
chmod 700 -R /data/ftp
8.重启并测试
systemctl restart vsftpd
注意:由于未配置加密证书,数据传输过程中均以明文方式传输,生产环境可能需要配置加密证书。
二、Ubuntu
1.安装VSFTPD及其需要的工具
安装
apt-get -y install vsftpd db-util
设置VSFTPD开机启动
systemctl enable vsftpd.service
配置虚拟用户
1.创建存储目录
mkdir -p /data/ftp
2.建立虚拟FTP用户的账号
useradd -d /data/ftp -s /sbin/nologin vu
3.创建虚拟用户文件
mkdir -p /etc/vsftpd
cat >/etc/vsftpd/user<<'EOF'
user1
123456
user2
456789
EOF
奇数行用户名,偶数行密码
5.生成db文件
· 通过 db_load 工具创建出 Berkeley DB 格式的数据库文件
db_load -T -t hash -f /etc/vsftpd/user /etc/vsftpd/user.db
· -f 指定数据原文件
· -T 允许非Berkeley DB的应用程序使用文本格式转换的DB数据文件
· -t hash 读取文件的基本方法
4.建立虚拟用户的PAM认证文件
cat >/etc/pam.d/vsftpd.vu<<EOF
auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/user
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/user
EOF
# 对应刚才生成user.db的文件
5.备份并修改配置文件
备份
mv /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf-default
使用被动模式:
cat>/etc/vsftpd.conf<<EOF
#不允许匿名用户认证
anonymous_enable=NO
# 是否启用写入权限(上传,删除文件)
write_enable=YES
# 用户切换进入目录时显示.message文件
dirmessage_enable=YES
# 启用日志文件,记录
xferlog_enable=YES
# 设置日志文件路径,需要手动touch且设置所属权限为宿主用户
xferlog_file=/var/log/vsftpd.log
# 是否使用 20 端口来连接 FTP,被动模式的时候注释掉
# connect_from_port_20=YES
# 启用标准的xferlog日志格式,禁用此项将使用vsftpd自己的格式
xferlog_std_format=YES
#如果为 YES,vsftpd 将以独立模式运行并监听IPv4的套接字,处理相关连接请求(该指令不能与listen_ipv6 一起使用)
listen=YES
#是否启用 user_list 文件来控制用户登录
userlist_enable=YES
#是否使用 tcp_wrappers 作为主机访问控制方式
tcp_wrappers=YES
#是否允许用户对 ftp 根目录具有写权限,如果设置成不允许而目录实际上却具备写权限,则会报错
allow_writeable_chroot=YES
# 设置启用虚拟用户功能
guest_enable=YES
# 指定虚拟用户的宿主用户
guest_username=vu
# 设置 PAM 外挂模块提供的认证服务所使用的配置文件名 ,即 /etc/pam.d/vsftpd.vu 文件,此文件中file=/etc/vsftpd/ftpusers 字段,说明了 PAM 模块能抵挡的帐号内容来自文件 /etc/vsftpd/ftpusers 中
pam_service_name=vsftpd.vu
# 是否允许本地系统用户登录
local_enable=YES
# 本地用户的 umask 设置,如果注释该设置则默认为077,但一般都设置成 022,他和权限值相反,077权限就是700
local_umask=077
# 是否将所有的用户限制在主目录
chroot_local_user=YES
# 设定虚拟用户的权限符合他们的宿主用户
virtual_use_local_privs=YES
# 设置虚拟用户个人vsftpd的配置文件路径
user_config_dir=/etc/vsftpd/user_dir
# 被动模式
# 允许服务器被动模式
pasv_enable=YES
# 设置被动模式服务器的最大端口号
pasv_max_port=24600
# 设置被动模式服务器的最小端口号
pasv_min_port=24500
EOF
6.为虚拟用户建立独立的配置及文件
mkdir /etc/vsftpd/user_dir
touch /var/log/vsftpd.log
chown vu:vu /var/log/vsftpd.log
cat >/etc/vsftpd/user_dir/user1<<EOF
# 设置虚拟用户数据的存放路径
local_root=/data/ftp/user1
EOF
cat >/etc/vsftpd/user_dir/user2<<EOF
# 设置虚拟用户数据的存放路径
local_root=/data/ftp/user2
EOF
7.创建虚拟用户数据存放目录
mkdir -p /data/ftp/{user1,user2}
chown vu:vu /data/ftp -R
chmod 700 -R /data/ftp
8.重启并测试
systemctl restart vsftpd
登录提示500 OOPS: cannot read user list file:/etc/vsftpd.user_list
新建该文件即可:
touch /etc/vsftpd.user_list
注意:以上并未配置加密,数据传输过程中均与明文传输,包括用户名密码,生产环境可能需要配置证书加密。
三、配置证书加密
1.生成自签证书
商用证书需要和相关机构申请,这里测试使用自签证书。
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# mkdir .ssl
[root@localhost vsftpd]# cd .ssl/
[root@localhost .ssl]# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem -days 356
# 填写相关信息
修改证书权限,保证安全:
[root@localhost .ssl]# chmod 400 /etc/vsftpd/.ssl/
2、修改vsFTPd支持证书
打开文件/etc/vsftpd/vsftpd.conf,添加如下信息:
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=TRUE
ssl_sslv2=FALSE
ssl_sslv3=FALSE
require_ssl_reuse=NO
ssl_ciphers=HIGH
rsa_cert_file=/etc/vsftpd/.ssl/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/.ssl/vsftpd.pem
重启服务:
[root@localhost ~]# systemctl restart vsftpd
使用FileZilla工具连接,此时再看数据都是加密的:
标签:ftp,ssl,etc,vu,vsftpd,虚拟,vsftp,user,搭建 From: https://www.cnblogs.com/luguojie/p/18589005