CentOS 7 FTP环境部署

FTP协议有两种工作方式:

1)port方式:主动模式

port(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求 , 服务器接受连接 , 建立一条命令链路 当需要传送数据时 , 服务器从20端口向客户端的空闲端口发送连接请求 , 建立一条数据链路来传送数据

2)pasv方式:被动模式

pasv(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求 , 服务器接受连接 , 建立一条命令链路 当需要传送数据时 , 客户端向服务器的空闲端口发送连接请求 , 建立一条数据链路来传送数据

FTP是仅基于tcp的服务 , 不支持udp FTP使用2个端口 , 一个数据端口和一个命令端口(也可叫做控制端口) 通常来说这两个端口是21(命令端口)和20(数据端口) 但FTP工作方式的不同 , 数据端口并不总是20 这就是主动与被动FTP的最大不同之处

一)主动FTP模式

主动方式的FTP工作流程:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口 , 也就是21端口 然后客户端开始监听端口N+1 , 并发送FTP命令“portN+1”到FTP服务器 接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)

针对FTP服务器前面的防火墙来说 , 必须允许以下通讯才能支持主动方式FTP:

1)任何大于1024的端口到FTP服务器的21端口 (客户端初始化的连接)

2)FTP服务器的21端口到大于1024的端口 (服务器响应客户端的控制端口)

3)FTP服务器的20端口到大于1024的端口 (服务器端初始化数据连接到客户端的数据端口)

4)大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)

二)被动FTP模式

FTP被动模式的连接方式有效解决了服务器发起到客户的连接问题 , 这种方式由叫做PASV , 当客户端通知服务器它处于被动模式时才启用 在被动方式FTP中 , 命令连接和数据连接都由客户端发起 , 这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题 当开启一个FTP连接时 , 客户端打开两个任意的非特权本地端口(N>1024和N+1) 第一个端口连接服务器的21端口 , 但与主动方式的FTP不同 , 客户端不会提交PORT命令并允许服务器来回连它的数据端口 , 而是提交PASV命令 这样做的结果是服务器会开启一个任意的非特权端口(P>1024) , 并发送PORTP命令给客户端 然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据

对于服务器端的防火墙来说 , 必须允许下面的通讯才能支持被动方式的FTP:

1)从任何大于1024的端口到服务器的21端口(客户端初始化的连接)

2)服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)

3)从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)

4)服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)

主动FTP:

   命令连接:客户端>1023端口 ------> 服务器 21端口

   数据连接:客户端>1023端口 <------ 服务器 20端口

被动FTP:

   命令连接:客户端>1023端口 ------> 服务器 21端口

   数据连接:客户端>1023端口 ------> 服务器>1023端口

三)主动与被动FTP优缺点:

主动FTP对FTP服务器的管理有利 , 但对客户端的管理不利 因为FTP服务器企图与客户端的高位随机端口建立连接 , 而这个端口很有可能被客户端的防火墙阻塞掉

被动FTP对FTP客户端的管理有利 , 但对服务器端的管理不利 因为客户端要与服务器端建立两个连接 , 其中一个连到一个高位随机端口 , 而这个端口很有可能被服务器端的防火墙阻塞掉

随着WWW的广泛流行 , 许多人习惯用web浏览器作为FTP客户端 大多数浏览器只在访问ftp://这样的URL时才支持被动模式 这到底是好还是坏取决于服务器和防火墙的配置

通常我会选用被动模式的FTP

安装vsftpd

[[email protected] ~]# yum -y install vsftpd
# 备份配置文件
[[email protected] ~]# cp /etc/vsftpd/vsftpd.conf{,.bak}
# 简化配置文件内容
[[email protected] ~]# grep -Ev ‘^#|^$‘ /etc/vsftpd/vsftpd.conf.bak  > /etc/vsftpd/vsftpd.conf
# 修改配置文件
anonymous_enable=NO    # 是否禁止匿名用户登录
local_enable=YES    # 是否允许本地用户登录
write_enable=YES    # 是否允许写入
local_umask=022    # 本地用户文件掩码
xferlog_enable=YES    # 是否在上传/下载文件时记录日志
connect_from_port_20=NO    # 是否使用20端口传输数据(是否使用主动模式)
xferlog_std_format=YES    # 是否使用标准日志格式
xferlog_file=/var/log/xfer.log    # 日志文件路径
chroot_local_user=NO    # 是否限制所有的本地用户在自己的家目录
chroot_list_enable=YES    # 是否指定不能离开家目录的用户
chroot_list_file=/etc/vsftpd/chroot_list    # 指定不能离开家目录的用户名单文件allow_writeable_chroot=YES  # 是否开启家目录可写
listen=YES    # 是否开启ipv4监听
listen_ipv6=NO    # 是否开启ipv6监听
pam_service_name=vsftpd    # 使用pam模块控制,vsftpd文件在/etc/pam.d/目录下
userlist_enable=YES    # 是否开启用户本地用户名单, 当userlist_deny=NO时 , userlist_file名单内的用户为白名单,反则反之
userlist_deny=YES    # 决定禁止/允许userlist_file名单内的用户登录
tcp_wrappers=YES    # 是否允许tcp_wrappers管理
pasv_enable=YES    # 是否允许pasv模式
pasv_min_port=22226    # pasv模式使用的最小端口号
pasv_max_port=22228   # pasv模式使用的最大端口号
download_enable=NO    # 是否允许下载
userlist_file=/etc/vsftpd/user_list    # 用户名单文件
user_config_dir=/etc/vsftpd/vsftpd_user_conf    # 用户配置文件

创建本地用户

# 创建本地用户指定家目录
[[email protected] ~]# useradd -d /var/ftp/pub/user1 -s /sbin/nologin user1
# 设置密码
[[email protected] ~]# passwd user1
# 添加到禁止离开家目录的列表中
[[email protected] ~]# echo user1 >> /etc/vsftpd/chroot_list
# 修改权限
[[email protected] ~]# chown -R user1.user1 /var/ftp/pub/user1/
[[email protected] ~]# ll -d /var/ftp/pub/user1/
drwx------. 2 user1 user1 62 10月 12 16:52 /var/ftp/pub/user1/
# 添加防火墙策略
[[email protected] ~]#iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
[[email protected] ~]#iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22226:22228 -j ACCEPT
[[email protected] ~]# getenforce
Permissive
[[email protected] ~]# systemctl start vsftpd

最后就可以通过ftp://ip在浏览器里访问上面的ftp(只有被动模式的ftp才能再浏览器里访问)

也可使用Filezilla等工具连接ftp,不过要在客户端里手动修改成被动模式  ftp登陆后的路径锁定到账号家目录下

ftp传输数据是明文,弄个抓包软件就可以通过数据包来分析到账号和密码,为了搭建一个安全性比较高ftp,可以结合SSL来解决问题

查看vsftp当前是否支持ssl加密

# 如果没有输出此类消息 那么说明该版本的svftp不支持ssl加密
[[email protected] user1]# ldd /usr/sbin/vsftpd |grep libssl
    libssl.so.10 => /lib64/libssl.so.10 (0x00007f17c0622000)

# 生成加密证书
[[email protected] ~]# openssl req -x509 -nodes -days 365 -newkey rsa:1024 \-keyout /etc/vsftpd/vsftpd.pem \-out /etc/vsftpd/vsftpd.pem
Generating a 1024 bit RSA private key
.....................................++++++
......++++++
writing new private key to ‘/etc/vsftpd/vsftpd.pem‘
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:haidian
Organization Name (eg, company) [Default Company Ltd]:ftpssl
Organizational Unit Name (eg, section) []:ftpssl
Common Name (eg, your name or your server‘s hostname) []:ftp
Email Address []:[email protected]
# 修改配置文件
[[email protected] user1]# vim /etc/vsftpd/vsftpd.conf

ssl_enable=YES    # 是否启用ssl加密
allow_anon_ssl=NO    # 是否允许匿名用户使用ssl加密
force_local_data_ssl=YES    # 非匿名用户传输数据时是否加密
force_local_logins_ssl=NO    # 匿名用户登录时是否加密
ssl_tlsv1=YES    # 是否激活tls v1加密
ssl_sslv2=NO    # 是否激活sslv2加密
ssl_sslv3=NO    # 是否激活sslv3加密
rsa_cert_file=/etc/vsftpd/vsftpd.pem    # rsa证书的位置

重启vsftpd服务

[[email protected] ~]# systemctl restart vsftpd

使用Filezilla连接查看是否为TSL加密

什么是SSL、TSL、HTTPS?

SSL 的全名是 Secure Sockets Layer,即安全套接字层,简而言之,這是一种标准技术,用于保持网际网络连接安全以及防止在两个系统之间发送的所有敏感资料被罪犯读取及修改任何传输的信息,包括潜在的个人详细信息 两个系統可以是伺服器与客户端 (例如购物网站与浏览器),或者伺服务器至伺服务器 (例如,含有个人身份信息或含有薪资信息的应用程序)

这样做是为了确保使用者与网站、或两个系统之间传输的任何信息保持无法被读取的状态  此技术可使用加密算法以混淆传输中的信息,防止骇客在信息公国连接发送时读取信息  此信息可能是任何敏感或个人细信息,包括信用卡号与其他财务信息、姓名与地址等等

TSL (Transport Layer Security,传输层安全协议) 是更新、更安全的 SSL 版本  我们仍将安全性凭证成为 SSL,因为这是比较常用的词

HTTPS (Hyper Text Transfer Protocol Secure,超文本传输协议安全) 会在网站受到 SSL 凭证保护时在网址中出现  该凭证的详细信息包括发行机构与网站拥有人的企业名称,可以通过点击浏览器网址栏上的锁定标记进行查看

原文地址:https://www.cnblogs.com/bigdevilking/p/9780299.html

时间: 2024-08-30 06:10:44

CentOS 7 FTP环境部署的相关文章

centos 7 JDK 环境部署

1.1  系统环境: [[email protected] tools]# cat/etc/redhat-release CentOS Linux release 7.0.1406 (Core) [[email protected] tools]# uname -r 3.10.0-123.el7.x86_64 [[email protected] tools]# uname -n nginx-daili [[email protected] tools]# uname -m x86_64 1.2

在 CentOS 7上Virtualbox+phpVirtualBox完整虚拟化环境部署

一.phpVirtualBox简介      VirtualBox是一套为不同操作系统而设的 x86 虚拟化产品.它是一个机器/硬件的虚拟化产品,功能上与 VMware Server.Parallels Workstation.QEMU.KVM.及 Xen 相若,并能支持各种客端操作系统,当中包括 Windows.它的支持者声称它是「在 GNU General Public License(GPL)下唯一个以开源程序免费供应的专业方案」.虽然它不及那些修改 Linux 内核的操作系统级虚拟化方案

CentOS 6.3下CHEF环境部署

一.前言: 初识Chef,我们可以先了解一下DevOps运动 http://zh.wikipedia.org/wiki/DevOps,简单点说,就是传统的软件组织将开发.IT运营和质量保障设为各自分离的部门,而DevOps运动的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作.所以Chef简单点说,就是DevOps运动中的一项重要工具成员,是一个同时面向开发与运维的集中管理工具. 就服务器的集中管理工具而言,知名度与Chef平分天下的是叫"Puppet&

web应用之LAMP源码环境部署

web应用之LAMP源码环境搭建篇 目录 一.LAMP环境的介绍 1.LAMP环境的重要性 2.LAMP组件介绍 二.Apache源码安装 1.下载Apache以及相关依赖包 2.安装Apache以及相关依赖包 2-1.安装Apache依赖包 2-2.安装apr 2-3.安装apr-util 2-4.安装pcre 2-5.安装Apache 3.配置Apache 3-1.启动Apache服务 3-2.注册Apache为服务 3-3.加入Apache服务到chkconfig中 3-4.查看Apach

centos6.5腾讯云django环境部署记录---1、系统准备

一.腾讯云一开始是root用户,为了避免不可挽救就"毁灭性打击",我们先来创建一个新用户. 1.创建用户: 2.给新用户赋予sudo使用权限: (1).回到root用户,修改文件权限. (2).编辑/etc/sudoers文件,增加你的用户 (3).撤销文件的写权限. 最后:在新用户模式下,如果出现permissions denied,加上sudo 二.安装和配置vsftp 此处参考http://www.cnblogs.com/surge/p/3868270.html. (1).安装v

LNMP环境部署及zabbix服务器端安装

一.LNMP环境部署 1.配置epel源 建议在系统安装完成之后就配置epel源,方便一些软件包的安装: wget http://mirrors.ustc.edu.cn/centos/6/extras/x86_64/Packages/epel-release-6-8.noarch.rpmrpm -ivhepel-release-6-8.noarch.rpm 2.nginx安装 (1)安装支持软件 Nginx.mysql.php的配置及运行需要pcre.zlib.openssl等软件包的支持,因此

CentOS 6.5 安装部署iSCSi共享存储

 CentOS 6.5 安装部署iSCSi共享存储 一.前言 1.什么是iSCSI? iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择.iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换资料. iSCSI:Internet 小型计算机系统接口 (iSCSI:

php+mysql+nginx在linux上的环境部署

一直在linux上鼓捣,还没有完整在linux下配置过nginx服务器环境部署呢,这几天没什么事就部署了一下,遇到的问题也很多,现在把我的环境部署文档发出了,有什么问题大家可以一起讨论一下,希望大家采用后遇到问题多多沟通. || 安装所需各种依赖包 sudo -s LANG=C yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2

(二 )VMware workstation 部署虚拟集群实践——并行批量操作环境部署

在上一篇博客中,已经介绍了安装虚拟集群的过程和需要注意的细节问题. 这篇主要是介绍如何批量登陆远程主机和配置,这个过程中是在没有部署并行处理工具或者集群管理工具的前进行的. ------------首次登陆-------------- 首次登陆需要解决的问题就是: 1,信任远程主机公钥的问题,也就是key_word:yes/no? 2,然后就是远程主机的密码,key_word:password: 在自动化部署过程中,需要进行免交互和免密码登陆. 1,使用expect编写免交互登陆脚本(适用于te