vsftpd


为什么要安装vsftpd

1
2
3
4
5
6
7
同一局域网内,没有网络也可以传输文件

不需要U盘

速度超快

安全稳定

概念:

1
ftp是一种文件传输协议,基于这种协议的有许多ftp软件。ftp软件分为服务器:vsftpd 端和客户端:ftp
1
2
3
ftp使用的端口默认有20,21。所以要保证这两个端口没有被防火墙拦截,而且没有被其他软件占用
20端口用来传输数据
21端口用来服务器与客户端之间传输指令

简单安装使用

我安装的是vsftpd

1
yum install vsftpd -y

启动vsftpd服务

1
service vsftpd start

查看服务器ip

1
ip a

现在只要在局域网内,就可以通过浏览器访问了

1
浏览器输入:ftp://ip

如果你访问不了,那么先临时将防火墙关闭

1
2
service iptables stop
service firewalld stop

可以看到这里有个文件夹:pub,这个pub在服务器的那个位置?

查看这个pub在位置

1
find / -name pub
1
可以看到位置在:/var/pub

以后我们就可以将需要共享的文件放入这里,其他电脑就可以下载了


禁止匿名用户访问,指定用户访问

以上是简单的配置,接下来就进行个性化配置

这样设置之后我们发现其它人只要在局域网内都可以访问,是不安全的,所以我们想指定用户去访问(输入用户名和密码)

大部分配置文件都在 /etc/vsftpd/vsftpd.conf 这个文件中

1
anonymous_enable=NO		#禁止匿名用户访问
1
anon_upload_enable=NO	#禁止匿名用户上传
1
anon_mkdir_write_enable=NO	#取消匿名写入权限
1
local_enable=YES	#允许本地用户登录,也就是说只要是服务器端的用户都可以访问(包含root和/home下的user)
1
write_enable=YES	#给用户写入权限

这样设置之后可能使用用户和密码仍然访问不了,所以就需要了解 /etc/vsftpd 下面其他的两个配置文件的作用了

1
ftpusers	#这里设置黑名单 加入这里的用户都无法访问
1
2
3
4
user_list	#控制配置,这个既可以是黑名单,也可以是白名单

当vsftpd.conf中 userlist_enable=YES 时,为黑名单,加入这里的用户无法访问
当vsftpd.conf中 userlist_enable=NO 时,为白名单,加入这里的用户才能访问

所以我们需要在 vsftpd.conf 中将 userlist_enable设为 NO

1
userlist_enable=NO

同时在 user_list 中加入可以访问的用户名

以及确保 ftpusers 中没需要访问的用户名


优化

开启被动模式

vsftpd默认是主动模式,也就是说数据连接的请求是由服务器发起的,由于防火墙的原因,这个连接请求可能被防火墙过滤掉了。所以才有了被动模式,被动模式中连接请求是有客户端发起的,而服务器端配置了允许固定范围ip的请求,这样保证了连接的正常。

vsftpd.conf 中添加

1
2
3
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999

这样服务器端就算配置好了。但是还没有完,这个pasv模式还需要客户端发送一条命令

其实在这之前一直都没有涉及到真正的客户端,只是使用浏览器访问了一个地址而已,真正使用客户端,是使用命令 ftp 服务器ip

1
ftp ip		#然后输入用户名,密码来访问
1
passive		#开启被动模式

ftp客户端使用

vsftpd安装时默认就已经创建了一个匿名用户 ftp ,所以我们可以只输入用户名,不输入密码登录ftp

1
2
ftp ip		#登录
ftp #输入用户名

当然了,在我们禁止匿名用户之后就需要使用设置的用户去登录了

1
ftp 用户名:密码@ip
1
help	#查看所有命令
1
put		#上传
1
get		#下载
1
mkdir 	#创建文件夹
1
pwd		#查看当前目录
1
ls		#列出目录下的文件

在命令前面加上 l 表示在本机操作(local)

1
lcd		#本机目录中移动
1
lpwd		#本机当前目录

错误解决

如果用户登录后创建文件夹出现:550 Create directory operation failed错误

1
vim /etc/selinux/config
1
SELINUX=disabled

开心啊

老师让我讲linux上的vsftpd,我在archlinux上照着教程做,发现在浏览器中始终无法访问ftp服务器,都差点崩溃了。明明是照着教程做的,为什么就是不行呢。后来我终于放弃了,转到centos下面去弄,照着教程,慢慢配置,发现也没差啊,最后我差点怀疑是archlinux有问题。确实,它和大多数教程上的都不一样,安装完成之后就只有一个配置文件 /etc/vsftpd.conf 你说气不气。

不过坚持的人总有回报,今天google到了这个错误的原因,那就是这是archlinux上的一个bug,所以不能怪我咯

错误如下:

1
500 OOPS: 421 Service not available, remote server has closed connection

解决办法:在 /etc/vsftpd.conf 中添加一行配置

1
seccomp_sandbox=NO

然后重启一下vsftp服务就好了

1
sudo systemctl restart vsftpd

那么什么是seccomp?维基百科这么解释的:

1
seccomp(安全计算模式的简称)是Linux内核的计算机安全功能。它被集成到2.6.12版本的主Linux内核分支中,该分支于2005年3月8日发布1。

而vsftpd在版本3.0.0之后就开始使用它了,这就是bug产生的原因?


学这个vsftpd的过程真的相当艰难

我想如果我一开始就在centos上面来安装的话,那么就不会有这么多的问题了

首先我觉得很疑惑的是ftp不是一个协议吗,为什么我电脑上输入ftp竟然进入了交互模式?

1
ftp同时也是ftp传输协议的一个客户端,取的名字相同而已

然后是我明明安装的是vsftpd为什么可以启动ftpd这个服务?它和vsftpd有什么关系

1
安装gnome时默认就安装了一个组件 inetutils ,而它就包含了这个tftp,没错,它叫tftp也是一个ftp的server

然后就是遇到了那个让人脑壳疼的bug

疑问?

1.作为日常使用,你觉得有必要设置个账号密码登录吗?

1
我觉得是没这个必要的,怎么简单怎么来

2.如果你需要给别人分享一个很大的软件,你觉得有必要将那个软件复制到默认的 /ser/ftp 或者 /var/ftp 下吗?

1
没这个必要,需要分享那个软件,就将那个软件所在的目录设置为别人访问的目录就好了

设置也很简单,修改 vsftpd.conf文件

1
anon_root=要分享软件所在目录路径

例如我要分享我家目录下的Downloads文件夹下的东西,就这么设置

1
anon_root=/home/narcissus/Downloads/

设置好了之后启动vsftpd服务

1
sudo systemctl start vsftpd		#archlinux命令

或者

1
sudo service vsftpd start		#centos命令

最后我们来看一下,它到底能有快,同一局域网下的测试,下载一个2.7GB的文件,平均速度为:100MB/s

E23iVA.png