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服务器安装和配置,包含了基本的错误处理和更详细的输出信息。

相关推荐
崔小汤呀26 分钟前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应38 分钟前
vi编辑器使用
linux·后端·操作系统
何中应39 分钟前
Linux进程无法被kill
linux·后端·操作系统
何中应41 分钟前
rm-rf /命令操作介绍
linux·后端·操作系统
何中应1 小时前
Linux常用命令
linux·操作系统
葛立国1 小时前
从 / 和 /dev 说起:Linux 文件系统与挂载点一文理清
linux
DianSan_ERP16 小时前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
哇哈哈202116 小时前
信号量和信号
linux·c++
呉師傅17 小时前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
不是二师兄的八戒17 小时前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器