Debian 上搭建一个 FTP 服务器
安装 vsftpd
首先,更新包列表并安装 vsftpd (Very Secure FTP Daemon)
sudo apt update # 更新apt的包
sudo apt install vsftpd # 安装vsftpd
配置 vsftpd
打开配置文件进行编辑:
# 禁用匿名访问
anonymous_enable=NO
# 启用本地用户访问
local_enable=YES
# 允许本地用户进行写操作
write_enable=YES
# 设置本地用户上传文件的遮罩
local_umask=022
# 启用 chroot 以限制用户到其主目录
chroot_local_user=YES
# 禁用 ASCII 模式传输(可选)
ascii_upload_enable=NO
ascii_download_enable=NO
# 其他有用的选项
ftpd_banner=Welcome to FTP service.
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
# 被动模式设置
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
pasv_address=172.18.6.66
# 设置用户访问列表
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
创建 FTP 用户
如果需要为 FTP 服务创建专用用户
sudo adduser ftpuser
配置用户目录权限
为 FTP 用户设置目录权限。例如,为 ftpuser 设置 home 目录:
sudo mkdir /home/ftpuser/ftp
sudo chown nobody:nogroup /home/ftpuser/ftp
sudo chmod a-w /home/ftpuser/ftp
sudo mkdir /home/ftpuser/ftp/files
sudo chown ftpuser:ftpuser /home/ftpuser/ftp/files
启动 vsftpd 服务
重启 vsftpd 服务以应用更改:
sudo systemctl restart vsftpd
sudo systemctl status vsftpd
对外开放服务
使用iptables:
sudo iptables -I INPUT -p tcp --dport 21 -j ACCEPT # 开放 FTP 控制端口(21)
sudo iptables -I INPUT -p tcp --dport 40000:50000 -j ACCEPT # 开放被动模式端口范围(40000-50000)
sudo iptables -I INPUT -p tcp --dport 20 -j ACCEPT # 开放 FTP 数据端口(20)
使用FileZilla 做 FTP 客户端
下载链接:filezilla-project.org/download.ph…
问题
500 OOPS: cannot read user list file:/etc/vsftpd.user_list 错误: 严重错误: 无法连接到服务器
问题原因:该错误表示 vsftpd 配置文件中提到的用户列表文件 /etc/vsftpd.user_list 不存在或不可读。所以需要创建该文件以及写入用户名,并在配置文件中加入对应配置
解决:
vi /etc/vsftpd.user_list
写入 ftpuser
给/etc/vsftp.conf 中加入
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
500 OOPS: vsftpd: refusing to run with writable root inside chroot() 错误: 严重错误: 无法连接到服务器
问题原因:这个错误通常是由于 vsftpd 默认设置不允许用户的主目录具有写权限(可写)时使用 chroot。为了解决这个问题,我们可以修改 vsftpd 配置文件,或者调整用户的主目录权限。
解决:
调整用户主目录权限
sudo mkdir /home/ftpuser/uploads
sudo chown ftpuser:ftpuser /home/ftpuser/uploads
sudo chmod a-w /home/ftpuser