我们产生这个需求的原因是因为打算搭建一个博客,选择了使用wordpress框架。然后,在安装插件的过程中,需要使用FTP服务进行操作。于是,我们决定搞清楚这个过程,并在其中遇到的困难进行记录。
一、安装vsftpd
# 安装
sudo apt-get install vsftpd
# 设置开机自启
systemctl enable vsftpd
# 启动ftp服务
systemctl start vsftpd
# 查看ftp状态
sudo service vsftpd status
如果看到下面的状态,说明启动成功
● vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-10-02 18:59:13 CST; 15min ago
Process: 1178111 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS)
Main PID: 1178112 (vsftpd)
Tasks: 3 (limit: 3942)
Memory: 1.8M
CPU: 202ms
CGroup: /system.slice/vsftpd.service
├─1178112 /usr/sbin/vsftpd /etc/vsftpd.conf
├─1181349 /usr/sbin/vsftpd /etc/vsftpd.conf
└─1181351 /usr/sbin/vsftpd /etc/vsftpd.conf
Oct 02 18:59:13 VM-24-9-ubuntu systemd[1]: Starting vsftpd FTP server...
Oct 02 18:59:13 VM-24-9-ubuntu systemd[1]: Started vsftpd FTP server.
主要看状态,Active: active (running) 代表正在运行。
二、创建ftp用户,并给权限
# 创建用户,此时系统自动创建了用户组ftpuser
useradd ftpuser
# 设置用户密码
passwd ftpuser
# 创建ftp文件夹
mkdir /home/ftpuser
# 给ftp文件夹权限
chown -R ftpuser:ftpuser /home/ftpuser
# 这里要想要方便省事的话,但是不推荐这么做
# chmod -R 777 /home/ftpuser
三、配置vsftpd
打开 vsftpd.conf
文件
sudo vim /etc/vsftpd.conf
改为以下配置
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
listen=YES
local_root=/var/ftp/test
allow_writeable_chroot=YES
pasv_enable=YES # 这里选择被动模式
pasv_address=xxx.xx.xxx.xx # 修改云服务器公网 IP
pasv_min_port=40000 # 被动模式需要的开放端口
pasv_max_port=40005
执行以下命令,创建并编辑 chroot_list
文件。
vim /etc/vsftpd/chroot_list
将需要ftp权限的用户添加进去,一行一个
保存退出后重启服务
systemctl restart vsftpd
四、开放端口
这里是我踩得坑,明明都一切正常就是不行,最后发现没有开放端口,这里的端口不仅是服务器中的ufw端口,还有云服务器本身的端口。
首先我们打开ufw也就是linux本身的防火墙
sudo ufw allow 21/tcp
由于我们在被动模式使用了40000-40005号端口,我们也需要打开
sudo ufw allow 40000/tcp
sudo ufw allow 40001/tcp
sudo ufw allow 40002/tcp
sudo ufw allow 40003/tcp
sudo ufw allow 40004/tcp
sudo ufw allow 40005/tcp
其次我们需要再云服务器的安全策略中打开这些端口
五、测试
可以看到已经可以连接,如果可以连接,但是无法显示文件大概率是权限或者端口开放问题
六、参考
腾讯云的教程 https://cloud.tencent.com/document/product/213/10912
vsftp文档 https://wiki.ubuntu.org.cn/Vsftpd