vsftp搭建虚拟用户模式

一、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

注意:由于未配置加密证书,数据传输过程中均以明文方式传输,生产环境可能需要配置加密证书。

Snipaste_2024-03-28_19-57-42

二、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

注意:以上并未配置加密,数据传输过程中均与明文传输,包括用户名密码,生产环境可能需要配置证书加密。

Snipaste_2024-03-28_19-57-42

三、配置证书加密

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工具连接,此时再看数据都是加密的:

微信截图_20241205125210

微信截图_20241205125412

posted @   国杰响当当  阅读(216)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示