File Transfer Protocol,文件传输协议,应用层的文件共享服务,是互联网控制文件实现双向传输,同样ftp也是一个应用程序,不同系统对应的应用程序也不同,但是所遵循的是同一个协议 vsftpd
文件传输协议
FTP原理用户分类使用方式端口传输方式使用模式主动模式/standard/port方式,服务器使用20端口连接客户端被动模式/passive/pasv方式主被动模式优缺点FTP的优缺点FTP配置配置文件匿名用户实现本地用户实现虚拟用户实现实例实现FTP原理
是互联网控制文件实现双向传输,同样ftp也是一个应用程序,不同系统对应的应用程序也不同,但是所遵循的是同一个协议 .
FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
文件传送(file transfer)和文件访问(fileaccess)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。
客户/服务器系统。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。依照 FTP 协议提供服务,进行文件传送的计算机就是 FTP服务器,而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。
用户分类
ftpReal帐户(本地用户)这类用户是指在FTP服务上拥有帐号。当这类用户登录FTP服务器的时候,其默认的主目录就是其帐号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。ftpGuest用户(虚拟用户)
在FTP服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障FTP服务上其他文件的安全性。这类帐户,在Vsftpd软件中就叫做Guest用户。拥有这类用户的帐,只能够访问其主目录下的目录,而不得访问主目录以外的文件。ftpAnonymous(匿名)用户
这也是我们通常所说的匿名访问。这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源。
在组建FTP服务器的时候,我们就需要根据用户的类型,对用户进行归类。默认情况下,Vsftpd服务器会把建立的所有帐户都归属为Real用户。但是,这往往不符合企业安全的需要,因为这类用户不仅可以访问自己的主目录,而且,还可以访问其他用户的目录。这就给其他用户所在的空间带来一定的安全隐患。所以,企业要根据实际情况,修改用户所在的类别。
使用方式
端口
TCP21 命令
TCP20 数据
传输方式
ASCII传输方式假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件。在拷贝任何非文本文件之前,用binary命令告诉ftp逐字拷贝。二进制传输模式
在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。
如在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会损坏数据。(ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果传输二进制文件,所有的位都是重要的。)
使用模式
主动模式/standard/port方式,服务器使用20端口连接客户端
主动模式下,FTP客户端从任意的非特殊的端口(N > 1023)连入到FTP服务器的命令端口–21端口。然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >=1024)端口发送命令给FTP服务器。服务器会反过来连接用户本地指定的数据端口,比如20端口。
以服务器端防火墙为立足点,要支持主动模式FTP需要打开如下交互中使用到的端口:
FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)FTP服务器数据(20)端口到客户端端口(>1023)(服务器初始化数据连接到客户端数据端口)FTP服务器数据(20)端口接受客户端端口(>1023)(客户端发送ACK包到服务器的数据端口)
被动模式/passive/pasv方式
为了解决服务器发起到客户的连接的问题,在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)FTP服务器数据端口(>1023)接受客户端端口(>1023)(客户端初始化数据连接到服务器指定的任意端口)FTP服务器数据端口(>1023)到客户端端口(>1023)(服务器发送ACK响应和数据到客户端的数据端口)
主被动模式优缺点
主动模式对ftp对服务器管理有利,是由FTP服务器主动与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞。而被动模式对客户端管理有效,它是企图与服务端的随机端口建立连接但是这个端口很可能又会被服务端的防火墙所拒绝。防火墙的意义:链接追踪/RELATED自动监听该端口,并且设置防火墙允许被人来访问该端口
一般做安全措施我们是在被动模式下做,由于主动模式是打开一个端口给客户端传送数据,我们做安全措施都是基于端口来做所以不太好做,一般也不建议去做。但是被动模式也是在不停地放端口,所以慢慢的ftp慢慢的在淘汰。
FTP的优缺点
FTP实现的目标(优点):
1. 促进文件的共享(计算机程序或数据)2. 向用户屏蔽不同主机中各种文件存储系统(File system)的细节3. 可靠和高效的传输数据4. 支持任意类型的文件传输5.实现用户认证
缺点:
1. 密码和文件内容都使用明文传输,可能发生窃听。2. 因为必须开放一个随机的端口以创建连接,当防火墙存在时,客户端很难过滤处于主动模式下的FTP流量。这个问题,通过使用被动模式的FTP,得到了很大解决。3. 服务器可能会被告知连接一个第三方计算机的保留端口。4. 此方式在需要传输文件数量很多的小文件时,性能不好
FTP配置
配置文件
主配置文件:vim /etc/vsftpd/vsftpd.conf从配置文件vim /var/ftp/pub主配置文件详解anonymous_enable=YES 是否启用匿名用户 宿主目录(用户家目录 /home/redhat)local_enable=YES 启用本地用户访问write_enable=YES 允许写入(本地用户要实现上传就需要快开启它)local_umask=022 默认本地用户上传普通文件权限 644 755dirmessage_enable=YES 显示每个目录下的文件信息xferlog_enable=YES 日志启用connect_from_port_20=YES 主动请求的数据端口chown_uploads=YES 所有匿名用户上传的文件所属用户将会被改成chown_usernamechown_username=whoever 匿名上传的所属用户名是whoeverxferlog_file=/var/log/xferlog 启用的日志文件xferlog_std_format=YESidle_session_timeout=600 空闲连接超时data_connection_timeout=120 数据连接超时nopriv_user=ftpsecure 当服务器运行于最底层时使用的用户名chroot_list_enable=YES chroot_local_user=YES 所有文件列出用户, 可以切换到其他目录chroot_list_file=/etc/vsftpd/chroot_listlisten=NO 服务将自己监听处理listen_ipv6=YESpam_service_name=vsftpd 设置PAM认证模块使用名称预设为vsftpduserlist_enable=YEStcp_wrappers=YES 服务端和客户端访问控制策略(服务器级别的一种防火墙)
匿名用户实现
[root@localhost ~]# yum install vsftpd -y 下载systemctl start vsftpd默认配置即可实现关闭防火墙测试:systemctl stop firewalld.service[root@localhost ]# setenforce 0文件在/var/ftp/pub下可创建window资源管理器或浏览器中:ftp:// ip地址
测试:在windows下和浏览器中都可以访问
可以实现基本的下载:
不能进行文件创建和上传:
上传#修改配置文件中匿名上传的相关选项[root@localhost var]# vim /etc/vsftpd/vsftpd.confanon_umask=022 (追加写入)文件末尾追加29行 anon_upload_enable=YES33行 anon_mkdir_write_enable=YES#修改匿名用户目录的权限[root@localhost ftp]# chmod 777 pub/
测试可以上传 和下载文件但是不能删除文件:
新建文件夹
:
删除失败:
匿名用户-----ftp#修改匿名上传布尔值[root@ldapvar]# getsebool -a | grep ftpd_anon_writeftpd_anon_write--> on[root@ldapftp]# setsebool ftpd_anon_write on#修改匿名上传的上下文权限[root@ldapvar]# ll -Z /var/ftpdrwxr-xrwx.root root system_u:object_r:public_content_rw_t:s0 pub[root@ldapftp]# chcon -t public_content_rw_t pub/[删除]#修改配置文件,添加如下选项[root@ldap ftp]# vi /etc/vsftpd/vsftpd.confanon_other_write_enable=YES再上传下载的前提下可以删除文件,以及替换文件
测试:可以删除刚才创建的文件
本地用户实现
[下载]#修改主配置文件开启本地用户权限[root@ldap ftp]# vi /etc/vsftpd/vsftpd.confanonymous_enable=NO默认上来是在用户的家目录,匿名用户上来默认是在/var/ftp/pub目录下#修改布尔值打开/home目录的权限[root@localhosthaha]# getsebool -a | grep ftp_home_dirftp_home_dir--> off[root@localhosthaha]# setsebool -P ftp_home_dir on
重启后测试:不允许匿名用户访问
进入到用户的家目录:
[本地用户上传]#修改主配置文件开启本地用户权限[root@ldap ftp]# vi /etc/vsftpd/vsftpd.confwrite_enable=YESLocal_umask=022>>测试:访问ftp://ip需要通过用户名密码进行登录,默认访问的界面是该用户目录下的所有文件,(注意除root用户),可以通过本地用户上传文件和下载文件也可以删除文件。弊端是:可以来回切换都可以通过本地用户的身份看到/下的所有东西(在浏览器中可测试)。
[删除]同上传配置[遍历]#首先开启chroot选项[root@ldap ftp]# vi /etc/vsftpd/vsftpd.confallow_writeable_chroot=YES//通过chroot对用户宿主目录实现禁锢#然后使用下面两个选项之一,第一种是本地用户不能上下翻,第二种是指定列表用户不能翻。#指定本地用户不能chroot,不能翻 redhat redhatchroot_local_user=YES#开启通过列表的方式来指定用户chroot_list_enable=YES#指定用户列表文件chroot_list_file=/etc/vsftpd/chroot_listredhat#在当前目录创建用户列表文件[root@localhost vsftpd]# cat chroot_listhahaxixilala1、当chroot_local_user=YES,chroot_list_enable=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。2、当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到/目录。3、当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到/目录。4、当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。
测试,只有列表中的用户可以访问,其余用户不能访问。
虚拟用户实现
虚拟用户guest_user(本地用户宿主目录禁锢)#创建系统用户,禁止该用户进行登陆[root@ldap ftp]# useradd -s /sbin/nologin vhaha#修改用户家目录权限[root@localhost vsftpd]# chmod o+rx/home/vhaha/#修改主配置文件,增加以下三个选项[root@ldap ftp]# vi /etc/vsftpd/vsftpd.confguest_enable=YES客人模式guest_username=vhaha #vhaha为系统用户virtual_use_local_privs=YES 本地虚拟用户特权开启pam_service_name=vsftpd 设置PAM认证模块使用名称预设为vsftpd#创建虚拟用户数据库文件:#创建虚拟用户文件如下:#格式为一行用户名,一行密码,示例中abc为用户名,redhat为密码[root@localhost vsftpd]# vim vhaha1redhat2redhat3redhat#将虚拟用户文件转换成用户数据库文件[root@localhost vsftpd]# db_load -T -t hash -f vhahavhaha.db#修改虚拟用户数据库文件权限[root@localhost vsftpd]# chmod 600 vhaha.db#修改PAM认证方式#编辑认证配置文件vim /etc/pam.d/vsftpd#注释掉所有行,并添加以下两行:auth required pam_userdb.so db=/etc/vsftpd/vhahaaccount required pam_userdb.so db=/etc/vsftpd/vhaha#注:(.so动态连接库)数据库文件名的“.db”不用输入#完成以上配置后,重启服务进行测试是虚拟用户不能进行登录 使用chroot_local
实例实现
# useradd teacher -s /sbin/nologin---添加用户# chmod o+rx /home/teacher---修改权限# vim /etc/vsftpd/teacher---编辑添加用户
修改配置文件
#vim /etc/vsftpd/vsftpd.conf
创建用户数据库文件:
#db_load -T -t hash -f teacher /etc/vsftpd/teacher.db #teacher文件创建目录#chmod 600 /etc/vsftpd/teacher.db
修改pam认证方式
#vim /etc/pam.d/vsftpd
禁锢用户主目录
#vim /etc/vsftpd/chroot_list
重启服务进行测试:
《庄子》有云:子非鱼,焉知鱼之乐?
如果你喜欢这篇文章就给它点个赞吧!