FTP服务的简介和配置详解

注意:配置FTP服务时,最好关闭防火墙和selinux

1FTP服务简介

FTP File Transfer Protocol文件传输协议)的英文简称,而中文简称为“文件传输协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"Download)和"上传"Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件,由于FTP的文件传输是明文方式,具有一定危险性,所以就诞生了一种更加安全的传输方式vsftp,下面主要介绍vsftp的特性及相关配置。

 

2VSFTP特点

VSFTP是一个比FTP更安全的软件具有以下特点:

1vsftp一般以普通用户运行,降低了进程的权限,提高了安全性

 

2)任何需要执行较高权限的指令都需要上层程序的许可

 

3ftp的命令都被整合到了vsftp中,不需要系统额外提供命令

 

4)用于chroot功能,可以改变用户的根目录,限制用户只能在自己的家目录

 

5vsftpd 是一个基于GPL发布的FTP服务器软件。其中的vs是“ Very Secure”的缩写,由此名称缩写可以看出,本服务器的初衷就是服务的安全性。

 

6vsftpdRedHat Linux默认使用的ftp服务端软件。

 

7vsftpd不再依赖于xinetd服务

 

8vsftpd可同时允许匿名( anonymous )与本地用户(local)访问,还可以支持虚拟用户。

 

3VSFTP连接类型

控制连接:TCP 21,用于发送FTP命令信息

数据连接:TCP 20,用于上传、下载数据

 

4Vsftp工作模式

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式

主动模式:服务端从20端口主动向客户端发起连接

被动模式:服务端在指定范围内某个端口被动等待客户端连接

 

主动模式端口分配:控制端口 21  传输数据端口 20

被动模式端口分配:控制端口 21  传输数据端口 随机

blob.png

5VSFTP传输模式

1文本模式:ASCII模式,以文本序列传输数据

2二进制模式:Binary模式,以二进制序列传输数据

 

6FTP用户的类型

1匿名用户:anonymousftp

2本地用户:帐号名称、密码等信息保存在passwd/shadow文件中

3虚拟用户:使用独立的帐号/密码数据文件

 

7VSFTP配置文件介绍

配置文件作用

配置文件路径

vsftpd的可执行文件(主程序)

/usr/sbin/vsftpd

vsftpd启动脚本

/etc/rc.d/init.d/vsftpd

vsftpd主配置文件

/etc/vsftpd/vsftpd.conf

vsftpdPAM认证文件

/etc/pam.d/vsftpd

禁止使用vsftpd的用户列表文件

/etc/vsftpd/ftpusers

禁止或允许使用vsftpd的用户列表文件

/etc/vsftpd/user_list

匿名用户主目录

/var/ftp

 

8vsftpd.conf文件常用的配置参数说明

1)常用的全局配置

listen_address=192.168.4.1          设置监听的IP地址

listen=YES                        是否以独立运行的方式监听服务

listen_port=21                     设置监听FTP服务的端口号

write_enable=YES                 是否启用写入权限

download_enableYES             是否允许下载文件

max_clients=0                    限制并发客户端连接数

max_per_ip=0                    限制同一IP地址的并发连接数

pasv_enable=yes                  设置最小的被动端口号

pasv_min_port=9981               设置最小的被动端口号

pasv_max_port=9981               设置最大的被动端口号

dirmessage_enable=yes             是否显示目录说明文件

xferlog_enable=yes                 是否记录ftp传输过程

xferlog_file=/var/log/vsftpd.log       日志的路径和名字

xferlog_std_format=yes             是否使用标准的ftp xferlog

chown_username=username  是否改变上传文件的属主,如果是则需要输入一个系统用户名

idle_session_timeout=600          设置默认不活跃session时间

date_connection_timeout=120       设置数据传输超时时间

ftpd_banner=welcome to ftp server    定制欢迎信息

 

2)本地用户访问限制

userlist_enable=YES        是否启用user_list列表文件

userlist_deny=YES         是否禁用user_list中的用户

 

3)本地用户权限控制

local_enable=YES           是否启用本地系统用户

local_umask=022           本地用户所上传文件的权限掩码

local_root=/var/ftp         设置本地用户的FTP根目录

chroot_local_user=YES       是否将用户禁锢在主目录

local_max_rate=0           限制最大传输速率(字节/秒)

chroot_list_enable=YES      配合下面的文件使用

chroot_list_file=/etc/vsftpd/chroot_list   配合使用,列表中的用户将被禁锢在目录中

说明:本地用户的权限除了使用以上的参数控制以外,还可以使用系统的权限进行控制。ftp的权限和系统的权限都允许时才会放行,只要有一方权限不足使用FTP就会出现权限不足。

4匿名权限控制

anonymous_enable=YES        启用匿名访问

anon_umask=022              匿名用户所上传文件的权限掩码

anon_root=/var/ftp            匿名用户的FTP根目录

anon_word_readable_only=YES  允许匿名下载

anon_upload_enable=YES      允许上传文件anon_mkdir_write_enable=YES:允许创建目录

anon_other_write_enable=YES   开放其他写入权

anon_max_rate=0             限制最大传输速率(字节/秒)

 

说明:匿名用户账号名称默认为ftpanonymous,不需要登录密码,默认只能下载无法上传。

 

9、配置拥有所有权限的匿名用户

说明:这里为了展示匿名用户的所有功能才这样配置,实际中不能这样配置。

1安装vsftp软件,并按照下面配置修改配置文件

[root@localhost ~]# yum -y install vsftpd

[root@localhost ~]# chown ftp /var/ftp/pub/

[root@localhost ~]# cp -a /etc/vsftpd/vsftpd.conf  /etc/vsftpd/vsftpd.conf.back

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES     启用匿名访问

anon_upload_enable=YES    允许匿名用户可上传文件

anon_mkdir_write_enable=YES   允许匿名用户可创建目录

anon_other_write_enable=YES   开放其他写入权比如改名,需要手动添加

 

[root@localhost ~]# systemctl restart vsftpd

 

2)在windows上或者Linux上测试即可

a、在Windows上文件里面的地址栏输入ftp://192.168.115.120/,如下所示:

blob.png

输入地址以后,进入pub目录测试能否上传文件、删除文件、创建目录、给文件改名等功能。

 

b、在Linux中匿名登陆FTP服务器需要先yum install ftp软件,然后输入ftp 192.168.115.120,之后输入用户ftp或者anonymous,密码为空回车即可登陆。

 

10、配置ftp本地用户的访问控制

1)把之前的虚拟机还原,重新安装vsftpd软件并创建本地用户

[root@localhost ~]# yum -y install vsftpd

[root@localhost ~]# chown ftp /var/ftp/pub/

[root@localhost ~]# cp -a /etc/vsftpd/vsftpd.conf  /etc/vsftpd/vsftpd.conf.back

[root@localhost ~]# useradd user1

[root@localhost ~]# useradd user2

[root@localhost ~]# useradd user3

[root@localhost ~]# echo '123456' | passwd --stdin user1

[root@localhost ~]# echo '123456' | passwd --stdin user2

[root@localhost ~]# echo '123456' | passwd --stdin user3

 

2)修改配置文件设置本地用户的访问控制

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

local_enable=YES      启用本地系统用户

local_umask=000      修改权限掩码为000,用系统的setfacl权限限制即可

chroot_local_user=YES   是否将用户禁锢在local_root设置的目录

local_root=/var/ftp      设置本地用户的FTP根目录

chroot_list_enable=YES   是否启用列表控制,启用后和chroot_list_file配合使用

chroot_list_file=/etc/vsftpd/chroot_list  该文件要自己创建,列表中的用户将被禁锢在目录中

userlist_enable=YES      是否开启用户列表访问控制

userlist_deny=YES        拒绝访问FTP用户列表是否启用

 

[root@localhost ~]# systemctl restart vsftpd

 

说明:userlist_enable=YES对应/etc/vsftpd/user_list文件灵活控制用户访问

 

a userlist_enable=YES

userlist_deny=YES

满足这两个条件时,出现在user_list文件里的用户会被拒绝访问FTP服务器

 

buserlist_enable=YES

userlist_deny=NO

满足这两个条件时,只允许出现在user_list文件里的用户登录FTP服务器

 

c)只要出现在/etc/vsftpd/ftpusers文件里的用户都禁止登陆FTP服务器,优先级要高于上面的user_list文件

 

3)在WindowsLinux中测试上面的配置是否生效

a)在Windows测试输入:ftp://192.168.115.106之后输入对应的本地用户名和密码登录测试

 

b)在Linux测试之前先yum安装ftp软件,然后输入ftp 192.168.115.106回车然后输入对应的本地用户名回车然后输入密码回车即可进行登录测试 

 

c如果需要不同用户给予不同的访问权限,可以使用系统的setfacl进行设置。

11修改vsftpd服务的监听地址、端口

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

listen=YES      是否开启监听地址和端口

listen_address=192.168.115.120     监听的IP地址,写FTP服务器的地址

listen_port=2100      监听的端口,默认为21,建议不修改

注意:上面最后两行的参数需要手动写入。

12开启使用FTP服务器的被动模式

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

pasv_enable=YES        是否开启被动模式

pasv_min_port=24500    传输数据时随机端口最小值

pasv_max_port=24600    传输数据时随机端口最大值

注意:上面三行的参数需要手动写入。