赞
踩
FTP是应用层的文件共享服务
(1)应用程序:
(2)服务端口:
(3)服务模式:
主动模式下,FTP客户端从任意的非特殊的端口(N > 1023)连入到FTP服务器的命令端口–21端口。然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >= 1024)端口发送命令给FTP服务器。服务器会反过来连接用户本地指定的数据端口,比如20端口。
以服务器端防火墙为立足点,要支持主动模式FTP需要打开如下交互中使用到的端口:
用图表示如下:
以服务器端防火墙为立足点,要支持主动模式FTP需要打开如下交互中使用到的端口:
为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
用图表示如下:
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
主动模式对ftp对服务器管理有利,是由FTP服务器主动与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞。而被动模式对客户端管理有效,它是企图 与服务端的随机端口建立连接但是这个端口很可能又会被服务端的防火墙所拒绝。
一般做安全措施我们是在被动模式下做,由于主动模式是打开一个端口给客户端传送数据,我们做安全措施都是基于端口来做所以不太好做,一般也不建议去做。但是被动模式也是在不停地放端口,所以慢慢的ftp慢慢的在淘汰。
防火墙的意义:
链接追踪/RELATED------
自动监听该端口,并且设置防火墙允许被人来访问该端口
FTP的用户转换:
匿名用户–>系统用户
虚拟用户–>系统用户
- [root@slave1 ~]# yum install -y vsftpd
- [root@slave1 ~]# systemctl restart vsftpd
两个配置文件
- # 主配置文件
- [root@slave1 ~]# vim /etc/vsftpd/vsftpd.conf
- # 从配置文件
- [root@slave1 ~]# vim /var/ftp/pub
主配置文件的详解:
- anonymous_enable=YES //是否启用匿名用户
- local_enable=YES
- write_enable=YES //允许写入(无论是匿名用户还是本地用户要实现上传就需要快开启它)
- local_umask=022 //默认本地用户上传文件权限755
- dirmessage_enable=YES //显示每个目录下的文件信息
- xferlog_enable=YES //日志启用
- connect_from_port_20=YES //主动请求的数据端口
- chown_uploads=YES //所有匿名用户上传的文件所属用户将会被改成chown_username
- chown_username=whoever //匿名上传的所属用户名是whoever
- xferlog_file=/var/log/xferlog //启用的日志文件
- xferlog_std_format=YES
- idle_session_timeout=600 //空闲连接超时
- data_connection_timeout=120 //数据连接超时
- nopriv_user=ftpsecure //当服务器运行于最底层时使用的用户名
- chroot_list_enable=YES chroot_local_user=YES //所有文件列出用户, 可以切换到其他目录
- chroot_list_file=/etc/vsftpd/chroot_list
- listen=NO //服务将自己监听处理listen_ipv6=YES
- pam_service_name=vsftpd //设置PAM认证模块使用名称预设为vsftpd
- userlist_enable=YES
- tcp_wrappers=YES //服务端和客户端访问控制策略(服务器级别的一种防火墙)
- Mime
默认配置下即可实现
[root@slave1 ~]# echo hehe > /var/ftp/pub/hehe.txt
去ie浏览器访问该地址:
在Windows资源管理器中:
- [root@slave1 ~]# vim /etc/vsftpd/vsftpd.conf
- anon_umask=022
- anon_upload_enable=YES
- anon_mkdir_write_enable=YES
- # 修改匿名用户目录的权限
- # 修改后注意要重启服务
- [root@slave1 ftp]# systemctl restart vsftpd
- [root@slave1 ftp]# chmod 777 pub/
- # 测试可以上传 和下载文件但是不能删除或者替换文件
- [root@slave1 ftp]# vim /etc/vsftpd/vsftpd.conf
- anon_other_write_enable=YES
- # 再上传下载的前提下可以删除文件,以及替换文件
- [root@slave1 var]# getsebool -a | grep ftpd_anon_write
- ftpd_anon_write --> on
- [root@slave1 ftp]# setsebool ftpd_anon_write on
- #修改匿名上传的上下文权限
- [root@slave1 var]# ll -Z /var/ftp
- drwxr-xrwx. root root system_u:object_r:public_content_rw_t:s0 pub
- [root@slave1 ftp]# chcon -t public_content_rw_t pub/
将上一轮匿名用户的配置抹除
- # 此处修改
- anonymous_enable=NO
- # 下面注释掉
- anon_umask=022
- anon_upload_enable=YES
- anon_mkdir_write_enable=YES
修改布尔值打开/home目录的权限
- [root@slave1 ~]# getsebool -a | grep ftp_home_dir
- tftp_home_dir --> off
- [root@slave1 ~]# setsebool -P tftp_home_dir on
测试访问:ftp://ip需要通过用户名密码进行登录,默认访问的界面是该用户目录下的所有文件,(注意除root用户),可以通过本地用户上传文件和下载文件也可以删除文件。弊端是:可以来回切换都可以通过本地用户的身份看到/下的所有东西。
开启chroot选项
- [root@lave1 ftp]# vi /etc/vsftpd/vsftpd.conf
- allow_writeable_chroot=YES
- #然后使用下面两个选项之一,第一种是本地用户不能上下翻,第二种是指定列表用户不能翻。
- #指定本地用户不能chroot,不能翻
- chroot_local_user=YES
-
- #开启通过列表的方式来指定用户
- chroot_list_enable=YES
- #指定用户列表文件
- chroot_list_file=/etc/vsftpd/chroot_list
- #在当前目录创建用户列表文件
- [root@lave1 vsftpd]# cat chroot_list
- wangjie
安装完vsftpd软件后,因为CentOS系统的SELinux安全策略默认是没有开启FTP服务,直接访问会报错500 OOPS,所以需要修改为允许使用FTP服务。
目标:希望ftp用户可以访问自己的家目录
- [root@slave1 ~]# setsebool -P ftp_home_dir on
- Boolean ftp_home_dir is not defined
发现会报错
搜了一下原来是CentOS7开始用 tftp_home_dir 来代替了 ftp_home_dir ,所以应该修改如下:
[root@slave1 ~]# setsebool -P tftp_home_dir on
关闭selinux直接执行本地用户会发现本地用户家目录不能访问,开启selinux后执行上面的家目录定义后可以访问,后续还需要重新实验以继续验证
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。