FTP服务器
WuCheng

记录一下搭建FTP服务器踩过的坑

关于WIN的设置

控制面板——启用或关闭Windows功能——Internet Information Services——FTP服务(勾选)、Web管理工具——IIS管理控制台(勾选)

以及TFTP客户端一并勾选上

控制面板——网络和Internet——Internet选项——高级——使用被动FTP

控制面板——系统和安全——Windows Defender防火墙——允许应用通过Windows……——更改设置 勾选FTP服务器

Linux安装配置FTP服务

使用命令yum install vsftpd安装FTP服务,配置文件在/etc/vsftpd/vsftpd.conf

其他文件ftpusers是禁止文登录FTP服务的用户的黑名单(默认开启)

user_list用户可以登录的白名单,黑名单白名单的启用与关闭需要在配置文件中修改

FTP的常用命令

1
2
3
4
5
6
service vsftpd start		开启FTP服务
service vsftpd status 查看状态
service vsftpd stop 停止服务
service vsftpd restart 重启服务
systemctl restart vsftpd 重启服务
chkconfig vsftpd on 开机自启

在配置文件更新后记得要重启一下服务

vsftpdc.conf的配置

以下是一些重要的配置

1
2
3
4
5
6
7
8
9
10
write_enable=YES		允许用户修改文件内容
local_enable=YES 允许本地用户可以登录
anoymous_enable=NO 禁止匿名用户的呢牢固
no_anon_password=YES 匿名用户不需要密码
anon_root=/example/directrory/ 匿名登录的目录
local_root=/var/ftp/pub 设置登录后的目录(可自定义)
根目录的限制
chroot_list_enable=YES
chroot_local_user=YES
chroot_list_file=/etc/vsftp/chroot_list 设置此文件中的用户可以切换目录

具体配置(来自Linux 在 linux 中搭建 FTP 服务 - 云+社区 - 腾讯云 (tencent.com)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 禁止匿名用户anonymous登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 让登录的用户有写权限(上传,删除)
write_enable=YES
# 默认umask
local_umask=022
# 把传输记录的日志保存到/var/log/vsftpd.log
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=NO
# 允许ASCII模式上传
ascii_upload_enable=YES
# 允许ASCII模式下载
ascii_download_enable=YES
# 使用20号端口传输数据
connect_from_port_20=YES
# 欢迎标语
ftpd_banner=Welcome to use my test ftp server.
# 接下来的三条配置很重要
# chroot_local_user设置了YES,那么所有的用户默认将被chroot,
# 也就用户目录被限制在了自己的home下,无法向上改变目录。
# chroot_list_enable设置了YES,即让chroot用户列表有效。
# ★超重要:如果chroot_local_user设置了YES,那么chroot_list_file
# 设置的文件里,是不被chroot的用户(可以向上改变目录)
# ★超重要:如果chroot_local_user设置了NO,那么chroot_list_file
# 设置的文件里,是被chroot的用户(无法向上改变目录)
chroot_list_enable=YES
# touch /etc/vsftpd/chroot_list 新建
chroot_list_file=/etc/vsftpd/chroot_list
use_localtime=YES
# 以standalone模式在ipv4上运行
listen=YES
# PAM认证服务名,这里默认是vsftpd,在安装vsftpd的时候已经创建了这个pam文件,
# 在/etc/pam.d/vsftpd,根据这个pam文件里的设置,/etc/vsftpd/ftpusers
# 文件里的用户将禁止登录ftp服务器,比如root这样敏感的用户,所以你要禁止别的用户
# 登录的时候,也可以把该用户追加到/etc/vsftpd/ftpusers里。
pam_service_name=vsftpd

创建FTP用户

1
2
3
useradd test	创建用户
passwd test 修改密码
chown test:test /你的ftp目录(一般在/var/ftp/pub 自定义另算)

创建用户后就可以使用此用户账号和密码登录到FTP服务了(不建议开匿名登录)

在文件管理的条中输入ftp://虚拟机的地址就可以直接连接到FTP的根目录文件了(前提是在win的设置第二条中勾选FTP的预览)

关于一些重要的坑

1. 防火墙

FTP服务连接一定要设置好Linux的防火墙,否则会被拦下,我直接简单粗暴的直接关掉

service firewalld stop(Linux 7)

service iptables stop(Linux 6)

2. SELinux

在关闭防火墙后连接倒是能连上了,但是当我尝试上传文件时……直接弹 SELinux 的警报了,网上有说要 setenforce 0关闭防火墙的,然而我发现关掉防火墙更加连接不上……

实际上只要关掉SELinux对FTP的保护就好了

1
2
3
4
5
getsebool -a|grep ftp	找到SELinux关于ftp服务的保护
# 这两条一定要开启才能够上传
setsebool -P ftpd_full_access 1
setsebool -P ftpd_anon_write 1
# 如果找不到的话找相近或者类似看起来像的

3. 配置文件

配置文件有两个小坑,一个是chroot_list,一个是权限的检查问题

在配置好文件后由于被设置了根目录保护但是有特定用户可以访问其他目录,也就是chroot_local_user=YES后而没有创建白名单文件,这个只需要touch chroot_list就好了

另一个是因为vsftpd增强了安全检查,如果用户被限定在了主目录下,用户就不能再有写的权限了,如果检查还有写权限则会报错。

而这个只需要在配置文件中添加allow_writeable_chroot=YES就好了

  • 本文标题:FTP服务器
  • 本文作者:WuCheng
  • 创建时间:2022-05-31 00:06:51
  • 本文链接:https://www.wucheng.work/2022/05/31/FTP服务器/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!