FTP服务器-vsftpd

FTP服务基础

FTP(File Transfer Protocol,文件传输协议)是典型的C/S结构的应用层协议,需要由服务端软件、客户端软件两个部分共同实现文件传输功能。

FTP连接及传输模式

FTP服务器默认使用TCP协议的20、21端口与客户端进行通信。
20端口用于建立数据连接,并传输文件数据;21端口用于建立控制连接,并传输FTP控制命令
根据FTP服务器在建立数据连接过程中的主、被动关系,FTP数据连接分为主动模式和被动模式:

主动模式:服务器主动发起数据连接,首先由客户端向服务端的21端口建立FTP控制连接,当需要传输数据时,客户端以PORT命令告知服务器“我打开了某端口,你过来连接我”,于是服务器从20端口向客户端的该端口发送请求并建立数据连接。

被动模式:服务器被动等待数据连接,如果客户机所在网络的防火墙禁止主动模式连接,通常会使用被动模式。首先由客户端向服务端的21端口建立FTP控制连接,当需要传输数据时,服务器以PASV命令告知客户端“我打开了某端口,你过来连接我”,于是客户端向服务器的该端口(非20)发送请求并建立数据连接。

客户端与服务器建立好数据连接后,就可以进行文件传输了。在传输文件时,根据是否进行字符切换,分为文本模式和二进制模式:
文本模式:又称为ASCII模式,这种模式在传输文件时使用ASCII标准字符序列,一般只用于纯文本文件的传输。
二进制模式:又称为Binary模式,这种模式不会转换文件中的字符序列,更适合传输程序、图片等非纯文本字符的文件。
大多数FTP客户端工具可以根据文件类型自动选择文件传输模式,而无需用户手工指定

FTP用户类型

使用FTP客户端软件访问服务器时,通常要用到一类特殊的用户帐号,其用户名为ftp或anonymous,提供任意密码(包括空密码)都可以通过服务器的验证,这样的用户称为匿名用户

除了不需要密码验证的匿名用户以外,FTP服务器还可以直接使用本机的系统用户帐号来进行验证,这些用户通常被称为本地用户

搭建FTP服务器

这里我选用centos7+vsftpd来搭建FTP服务

通过yum安装vsftpd

#yum install -y vsftpd

配置匿名访问的FTP服务

修改vsftpd的配置文件

vi /etc/vsftpd/vsftpd.conf

匿名用户的一些配置项:
anonymous_enable=YES
#允许匿名用户登录FTP

anon_root=/var/ftp/pub
#设置匿名用户的登录目录(如需要,需自己添加并修改)

anon_upload_enable=YES
#打开匿名用户的上传权限

anon_mkdir_write_enable=YES
#打开匿名用户创建目录的权限

anon_other_write_enable=YES
#打开匿名用户删除和重命名的权限(如需要,需自己添加)

anon_umask=022
#匿名用户的掩码(如需要,需自己添加,含义:如umask是022,这时创建一个权限为666的文件,文件的实际权限为666-022=644
修改的内容如下
1.允许匿名访问

anonymous_enable=YES

2、允许匿名用户创建目录

anon_mkdir_write_enable=YES

3、允许匿名用户上传文件

anon_upload_enable=YES

修改FTP共享文件夹的权限

默认路径为/var/ftp/ ,其中pub目录专门用来存放用户上传的文件
/var/ftp/的默认权限为755,匿名用户对Linux文件系统来说属于其他用户,虽然vsftpd.conf配置文件中默认

#chmod 777 /var/ftp/

关闭防火墙及Selinux

通常情况下防火墙会将传入连接阻止,解决方法有两种,一是修改防火墙配置,放行21端口,一时关闭防火墙,selinux也是同理,这里我采用后者。

#systemctl stop firewalld
#setenforce 0

启动vsftp服务器

# systemctl start vsftpd

查看端口状态

# netstat -antp | grep vsftpd
tcp6       0      0 :::21           :::*          LISTEN      4744/vsftpd 

客户端访问、验证各项权限

这里我用windows资源管理器来访问
FTP服务器-vsftpd_第1张图片

配置本地用户登录的FTP服务

配置文件vsftpd.conf

常用配置项:

anonymous_enable=no
#不允许匿名用户登入

local_enable=YES/NO(YES)
#控制是否允许本地用户登入,YES 为允许本地用户登入,NO为不允许。默认值为YES。

local_root=/home/username
#当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。

write_enable=YES/NO(YES)
#是否允许登陆用户有写权限。属于全局设置,默认值为YES。

local_umask=022
#本地用户新增档案时的umask 值。默认值为077。

file_open_mode=0755
#本地用户上传档案后的档案权限,与chmod所使用的数值相同。默认值为0666。

chroot_local_user=YES
#用于指定用户列表文件中的用户不允许切换到上级目录。默认值为NO。


#用于控制用户访问,NO为不启用该用户访问控制列表

userlist_deny=YES/NO
#用于指定用户访问控制列表的含义,YES为黑名单,NO为白名单

这里我修改的配置项:

anonymous_enable=no 不允许匿名访问
userlist_enable=YES 启用用户访问控制列表
userlist_deny=NO 定义用户访问控制列表为白名单
local_root=/var/ftp/ 设置本地用户访问ftp的根目录,不加此选项根目录就是本地用户的家目录

修改/etc/vsftpd/user_list文件

vim /etc/vsftpd/user_list

FTP服务器-vsftpd_第2张图片
将预设的用户名单清空,把我们允许访问的本地用户添加进去

启动服务

与匿名访问一样需要关闭防火墙和selinux。

验证

FTP服务器-vsftpd_第3张图片
FTP服务器-vsftpd_第4张图片

你可能感兴趣的:(LINUX网络服务,linux,ftp,服务器)