Ubuntu搭建FTP服务器

一、环境 本文搭建的ftp服务器是在Ubuntu20.04上搭建的vsftp服务器,运行在腾讯云上
二、安装软件
安装vsftp软件

1
sudo apt-get install vsftpd

设置成开机启动

1
sudo systemctl enable vsftpd

启动ftp服务

1
sudo systemctl start vsftpd

确认服务是否启动

1
sudo netstat -antup | grep ftp

enter description here
此时,vsftpd 已默认开启匿名访问模式,无需通过用户名和密码即可登录 FTP 服务器。使用此方式登录 FTP 服务器的用户没有权修改或上传文件的权限。
三、vsftp配置文件 创建ftp用户,使用m参数,把ftp用户的home目录一起创建

1
sudo useradd -m ftpuser

设置ftp用户密码

1
sudo passwd ftpuser

创建 FTP 服务使用的文件目录,本文以 /home/ftpuser为例,创建用户时已经一起创建好 打开 vsftpd.conf 文件

1
sudo vim /etc/vsftpd.conf

修改以下配置参数,设置匿名用户和本地用户的登录权限,设置指定例外用户列表文件的路径,并开启监听 IPv4 sockets(创建vsftpd目录,安装的时候,可能没有创建该目录,直接安装到/var目录下了)

1
2
3
4
5
6
7
anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
write_enable=YES

在行首添加 #,注释 listen_ipv6=YES 配置参数,关闭监听 IPv6 sockets

1
#listen_ipv6=YES

添加以下配置参数,开启被动模式,设置本地用户登录后所在目录,以及云服务器建立数据传输可使用的端口范围值,并保存退出

1
2
3
4
5
6
local_root=/var/ftp
allow_writeable_chroot=YES
pasv_enable=YES
pasv_address=xxx.xx.xxx.xx #请修改为您服务器公网 IP
pasv_min_port=40000
pasv_max_port=45000

创建并编辑 chroot_list 文件

1
sudo vim /etc/vsftpd/chroot_list

输入用户名,一个用户名占据一行,设置完成后按 Esc 并输入 :wq 保存后退出 重启 FTP 服务

1
sudo systemctl restart vsftpd

四、权限设置

如果是使用ftpuser的home目录,给与sudo权限

1
sudo vim /etc/sudoers

增加一行

1
ftpuser ALL=(ALL) NOPASSWD: ALL

五、防火墙设置

使用被动模式,需要放开如下端口 

被动模式:放通端口21,及 修改配置文件 中设置的 pasv_min_port 到 pasv_max_port 之间的所有端口,本文放通端口为40000 - 45000 

六、Filezila设置

enter description here
使用filezila连接成功

七、vsftpd 服务启动失败

1、检查 vsftpd 配置文件 vsftpd 的主配置文件是 /etc/vsftpd.conf。确保该文件没有语法错误或无效配置。可以使用以下命令检查配置文件:

1
sudo nano /etc/vsftpd.conf

确保配置文件中的参数正确。以下是一个常见的配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO

如果配置文件中有无效参数或语法错误,修正后保存并退出。
2. 测试 vsftpd 配置 使用以下命令测试 vsftpd 配置文件的正确性:

1
sudo vsftpd /etc/vsftpd.conf

如果配置文件有误,vsftpd 会输出具体的错误信息。根据错误信息修正配置文件。
3. 检查日志 查看 vsftpd 的日志文件以获取更多信息。日志文件通常位于 /var/log/vsftpd.log 或 /var/log/syslog。运行以下命令查看日志:

1
sudo tail -n 50 /var/log/vsftpd.log

或者:

1
sudo grep vsftpd /var/log/syslog

日志中可能会包含具体的错误信息,帮助你进一步排查问题。
4. 检查端口冲突 vsftpd 默认使用端口 21。确保没有其他服务占用该端口。可以使用以下命令检查端口占用情况:

1
sudo netstat -tuln | grep :21

如果端口被占用,停止占用端口的服务,或者修改 vsftpd 的配置文件,使用其他端口。
5. 检查 SELinux/AppArmor 如果你的系统启用了 SELinux 或 AppArmor,它们可能会阻止 vsftpd 启动。可以尝试临时禁用 SELinux 或 AppArmor,然后重新启动 vsftpd: 禁用 SELinux(仅适用于使用 SELinux 的系统):

1
sudo setenforce 0

禁用 AppArmor(仅适用于使用 AppArmor 的系统):

1
2
sudo systemctl stop apparmor
sudo systemctl disable apparmor

6、 重新启动 vsftpd 服务 在修正配置文件后,重新启动 vsftpd 服务:

1
sudo systemctl restart vsftpd

7、 查看服务状态 再次查看 vsftpd 服务的状态,确认是否启动成功:

1
sudo systemctl status vsftpd

8、 重新安装 vsftpd 如果问题仍然无法解决,可能是 vsftpd 安装不完整或损坏。尝试重新安装:

1
2
sudo apt remove --purge vsftpd
sudo apt install vsftpd

9、 检查系统资源 确保系统资源(如内存、磁盘空间等)充足。可以使用以下命令检查系统资源:

1
2
free -h
df -h