install_ftp_offline.sh
vsftpd-3.0.2-28.el7.x86_64.rpm
#!/bin/bash# 一键安装配置vsftpd脚本(开放根目录,禁用chroot)# 安装vsftpd RPM包
echo "正在安装vsftpd..."
rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm
if [ $? -ne 0 ]; thenecho "安装失败!请检查RPM包是否存在。"exit 1
fi# 创建FTP用户组和用户
echo "创建FTP用户..."
groupadd ftp || true
useradd -g ftp ftp_root
if [ $? -ne 0 ]; thenecho "创建用户失败!"exit 1
fi# 设置FTP用户密码
echo "设置FTP用户密码..."
echo "syspass123" | passwd --stdin ftp_root
if [ $? -ne 0 ]; thenecho "设置密码失败!"exit 1
fi# 备份原始配置文件
echo "备份原始配置..."
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak# 创建chroot列表文件 - 仅占位作用
echo "ftp_root" > /etc/vsftpd/vsftpd.chroot_list# 配置vsftpd.conf(禁用chroot,完全开放)
cat > /etc/vsftpd/vsftpd.conf <<EOF
# 基础配置
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
tcp_wrappers=YES
pasv_enable=YES
# 设置被动模式端口范围
pasv_min_port=30000
pasv_max_port=30010# 关键配置 - 完全禁用chroot限制
chroot_local_user=NO
chroot_list_enable=NO# 安全增强 - 允许写入所有目录
allow_writeable_chroot=YES# 核心配置 - 不限制根目录(由前端完全控制)
# 未设置local_root参数,允许切换到任何目录
EOF# 配置user_list文件
cat > /etc/vsftpd/user_list <<EOF
# vsftpd 用户列表
root
ftp
ftpuser
ftp_root
EOF# 启动并启用服务
systemctl restart vsftpd
systemctl enable vsftpd# 配置SELinux(防止chroot错误)
setsebool -P ftp_home_dir on
setsebool -P allow_ftpd_full_access on# 配置防火墙
if firewall-cmd --state &>/dev/null; thenecho "配置防火墙..."firewall-cmd --permanent --add-port=21/tcpfirewall-cmd --permanent --add-port=30000-30010/tcpfirewall-cmd --reload
elseecho "防火墙未运行,跳过防火墙配置"
fi# 验证服务状态
if systemctl is-active --quiet vsftpd; thenecho "--------------------------------------------"echo "vsftpd 安装配置成功完成!"echo "FTP 用户: ftp_root"echo "FTP 密码: syspass123"echo "关键配置:"echo "1. 已禁用 chroot 限制"echo "2. 被动端口范围:30000-30010"echo "3. 允许访问系统任意目录"echo "安全说明:"echo "- 此配置完全由前端控制访问路径"echo "- 请确保前端配置安全的路径"echo "--------------------------------------------"# 简单测试echo "测试FTP连接..."timeout 5 ftp -n 127.0.0.1 <<END_SCRIPTquote USER ftp_rootquote PASS syspass123quit
END_SCRIPTif [ $? -eq 0 ]; thenecho "FTP连接测试成功!"elseecho "警告: FTP连接测试失败,请检查日志!"fi
elseecho "vsftpd 服务启动失败,请检查配置!"journalctl -xeu vsftpd --no-pager | tail -n 20exit 1
fi
vftpcentos离线部署资源-CSDN下载