当前位置: 首页 > news >正文

FTP服务器部署(vsftpd)

1 部署环境

OpenEuler-24.03-LTS-SP1

Kylin-Server-V10-SP3-2403

2 安装软件

dnf update dnf install vsftpd

3 配置文件

cd /etc/vsftpd cp vsftpd.conf vsftpd.conf~ vi vsftpd.conf

4 配置内容

4.1 基础配置

# 使用IPV4连接

listen=YES

# 禁用IPV6连接
listen_ipv6=NO
# 允许匿名登录(用户名为ftp或anonymous)
anonymous_enable=YES

# 匿名用户仅允许下载全局可读文件
anon_world_readable_only=YES
# 允许本地用户登录
local_enable=YES

# 设置匿名用户创建文件权限默认为644
anon_umask=022

# 设置本地用户创建文件权限默认为644
local_umask=022
# 显示目录说明和欢迎信息,需在目标目录创建文本文件.message,设置权限644
dirmessage_enable=YES
# 启用xferlog日志功能
xferlog_enable=YES
# 启用xferlog格式记录传输日志
xferlog_std_format=YES
# 启用双日志记录
dual_log_enable=YES
# 指定日志存储位置
vsftpd_log_file=/var/log/vsftpd.log
# 指定xferlog日志存储位置
xferlog_file=/var/log/xferlog
# 指定数据传输端口为20
connect_from_port_20=YES
# 显示欢迎信息
ftpd_banner="欢迎使用FTP!"

手动创建日志文件:

touch /var/log/vsftpd.log

4.2 用户配置

FTP用户配置分为三种情况:匿名用户、本地用户、虚拟用户。建议选择虚拟用户配置,虽然配置相对复杂一些,但是安全性和灵活性方面都是最好的。

4.2.1 匿名用户配置

# 允许匿名用户免密登录
no_anon_password=YES
# 指定匿名用户家目录
anon_root=/var/ftp
# 禁止匿名上传
anon_upload_enable=NO
# 禁止创建目录
anon_mkdir_write_enable=NO
# 禁止删除/重命名
anon_other_write_enable=NO

4.2.2 本地用户配置

# 启用本地用户家目录文件
user_config_dir=/etc/vsftpd/user_configs
# 禁锢用户在家目录
chroot_local_user=YES
# 允许家目录写入
allow_writeable_chroot=YES
# 指定家目录写入权限白名单位置
chroot_list_file=/etc/vsftpd/chroot_list
# PAM认证配置
pam_service_name=vsftpd

创建本地用户组:ftp_local

创建本地用户:dong,指定用户组:ftp_local,指定家目录:/home/dong,禁止shell登录。

groupadd ftp_local useradd -N -g ftp-local -d /home/dong -s /usr/sbin/nologin dong

创建本地用户配置文件夹、配置文件,并修改权限

mkdir -p /etc/vsftpd/user_configs chmod 700 /etc/vsftpd/user_configs touch /etc/vsftpd/user_configs/dong chmod 600 /etc/vsftpd/user_configs/dong vi /etc/vsftpd/user_configs/dong

添加以下配置:

# 指定用户家目录

local_root=/home/dong

# 允许写入操作
write_enable=YES

创建家目录写入权限白名单,添加本地用户到写入权限白名单(匿名用户无需添加):

touch /etc/vsftpd/chroot_list chmod 600 /etc/vsftpd/chroot_list echo "dong" >> /etc/vsftpd/chroot_list

4.2.3 虚拟用户配置

以下配置的前提是尚未配置本地用户登录,目前未验证配置本地用户登录后,再配置虚拟用户登录的情况。

# 启用虚拟用户登录
guest_enable=YES
# 映射到系统用户(需提前创建)
guest_username=ftp_virtual

# 虚拟用户独立配置目录
user_config_dir=/etc/vsftpd/user_configs
# 禁锢用户在家目录
chroot_local_user=YES
# 允许禁锢目录写入
allow_writeable_chroot=YES

# 指定PAM认证文件
pam_service_name=vsftpd
# 创建安全隔离环境
secure_chroot_dir=/usr/share/empty

创建本地用户组:ftp_virtual

创建本地用户:ftp_virtual,指定用户组:ftp_virtual,指定家目录:/home/ftp_virtual,禁止shell登录。

groupadd ftp_virtual useradd -N -g ftp_virtual -d /home/ftp_virtual -s /usr/sbin/nologin dong

创建本地用户配置文件夹、配置文件,并修改权限

mkdir -p /etc/vsftpd/user_configs chmod 700 /etc/vsftpd/user_configs touch /etc/vsftpd/user_configs/dong chmod 600 /etc/vsftpd/user_configs/dong vi /etc/vsftpd/user_configs/dong

上传+下载权限配置:

local_root=/home/ftp
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

仅上传权限配置:

local_root=/home/ftp/upload
write_enable=YES
download_enable=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

仅下载权限配置(user):

local_root=/home/ftp/download
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

创建用户家目录(根据需要创建),将所有用户家目录属主调整为ftp_virtual:ftp_virtual

mkdir /home/ftp mkdir /home/ftp/download mkdir /home/ftp/upload chown -R ftp_virtual:ftp_virtual /home/ftp chown -R ftp_virtual:ftp_virtual /home/ftp/download chown -R ftp_virtual:ftp_virtual /home/ftp/upload

创建安全隔离文件夹:

mkdir -p /usr/share/empty

安装gdbm数据库、验证安装结果、创建数据库文件vusrs、添加用户名和密码:

dnf install gdbm gdbmtool -V gdbmtool -n /etc/vsftpd/vusers.pag open gdbmtool /etc/vsftpd/vusers.pag store 用户名 密码

有关gdbm数据库基本操作如下:
gdbmtool #进入gdbmtool
open /etc/vsftpd/vusers.pag #打开数据库
list #列出数据记录
store 用户名 密码 #新增用户名和密码
delete 用户名 #删除已有用户和密码
quit #退出

配置PAM认证:

vi /etc/pam.d/vsftpd

注释以下配置:

#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth

添加以下配置:

auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers

4.3 安全增强配置

# 启用用户名单
userlist_enable=YES
# 用户名单路径
userlist_file=/etc/vsftpd/user_list
# 设置白名单模式
userlist_deny=NO
# 允许连接失败次数
max_login_fails=3
# 启用IP访问限制,需同步配置wrappers文件
# tcp_wrappers=YES

创建白名单并添加用户:

touch /etc/vsftpd/user_list chmod 600 /etc/vsftpd/user_list vi /etc/vsftpd/user_list

添加以下配置:

ftp

anonymous

dong

每行一个用户名,匿名用户、本地用户、虚拟用户均需添加。

4.4 SSL配置

# 启用SSL安全访问
ssl_enable=YES
allow_anon_ssl=YES
force_local_logins_ssl=YES
force_local_data_ssl=YES
rsa_cert_file=/etc/ssl/vsftpd.pem
rsa_private_key_file=/etc/ssl/vsftpd.key
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_ciphers=HIGH

生成SSL证书并设置访问权限:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/certs/vsftpd.pem chmod 600 /etc/ssl/private/vsftpd.key chmod 644 /etc/ssl/certs/vsftpd.pem

4.5 连接限制配置

# 最大并发终端数5
max_clients=5
# 每IP最大连接数5
max_per_ip=5
# 建立FTP连接的超时时间,单位为秒
accept_timeout=60
# PORT 方式下建立数据连接的超时时间,单位为秒
connect_timeout=60
# 建立FTP数据连接的超时时间,单位为秒
data_connection_timeout=120
# 无操作时,断开连接时间,单位为秒
idle_session_timeout=600

4.6 被动模式配置

# 启用被动相应模式
pasv_enable=YES
# 起始端口号
pasv_min_port=40000
# 结束端口号
pasv_max_port=45000
# 服务器公网地址

pasv_address=192.168.1.1

防火墙开放ftp服务和被动模式端口:

firewall-cmd --permanent --zone=public --add-service=ftp firewall-cmd --permanent --zone=public --add-port=40000-45000/tcp firewall-cmd --reload

查看SELinux配置:

getsebool -a | grep ftp

根据需要进行配置:

setsebool -P ftpd_use_passive_mode=1

5 重启服务

systemctl restart vsftpd systemctl status vsftpd

不足之处,敬请指正。

http://www.jsqmd.com/news/447208/

相关文章:

  • 贝叶斯分类
  • uniapp token过期的几种常见处理方案
  • ubuntu+windows双系统恢复
  • 7.28 进制交换|迭代器模式|map|子集按位或|带参递归
  • Elasticsearch-SQL终极指南:如何用SQL轻松查询Elasticsearch日志数据
  • 扫码枪写入案例。关于js原生聚焦以及扫码枪原理
  • 中医药方剂大模型开发方案
  • Qt/C++运行报错:exited with code -1073741819
  • iOS分页标签栏终极性能优化:快速解决XLPagerTabStrip滚动卡顿问题
  • 基于新型群智能优化算法的BP神经网络初始权值与偏置优化
  • 科研智能体平台设计与实现:社科类研究支持系统
  • RT-Thread ESP-Hosted
  • durable_rules模式匹配技术:DFA编译如何实现纳秒级字符串处理
  • local-web-server性能优化指南:让你的开发服务器飞起来
  • Flutter响应式管理面板AI功能集成:智能分析与自动化操作终极指南
  • 生产车间班组长绩效考核方案优化与绩效提升策略
  • 记录踩过的坑-金蝶云·苍穹平台-页面开发
  • 自平衡摩托车控制系统设计:Python实现方案
  • Ease高级特性:动态更新targetValue实现实时动画轨迹调整
  • 如何用Jspreadsheet CE快速创建动态数据表格:从数组到JSON的实战指南
  • REINFORCE、Remax、GRPO、DR.GRPO、DAPO、REINFORCE++、GPG、OPO、GSPO、SAPO、CLIP-COV、VC-PPO、VAPO对比
  • 微信小程序单元测试与集成测试完整指南:从入门到实战
  • (算法题)N个数求和
  • Flutter响应式管理面板终极容器化部署指南:Docker与Kubernetes实践
  • Clojure-lsp完全指南:从安装到精通的10个核心步骤
  • 终极指南:5个BackstopJS测试报告定制技巧与品牌化实战
  • IDEA与Gradle构建冲突,导致java重复类的解决方案
  • 大型项目测试策略:BackstopJS 场景分组与模块化配置管理终极指南
  • BackstopJS 测试数据隐私保护终极指南:敏感信息屏蔽与测试环境隔离技巧
  • 揭秘Rust Search Extension工作原理:从输入到结果的毫秒级响应