在开始部署前,请确保你的Linux系统已更新至最新版本(避免软件包冲突),并具备sudo权限。本教程以vsftpd(Very Secure FTP Daemon)为例,它是Linux下最流行的FTP服务器软件,以安全性和稳定性著称。
根据Linux发行版的不同,使用对应的包管理器安装vsftpd:
sudo apt update # 更新软件包索引
sudo apt install vsftpd # 安装vsftpd
sudo yum install vsftpd # CentOS 7及更早版本
# 或
sudo dnf install vsftpd # CentOS 8/Fedora
安装完成后,vsftpd服务会自动安装但未启动。
vsftpd的主配置文件位于/etc/vsftpd.conf,使用文本编辑器(如nano)打开并修改:
sudo nano /etc/vsftpd.conf
基础安全设置:
anonymous_enable=NO # 禁用匿名访问(防止未授权用户上传/下载)
local_enable=YES # 允许本地系统用户登录
write_enable=YES # 允许用户上传文件(默认只读)
local_umask=022 # 设置文件权限掩码(上传文件权限为755)
用户限制:
chroot_local_user=YES # 将用户限制在自己的家目录(增强安全性,防止访问系统其他目录)
allow_writeable_chroot=YES # 允许chroot目录可写(避免用户无法上传文件)
日志记录:
xferlog_enable=YES # 启用传输日志(记录上传/下载操作)
xferlog_std_format=YES # 使用标准日志格式(便于分析)
被动模式(PASV)(可选,解决防火墙/NAT问题):
pasv_enable=YES # 启用被动模式
pasv_min_port=30000 # 被动模式最小端口
pasv_max_port=31000 # 被动模式最大端口(需在防火墙中开放此范围)
修改完成后,按Ctrl+O保存,Ctrl+X退出编辑器。
sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser # 创建用户(家目录为/home/ftpuser,禁止登录shell)
sudo passwd ftpuser # 设置用户密码(按提示输入两次)
sudo chown ftpuser:ftpuser /home/ftpuser # 将家目录所有者设为用户本身
sudo chmod 755 /home/ftpuser # 设置目录权限(所有者可读写执行,其他用户可读执行)
注:若需允许用户上传文件,需确保家目录下有可写子目录(如
/home/ftpuser/upload),并设置chmod 775 upload。
FTP服务需要开放21端口(控制连接),若启用了被动模式,还需开放30000-31000端口范围(数据连接)。根据防火墙类型调整:
sudo ufw allow 21/tcp # 允许FTP控制端口
sudo ufw allow 30000:31000/tcp # 允许被动模式端口范围
sudo ufw reload # 重新加载防火墙规则
sudo firewall-cmd --permanent --add-port=21/tcp # 永久允许21端口
sudo firewall-cmd --permanent --add-port=30000-31000/tcp # 永久允许被动模式端口范围
sudo firewall-cmd --reload # 重新加载防火墙规则
若系统启用了SELinux,需调整FTP相关策略:
sudo setsebool -P ftp_home_dir on # 允许FTP访问用户家目录
sudo chcon -Rt svirt_sandbox_file_t /home/ftpuser # 设置家目录SELinux上下文
FTPS(FTP over SSL/TLS)通过加密传输数据,提升安全性。以下是配置步骤:
使用OpenSSL生成自签名证书(有效期365天):
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.pem \
-out /etc/ssl/private/vsftpd.pem
按提示输入证书信息(如国家、组织名称等),生成的证书将用于加密连接。
在/etc/vsftpd.conf中添加以下内容:
ssl_enable=YES # 启用SSL/TLS
allow_anon_ssl=NO # 禁止匿名用户使用SSL
force_local_data_ssl=YES # 强制数据传输使用SSL
force_local_logins_ssl=YES # 强制登录过程使用SSL
ssl_tlsv1=YES # 仅使用TLSv1协议(更安全)
ssl_sslv2=NO # 禁用SSLv2
ssl_sslv3=NO # 禁用SSLv3
rsa_cert_file=/etc/ssl/private/vsftpd.pem # 证书路径
rsa_private_key_file=/etc/ssl/private/vsftpd.pem # 私钥路径
sudo systemctl restart vsftpd # 重启服务使配置生效
使用FTP客户端(如FileZilla、WinSCP或命令行工具)测试连接:
ftp your_server_ip # 替换为你的服务器IP
输入用户名(如ftpuser)和密码,若提示Login successful则表示连接成功。可使用ls查看目录,put上传文件,get下载文件。
sudo systemctl status vsftpd),防火墙是否开放21端口。write_enable=YES,家目录权限是否正确(chmod 755)。通过以上步骤,你已在Linux系统上成功部署了一个安全、可用的FTPServer。可根据实际需求调整配置(如限制用户带宽、设置虚拟用户等)。