如何在Ubuntu LNMP上搭建FTP服务器
FTP(文件传输协议)是网站运维中常用的文件共享工具,而LNMP(Linux+Nginx+MySQL+PHP)是主流的Web服务架构。虽然LNMP本身不包含FTP功能,但可通过额外安装FTP服务器软件(如vsftpd)实现。以下是详细步骤:
在开始前,请确保:
vsftpd(Very Secure FTP Daemon)是Ubuntu官方推荐的FTP服务器软件,以轻量、安全、配置简单著称,且默认包含在Ubuntu仓库中。
执行以下命令安装:
sudo apt update && sudo apt install vsftpd -y
安装完成后,检查服务状态:
sudo systemctl status vsftpd
若显示“active (running)”,则表示服务已启动。
vsftpd的主配置文件位于/etc/vsftpd.conf,需修改以下关键参数以提升安全性和功能性:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
sudo nano /etc/vsftpd.conf
# 禁止匿名用户登录(防止未授权访问)
anonymous_enable=NO
# 允许本地用户(如系统用户)登录
local_enable=YES
# 允许本地用户上传/修改文件
write_enable=YES
# 本地用户创建文件的默认权限(022表示所有者有读写权限,组和其他用户有读权限)
local_umask=022
# 将本地用户锁定在其主目录(防止越权访问服务器其他目录)
chroot_local_user=YES
# 允许chroot目录可写(解决“chroot后无法上传文件”问题)
allow_writeable_chroot=YES
# 启用被动模式(适合防火墙或路由器后的服务器,需指定端口范围)
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
Ctrl+O保存,Ctrl+X退出;:wq保存并退出。为避免使用root用户登录FTP(存在安全风险),建议创建专用FTP用户,并限制其仅能通过FTP访问:
ftpuser):sudo adduser ftpuser
按提示设置密码(建议使用强密码)和用户信息(如姓名、电话等,可随意填写)。sudo usermod -s /usr/sbin/nologin ftpuser
sudo mkdir -p /home/ftpuser/files # files目录用于存储上传的文件
sudo chown ftpuser:ftpuser /home/ftpuser/files # 设置目录所有者为ftpuser
sudo chmod 755 /home/ftpuser # 设置主目录权限(所有者可读写执行,其他用户可读执行)
注:
files目录是用户上传文件的存储路径,可根据需求修改名称。
若服务器开启了UFW防火墙(Ubuntu默认防火墙),需放行FTP相关端口:
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw enable
sudo ufw status
应显示“21/tcp ALLOW”和“40000:50000/tcp ALLOW”。使用FTP客户端(如FileZilla)测试连接,步骤如下:
ftpuser,“密码”输入创建时的密码,“端口”输入21;/home/ftpuser/files);test.txt)至服务器,验证write_enable配置是否生效。启用FTPS(FTP over SSL/TLS):
FTP协议默认以明文传输数据,存在被窃听的风险。可通过SSL/TLS加密提升安全性:
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
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
sudo systemctl restart vsftpd
限制用户访问:
若需控制哪些用户可以登录FTP,可创建用户列表文件:
sudo nano /etc/vsftpd.userlist
在文件中添加允许登录的用户名(每行一个,如ftpuser)。userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO # 设置为NO表示仅允许列表中的用户登录,设置为YES表示禁止列表中的用户登录
sudo systemctl restart vsftpd
连接超时:
ping命令测试网络连通性。认证失败:
/etc/vsftpd.userlist文件(若启用了用户列表);/usr/sbin/nologin(避免使用shell登录)。无法上传文件:
write_enable是否设置为YES;/home/ftpuser/files应为755,所有者为ftpuser);df -h命令查看)。通过以上步骤,即可在Ubuntu LNMP环境中搭建一个安全、稳定的FTP服务器。如需更高的安全性,建议优先使用SFTP(SSH文件传输协议),它是SSH的一部分,无需额外安装FTP服务器,且数据传输全程加密。