主要步骤分析:
1. 基础环境配置
- 禁用SELinux(生产环境需谨慎)
- 配置阿里云yum源
2. FTP服务安装
- 安装vsftpd和ftp客户端
3. 服务配置
- 配置文件位于
/etc/vsftpd/vsftpd.conf - 创建了admin用户(不可登录系统)
4. 权限设置
- 设置了目录权限和PAM认证
安全改进建议:
bash
# 1. 防火墙配置(替代直接关闭firewalld)
# 只开放FTP所需端口
systemctl start firewalld
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
# 2. SELinux配置(替代完全禁用)
# 如果必须启用SELinux,设置正确的上下文
semanage fcontext -a -t public_content_rw_t "/var/ftp/pub(/.*)?"
restorecon -Rv /var/ftp/pub
# 3. 更安全的用户创建方式
useradd -d /var/ftp/pub -s /sbin/nologin -M admin
chown admin:admin /var/ftp/pub
# 4. 密码策略
echo "admin:$(openssl passwd -1 YourStrongPassword)" | chpasswd -e
优化后的完整脚本:
bash
#!/bin/bash
# 配置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
echo -e "${GREEN}[1/6] 配置系统环境...${NC}"
# 备份原配置
cp /etc/selinux/config /etc/selinux/config.bak
# 临时禁用SELinux(生产环境建议配置策略而非禁用)
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
# 配置yum源
if [ ! -d /etc/yum.repos.d/backup ]; then
mkdir -p /etc/yum.repos.d/backup
fi
mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/backup/ 2>/dev/null
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache
echo -e "${GREEN}[2/6] 安装FTP服务...${NC}"
yum install -y vsftpd ftp lftp
echo -e "${GREEN}[3/6] 配置vsftpd...${NC}"
# 备份原配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
# 生成新的配置文件
cat > /etc/vsftpd/vsftpd.conf << 'EOF'
# 基本配置
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to FTP Service.
# 安全配置
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 连接限制
max_clients=100
max_per_ip=10
idle_session_timeout=300
data_connection_timeout=120
# 监听配置
listen=YES
listen_ipv6=NO
# PAM认证
pam_service_name=vsftpd
# 用户列表控制
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
# 日志配置
xferlog_file=/var/log/vsftpd.log
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
# 被动模式配置
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=61000
EOF
echo -e "${GREEN}[4/6] 创建FTP用户和目录...${NC}"
# 创建FTP根目录
mkdir -p /var/ftp/pub
chmod 755 /var/ftp
# 创建FTP用户
if ! id admin &>/dev/null; then
useradd -d /var/ftp/pub -s /sbin/nologin -M admin
echo "请输入admin用户的密码:"
passwd admin
else
echo "用户admin已存在"
fi
# 设置目录权限
chown -R admin:admin /var/ftp/pub
chmod 775 /var/ftp/pub
# 配置用户列表
echo "admin" > /etc/vsftpd/user_list
echo "admin" > /etc/vsftpd/chroot_list
# 调整PAM配置
if grep -q "pam_shells.so" /etc/pam.d/vsftpd; then
sed -i '/pam_shells.so/s/^/#/' /etc/pam.d/vsftpd
fi
echo -e "${GREEN}[5/6] 配置防火墙...${NC}"
# 配置防火墙(比直接关闭更安全)
systemctl start firewalld
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=60000-61000/tcp
firewall-cmd --reload
systemctl enable firewalld
echo -e "${GREEN}[6/6] 启动服务...${NC}"
# 启动服务
systemctl enable vsftpd
systemctl restart vsftpd
# 检查服务状态
if systemctl is-active --quiet vsftpd; then
echo -e "${GREEN}FTP服务启动成功!${NC}"
echo -e "${GREEN}服务信息:${NC}"
echo "FTP地址: $(hostname -I | awk '{print $1}')"
echo "FTP端口: 21"
echo "数据端口: 60000-61000"
echo "用户名: admin"
echo "根目录: /var/ftp/pub"
echo ""
echo -e "${GREEN}测试连接:${NC}"
echo "上传: ftp> put local_file"
echo "下载: ftp> get remote_file"
echo "列表: ftp> ls"
else
echo -e "${RED}FTP服务启动失败,请检查配置${NC}"
journalctl -u vsftpd -n 20
fi
常用FTP命令:
bash
# 连接FTP
ftp 172.16.11.115
# 或使用lftp(支持续传)
lftp admin@172.16.11.115
# 上传文件
put filename
mput *.txt # 上传多个文件
# 下载文件
get filename
mget *.txt # 下载多个文件
# 目录操作
ls
cd dirname
mkdir newdir
# 退出
bye
注意事项:
- 安全考虑:脚本中禁用了SELinux和防火墙,生产环境应根据需要调整
- 密码安全:建议使用强密码,定期更换
- 日志监控 :定期检查
/var/log/vsftpd.log - 备份配置:所有原始配置都已备份
这个部署脚本提供了完整的FTP服务器安装和配置,包含了基本的错误处理和更详细的输出信息。