Loading... <p><span style="font-size: 14px"> FTP是一个非常古老的协议,其主要的作用是用于文件的传输。FTP采用明文的方式传输,极其不安全,但在局域网等环境中使用还是比较方便的。</span></p> <h3><span style="font-size: 16px">一、工作原理</span></h3> <p><span style="font-size: 14px"> FTP的工作方式分为主动模式与被动模式。</span></p> <p><span style="font-size: 14px"> 1、主动模式</span></p> <p><span style="font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703160621-55.png" title="1436024658498848.png" alt="blob.png" /></p> <p><span style="font-size: 14px"> 上图显示了主动模式的连接过程:</span></p> <p><span style="font-size: 14px"> 1、客户端与FTP服务器的21端口建立了TCP连接;</span></p> <p><span style="font-size: 14px"> 2、客户端将一个随机端口号告知给FTP服务器,此端口用于数据传输;</span></p> <p><span style="font-size: 14px"> 3、FTP服务器通过TCP的20端口向已被告知的随机端口号传输数据。</span></p> <p><span style="font-size: 14px"> 主动模式存在一个问题:当客户端出口处部署了防火墙时,我们有可能会将客户端开启的随机端口号阻塞掉,而导致FTP的20端口无法连接到客户端。</span></p> <p><span style="font-size: 14px"> 为了解决这个问题,可以采用被动模式进行数据传输。</span></p> <p><span style="font-size: 14px"> 2、被动模式</span></p> <p><span style="font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703160622-8.png" title="1436150436116938.png" alt="blob.png" /></p> <p><span style="font-size: 14px"> 上图显示了被动连接的过程:</span></p> <p><span style="font-size: 14px"> 1、客户端与FTP服务大的21端口建立了TCP连接;</span></p> <p><span style="font-size: 14px"> 2、客户端向服务器的21端口发起被动连接请求;</span></p> <p><span style="font-size: 14px"> 3、服务器告诉客户端用于数据传输的端口号;</span></p> <p><span style="font-size: 14px"> 4、客户端使用另一个随机端口去连接服务器的数据传输端口。</span></p> <h3><span style="font-size: 16px">二、FTP服务器配置</span></h3> <p><span style="font-size: 14px"> 在CentOS中,对FTP服务增加了安全相关的改进,称为vsftpd,即“Very Secure FTP Daemon”,下面来详细介绍一下vsftpd的相关配置。</span></p> <p><span style="font-size: 14px"> 1、相关的配置文件</span></p> <p><span style="font-size: 14px"> /etc/vsftpd/vsftpd.conf</span></p> <p><span style="font-size: 14px"> 主要配置文件,可通过man 5 vsftpd.conf查看详细说明。 </span></p> <p><span style="font-size: 14px"> /etc/pam.d/vsftpd</span></p> <p><span style="font-size: 14px"> 用于身份认证。</span></p> <p><span style="font-size: 14px"> /etc/vsftpd/ftpusers</span></p> <p><span style="font-size: 14px"> 设置无法登录FTP服务器的用户配置文件。 </span></p> <p><span style="font-size: 14px"> /etc/vsftpd/user_list</span></p> <p><span style="font-size: 14px"> 与ftpusers文件的作用相同,只能这个文件的生效与否需要在主配置文件中定义。</span></p> <p><span style="font-size: 14px"> /etc/vsftpd/chroot_list</span></p> <p><span style="font-size: 14px"> 限制用户只能在其主目录中进行操作,不可以到其它的目录中。</span></p> <p><span style="font-size: 14px"> /var/ftp</span></p> <p><span style="font-size: 14px"> 匿名用户的根目录。</span></p> <p><span style="font-size: 14px"> 2、vsftpd.conf配置说明</span></p> <p><span style="font-size: 14px"> connect_from_port_20=YES(NO)</span></p> <p><span style="font-size: 14px"> 数据传输的端口号。</span></p> <p><span style="font-size: 14px"> listen_port=21</span></p> <p><span style="font-size: 14px"> 连接监听端口。</span></p> <p><span style="font-size: 14px"> dirmessage_enable=YES(NO)</span></p> <p><span style="font-size: 14px"> 进入目录时是否显示提示信息。</span></p> <p><span style="font-size: 14px"> message_file=.message</span></p> <p><span style="font-size: 14px"> 当dirmessage_enable=YES时,指定提示信息从哪个文件中读取。</span></p> <p><span style="font-size: 14px"> listen=YES(NO)</span></p> <p><span style="font-size: 14px"> vsftpd是否以stand alone的方式启动。</span></p> <p><span style="font-size: 14px"> pasv_enable=YES(NO)</span></p> <p><span style="font-size: 14px"> 是否启用被动模式。</span></p> <p><span style="font-size: 14px"> use_localtime=YES(NO)</span></p> <p><span style="font-size: 14px"> 是否使用本地时间。</span></p> <p><span style="font-size: 14px"> write_enable=YES(NO)</span></p> <p><span style="font-size: 14px"> 是否允许用户上传数据。</span></p> <p><span style="font-size: 14px"> connect_timeout=60</span></p> <p><span style="font-size: 14px"> 单位为秒,主动连接模式下,60秒内得不到客户端响应时强制断线。</span></p> <p><span style="font-size: 14px"> accept_timeout=60</span></p> <p><span style="font-size: 14px"> 单位为秒,被动连接模式下,60秒内得不到客户端响应时强制断线。</span></p> <p><span style="font-size: 14px"> data_connection_timeout=300</span></p> <p><span style="font-size: 14px"> 单位为秒,无论什么模式下,300秒内得不能正常完成数据传输时强制断线。</span></p> <p><span style="font-size: 14px"> idle_session_timeout=300</span></p> <p><span style="font-size: 14px"> 单位为秒,用户300秒内没有任何操作时强制断线。</span></p> <p><span style="font-size: 14px"> max_clients=0</span></p> <p><span style="font-size: 14px"> 最大客户端连接数,0表示没有限制。</span></p> <p><span style="font-size: 14px"> max_per_ip=0</span></p> <p><span style="font-size: 14px"> 同一IP地址同一时间允许的最大连接数。</span></p> <p><span style="font-size: 14px"> pasv_min_port=0</span></p> <p><span style="font-size: 14px"> 被动连接时,如果想将随机端口号控制在一定的范围内,使用此选项来设置随机端口号开始值。</span></p> <p><span style="font-size: 14px"> pasv_max_port=0</span></p> <p><span style="font-size: 14px"> 被动连接时,如果想将随机端口号控制在一定的范围内,使用此选项来设置随机端口号结束值。</span></p> <p><span style="font-size: 14px"> ftpd_banner=</span></p> <p><span style="font-size: 14px"> 用户连接到FTP服务器时显示的提示信息,信息内容直接写在等号后面。</span></p> <p><span style="font-size: 14px"> banner_file=/path/to/somefile</span></p> <p><span style="font-size: 14px"> 用户连接到FTP服务器时显示的提示信息,信息内容为文件中的信息。</span></p> <p><span style="font-size: 14px"> guest_enable=YES(NO)</span></p> <p><span style="font-size: 14px"> 所有系统用户访问FTP时均被当成guest用户。</span></p> <p><span style="font-size: 14px"> guest_username=ftp</span></p> <p><span style="font-size: 14px"> 指定guest用户的用户名。</span></p> <p><span style="font-size: 14px"> local_enable=YES(NO)</span></p> <p><span style="font-size: 14px"> 是否允许/etc/passwd内的账号登录FTP服务器。</span></p> <p><span style="font-size: 14px"> local_max_rate=0</span></p> <p><span style="font-size: 14px"> 实体用户的传输速度上限。</span></p> <p><span style="font-size: 14px"> chroot_local_user=YES(NO)</span></p> <p><span style="font-size: 14px"> 是否限制用户在自己的主目录之内。</span></p> <p><span style="font-size: 14px"> chroot_list_enable=YES(NO)</span></p> <p><span style="font-size: 14px"> 是否启用chroot写入列表的功能。</span></p> <p><span style="font-size: 14px"> chroot_list_file=/etc/vsftpd/chroot_list</span></p> <p><span style="font-size: 14px"> 如果chroot_list_enable为YES,则/etc/vsftpd/chroot_list中的用户将不受chroot的限制。</span></p> <p><span style="font-size: 14px"> userlist_enable=YES(NO)</span></p> <p><span style="font-size: 14px"> 是否阻止某些用户登录。</span></p> <p><span style="font-size: 14px"> userlist_deny=YES(NO)</span></p> <p><span style="font-size: 14px"> user_list_enalbe设置为YES时生效,启用拒绝用户登录的文件,具体文件见下面的配置项。</span></p> <p><span style="font-size: 14px"> userlist_file=/etc/vsftpd/user_list</span></p> <p><span style="font-size: 14px"> 此文件中的用户都无法访问FTP服务器。</span></p> <p><span style="font-size: 14px"> anonymous_enable=YES(NO)</span></p> <p><span style="font-size: 14px"> 是否允许匿名登录。</span></p> <p><span style="font-size: 14px"> anon_world_readable_only=YES(NO)</span></p> <p><span style="font-size: 14px"> 允许匿名用户有下载的权限。</span></p> <p><span style="font-size: 14px"> anon_other_write_enable=YES(NO)</span></p> <p><span style="font-size: 14px"> 是否允许anonymous具有除了写入之外的权限,默认为NO。</span></p> <p><span style="font-size: 14px"> tcp_wrappers=YES(NO)</span></p> <p><span style="font-size: 14px"> 是否支持tcp_wrappers。</span></p> <p><span style="font-size: 14px"> xferlog_enable=YES(NO)</span></p> <p><span style="font-size: 14px"> 是否记录用户上传、上载文件的操作。</span></p> <p><span style="font-size: 14px"> xferlog_file=/var/log/xferlog</span></p> <p><span style="font-size: 14px"> 指定日志文件的位置。</span></p> <p><span style="font-size: 14px"> 3、安装vsftpd</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160622-94.png" title="1436284461858657.png" alt="1.png" /><span style="font-size: 14px"> 4、启动vsftpd</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160622-56.png" title="1436284568809404.png" alt="2.png" /></p> <p><span style="font-size: 14px"> 在启动vsftpd服务后,不需要任何配置就可以使用匿名的方式访问FTP服务器了,默认的访问路径为/var/ftp。</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160622-80.png" title="1436284766479319.png" alt="3.png" /></p> <h3><span style="font-size: 16px">三、FTP服务器配置实例</span></h3> <p><span style="font-size: 14px"> 默认vsftpd的配置并不总是能够满足我们的实际需求,下面通过实例来说明vsftpd的用户认证及权限控制的功能。</span></p> <p><span style="font-size: 14px"> 1、禁止匿名用户登录,并且允许root用户登录FTP服务器</span></p> <p><span style="font-size: 14px"> 修改主配置文件</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160622-32.png" title="1436289841479279.png" alt="3.png" /></p> <p><span style="font-size: 14px"> 放开root用户的限制,需要在下面的两个文件中注释掉root用户,以使得root用户可以登录FTP服务器。</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160622-61.png" title="1436289863960153.png" alt="4.png" /></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160623-20.png" title="1436289873397766.png" alt="5.png" /></p> <p><span style="font-size: 14px"> 重启vsftpd服务</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160623-3.png" title="1436290877113393.png" alt="8.png" /></p> <p><span style="font-size: 14px"> 验证</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160623-16.png" title="1436290703781318.png" alt="6.png" /></p> <p><span style="font-size: 14px"> 2、将root用户的权限控制在其主目录中</span></p> <p><span style="font-size: 14px"> 修改主配置文件 </span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160623-38.png" title="1436290791119418.png" alt="7.png" /></p> <p><span style="font-size: 14px"> 注意chroot_list文件必须存在。</span></p> <p><span style="font-size: 14px"> 重启服务:</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160623-3.png" title="1436290877113393.png" alt="8.png" /></p> <p><span style="font-size: 14px"> 验证:</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160623-3-1.png" title="1436291055831360.png" alt="9.png" /></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160623-30.png" title="1436291087771552.png" alt="10.png" /></p> <p><span style="font-size: 14px"> 2、创建一个普通用户,此用户有上传文件的权限</span></p> <p><span style="font-size: 14px"> 修改主配置文件:</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160623-72.png" title="1436295270650740.png" alt="10.png" /></p> <p><span style="font-size: 14px"> 在系统中创建用户fin,并使用此用户登录到FTP服务器上,上传一个文件。</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703160623-53.png" title="1436295444128171.png" alt="11.png" /></p> <p><span style="font-size: 14px"> 以上两个实例只是FTP的最基本的用法,其它的设置可以根据上文中的选项说明进行配置,也可参考man手册,此处就不在做过多的演示了。</span></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信