Ubuntu搭建FTP(vsftpd)文件服务器

14 篇文章 0 订阅
8 篇文章 0 订阅

前言

在开始介绍ftp服务器如何搭建前,先来介绍一些名词概念,以下名词均和文件服务器有关。

SSH(Secure Shell):ssh是加密的shell,最初是用来替代telnet等无加密的远程登陆,相应的一个服务器是sshd。

SSL(Secure Socket layer):是一个标准的加密和验证身份协议。

FTP(File Transfer Protocol):是一个传输协议,相应地衍生出基于这个协议的FTP服务器;例如在地址栏输入ftp://ip/就代表使用ftp协议,另外,在命令行输入ftp命令也可以进行远程连接,它会进入一个交互式的shell,包含一些ls,get等基本的命令。

vsftpd(Very secure ftp daemon):就是一个非常安全的ftp服务程序,它是从ftp衍生出来的,提供更高的安全度,但是功能不够ftp齐全。

ftps:它为ftp添加了加密功能,但一般我们不直接这样称呼它,其实它就是vaftpd加上openssl这个加密函数库,就像http加上openssl就是https,以后用vsftpd代替这个称呼就行,只要vsftpd支持了SSL模块。

SFTP(Secure file transfer protocol):就是一个安全的文件传输协议,它是搭配sshd服务使用的,也就是说,必须先开启sshd服务(打开22默认断开)通过ssh通道加密通信数据。(我有一篇博文有介绍如何通过ssh通道实现加密第三方的通信数据)

SCP(Secure copy):安全的文件复制,和sftp是差不多的,都是搭配sshd使用,也是加密通信,只是命令使用不想同罢了。

另外,FTP是使用TCP数据包协议。


FTP连接方式

FTP主动式连接

图.1 FTP服务器的主动式连接示意图

FTP服务器通道分两种,一个是命令通道,不涉及文件传输时就只使用这个通道传输命令;当涉及文件传输时,会再进行三次握手建立数据传输通道。也就是下方的Port AA和Port BB处的箭头在要求传输文件时才会发生。

主动连接带来的问题:

当在客户端和服务端之间有防火墙时,比如局域网都会使用防火墙的NAT功能,第三个箭头会发生问题,防火墙会拒绝FTP Server的连接。不知道为什么的,建议学习什么是NAT.


有两个方法可以解决这个问题:

①使用modprobe 加载ip_conntrack_ftp\ip_nat_ftp等模块。

②下面说的被动式连接。

FTP被动式连接

被动式解决了主动式带来的NAT的问题,通过客户端主动连接,在NAT转发表中存有对应的映射。

不过,一种极端的情况是,客户端和服务端都是在局域网内,那么就需要在网关那里设置一下转发功能了,也可以了解一下内网穿透了解相关知识。

图.2 FTP被动式数据流连接示意图


准备工作

好了,了解了上面这些概念后,来搭建vsftpd。

安装vsftpd

#apt-get install vsftpd
安装完后默认是启动了
# netstat -tulnp | grep vs
tcp6       0      0 :::21                   :::*                    LISTEN      15592/vsftpd
已经开打21端口监听。


相关文件及配置

/etc/vsftpd.conf vsftpd主要配置文件

/etc/ftpusers 里面列出了哪些用户不能用于远程登陆,是PAM模块的限制

/etc/pam.d/vsftpd vsftpd使用PAM模块时的相关配置文件

/var/ftp 默认没有ftp这个目录,自己新建,匿名用户登陆时就是在这个目录。(FTP也具备chroot功能)

还有一些其它配置文件,默认没有,需要用时可以查看vsftpd.conf文件,根据要求的文件名,自己新建在相应的目录下即可。如chroot_list可以在vsftpd层用于限制或允许什么账号可以登陆。

另外,像/etc/host.allow和/etc/host.deny对ftp也是有效的。


vsftpd.conf使用

如在里面添加:

userlist_enable=YES      <===    是否借助vsftpd阻挡机制处理某些用户
userlist_deny=YES      <===   当userlist_enable为yes才生效,代表列出user_list的用户将不能远程登陆ftp服务器
userlist_file=/etc/user_list      <===   此时需要在相应目录创建相应的文件
注意,如果userlist_enable为yes,而userlist_deny为no,那就意味着只有列在user_list文件中的用户才能登陆。

看下其它选项,这里我们设置登陆限制。(ftp支持三种用户登陆,分别是实体用户、访客和匿名用户,分别有不同的权限)

在vsftpd.conf里:

guest_enable=YES    <===   访客可以访问,此时任何实体账号均被假设成为guest(所以默认不开放)。
local_enable=YES   <===  主机的用户可以远程登陆,但在上面userlist_file提到的,如果有限制的话也不能登陆
anonymous_enable=YES   <=== 匿名用户可登陆,账号密码默认都是anonymous

当然,vsftpd.conf还有很多参数设置,还有一些防火墙(iptables命令)、selinux等一些安全措施的设置这里不展开了。


使用

确定vsftpd启动后,在客户端命令行登陆:

# ftp localhost
Connected to localhost.
220 (vsFTPd 3.0.2)
Name (localhost:jammgit): jammgit
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

输入实体用户账号和密码就进入交互环境了,利用get [filename]即可下载文件。

另外,也可以直接在浏览器访问了,如firefox:

图.3

这里是访客模式了,/var/ftp目录被chroot为根目录了:

:/var/ftp# ls -la
总用量 12
drwxr-xr-x   2 root root 4096  4月  2 14:36 .
drwxr-xr-x. 15 root root 4096  4月  2 14:35 ..
-rw-r--r--   1 root root   25  4月  2 14:36 index.html

基本就是这样了,更深入的学习待续。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值