CentOS 7部署FTP服务

主要步骤分析:

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

注意事项:

  1. 安全考虑:脚本中禁用了SELinux和防火墙,生产环境应根据需要调整
  2. 密码安全:建议使用强密码,定期更换
  3. 日志监控 :定期检查 /var/log/vsftpd.log
  4. 备份配置:所有原始配置都已备份

这个部署脚本提供了完整的FTP服务器安装和配置,包含了基本的错误处理和更详细的输出信息。

相关推荐
ONLYOFFICE2 小时前
ONLYOFFICE 自动化工具:宏和 AI 函数如何选择?
运维·自动化·编辑器·onlyoffice
济6172 小时前
ARM Linux 驱动开发篇----字符设备驱动开发(2)--字符设备驱动开发步骤---- Ubuntu20.04
linux·运维·服务器
Guheyunyi2 小时前
什么是安全监测预警系统?应用场景有哪些?
大数据·运维·人工智能·安全·音视频
hopsky2 小时前
Docker Desktop 报 500
运维·docker·容器
仗剑天涯 回首枉然2 小时前
Linux 和 windows 共享文件
linux·运维·windows
zzzsde2 小时前
【Linux】进程(3):进程状态
linux·运维·服务器
Mr_liu_6662 小时前
ubuntu:beyond compare 4 This license key has been revoked——————转载拼接
linux·运维·ubuntu
无聊的小坏坏2 小时前
补充:使用 /etc/cron.d 管理定时任务
linux·定时任务
热爱生活的五柒2 小时前
linux/mac/wsl如何使用claude code,并配置免费的硅基流动API?(官方的需要付费订阅)
linux·运维·macos