网络协议与服务

超文本传输协议HTTP

概念

超文本传输协议(HTTP,Hyper Text Transfer Protocol)
互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最 初的目的是为了提供一种发布和接收HTML页面的方法。
之所以叫做超文本,是因为它不仅仅可以传输文本,还可以传输图片,声音,视频等。

HTTP协议的作用

HTTP 是一个客户端和服务器端请求和应答的标准,浏览器与后台web服务器之间传递数据
(html文件)时控制的协议。
区分HTML
HTML超文本标记语言,通过不同的标签来标识数据的不同样式或作用。
区分HTTPS
一种安全的超文本传输协议,密文形式传输(SSL)
HTTP和HTTPS的区别
HTTP协议是应用层的协议,它是对Tcp协议的一个应用。
HTTPS 协议需要到 CA ( Certificate Authority,证书颁发机构)申请证书,一般免费证书 较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https)
HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协 议。
HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是 443。
HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传 输、身份认证的网络协议,比 HTTP协议安全。(无状态的意思是其数据包的发送、传输和 接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息)
常见的web服务器
Apache(httpd): 简单、速度快、性能稳定,并可做代理服务器使用
IIS ( Internet Information Server):安全性、强大、灵活
Nginx : 小巧而高效,可以做高效的负载均衡和反向代理
Tomcat: 技术先进、性能稳定、免费
HTTP的报头结构
请求报头(request):浏览器向web服务器发送数据时所使用的特定数据结构
区分短连接(close)和长连接( keep-alive)
短连接: 一次http请求服务器应答之后就将这个连接断开。(即同一客户如果要在发送一个 HTTP请求的话,必须与服务器建立一个新的TCP连接,同一客户的多个连续的HTTP请求不 能共用一个TCP连接)
长连接:多个http请求可以共用同一个连接。(编程上稍复杂一些,但性能提高,减少负 荷,缩短了时间)
应答报头(response):web服务器给浏览器回馈数据时所使用的

 会话跟踪技术: cookie,session

httpd服务  

 httpd简介

httpd是Apache超文本传输协议服务器的主程序。它是一个独立的后台进程,能够处理请求的子
进程和线程。
httpd常用用的两个版本是httpd-2.2和httpd-2.4(centos7)
CentOS6系列的默认httpd版本是httpd-2.2版本的rpm包
CentOS7系列的默认httpd版本是httpd-2.4版本的rpm包

 httpd服务特点

名称
特点
高度模块化
core + modules,核心加模块,想要什么功能添加什么模块;
DSO
Dynamic Shared Object,动态共享库;
MPM
Multipath processing Modules 多路处理模块。

httpd的工作模型

 prefork:两级进程模型,父进程管理子进程,每个进程响应一个请求

工作模型1
一个主进程:
负责生成子进程及回收子进程
负责创建套接字、接受请求,并将其派发给某子进程进行处理
n个子进程:
每个子进程处理一个请求
注意:
会预先生成几个空闲进程,随时等待用于响应用户请求,最大不会超过 1024
worker :三级进程模型,父进程管理子进程,子进程通过线程响应用户请求,每个线程处理一个用户请求
工作模型2
一个主进程:
负责生成子进程、创建套接字、接受请求,并将其派发给某子进程进行处理
多个子进程:
每个子进程负责生成多个线程
每个线程:
负责响应用户请求
event:两级模型,父进程管理子进程,子进程通过事件驱动event-driven机制直接响应n个请求
工作模型3
一个主进程:
负责生成子进程、创建套接字、接受请求,并将其派发给某子进程进行处理
子进程:
基于事件驱动机制直接响应多个请求

httpd的配置文件

文件/目录
对应的功能
/var/log/httpd/access.log
访问日志
/var/log/httpd/error_log
错误日志
/var/www/html/
站点文档目录,默认网站目录
/usr/lib64/httpd/modules/
模块文件路径
/etc/httpd/conf/httpd.conf
主配置文件(重点)
/etc/httpd/conf.modules.d/.conf
模块配置文件
/etc/httpd/conf.d/.conf
辅助配置文件

 httpd自带的工具程序

工具
功能
htpasswd
basic认证基于文件实现时,用到的帐号密码生成工具
apachectl
httpd自带的服务控制脚本,支持start,stop,restart
apxs
由httpd-devel包提供的,扩展httpd使用第三方模块的工具
rotatelogs
日志滚动工具
suexec
访问某些有特殊权限配置的资源时,临时切换至指定用户运行的工具
ab apachebe nchmark
httpd的压力测试工具

httpd常用配置

安装httpd服务
[root @cluster151 ~]# yum -y install httpd
修改配置文件
# 编辑配置文件
[root @cluster151 ~]# vim /etc/httpd/conf/httpd.conf
# 95 行的配置修改
95 ServerName 127.0.0.1 : 80
启动httpd服务
# 查看 httpd 服务器状态
[root @cluster151 ~]# systemctl status httpd
# 关闭防火墙
[root @cluster151 ~]# systemctl stop firewalld
# 启动 httpd 服务
[root @cluster151 ~]# systemctl start httpd
# 查看启动结果
[root @cluster151 ~]# systemctl status firewalld
启动之后使用netstat命令查看网络进程
# 先安装 netstat 工具
yum -y install net-tools
# 使用 netstat 查看当前系统下的 tcp 协议的网络进程
netstat -lntp

 结果可以看到监听的80端口的进程信息

[root @cluster151 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1 : 25 0.0.0.0 :* LISTEN
tcp 0 0 0.0.0.0 : 22 0.0.0.0 :* LISTEN
tcp6 0 0 :: 1 : 25 :::* LISTEN
tcp6 0 0 ::: 80 :::* LISTEN
tcp6 0 0 ::: 22 :::* LISTEN

 浏览器输入地址发起请求: http://192.168.206.131 此时显示测试页,说明httpd服务正常

测试页面的配置是在 /etc/httpd/conf.d/welcome.conf中配置的

当我们没有在/var/www/html定义index.html页面的时候,默认用这个页面做首页。如果我们自
己在网站目录创建了index.html页面,则httpd服务器会访问我们自己定义的首页。
# 在默认的目录下创建 index.html
[root @cluster151 ~]# echo "<h1>AAA</h1>" > / var /www/html/index.html
# 重启服务,此时再次访问服务器,页面内容发生了改变
[root @cluster151 ~]# systemctl restart httpd
如果我们想要修改默认的网站根目录,需要做如下配置
/etc/httpd/conf/httpd.conf
# 在配置文件中 , 设置 DocumentRoot
119 DocumentRoot "/home/myhtml"
 
# 并且修改针对该目录的权限配置
132 <Directory "/home/myhtml" >
# 是否允许以索引方式显示目录内容
Options Indexes FollowSymLinks
# 针对 .htaccess 文件是否允许进行 url 重写。
AllowOverride None
# 是否允许访问目录内容
Require all granted
158 </Directory>

 另外,要注意要创建对应的目录,并关闭内核防火墙

# 创建对应的网站根目录
mkdir /home/myhtml
# 关闭内核防火墙 ( 内核安全子系统 ), 如果不关闭,页面访问会显示 403 (拒绝访问)
setenforce 0 # 这种是临时关闭
getenforce # 获取内核配置
# 持久化修改内核安全子系统,要通过配置文件修改
#vi /etc/sysconfig/selinux
把SELINUX改为disabled
文件列表的访问
httpd默认支持对服务器上的文件以列表的方式进行访问
在网站根目录下创建一个文件夹,然后再文件夹下创建几个文件
mkdir /home/myhtml/xxx
touch /home/myhtml/xxx/aaa.txt
touch /home/myhtml/xxx/bbb.txt
touch /home/myhtml/xxx/ccc.txt

 此时从过浏览器访问对应的xxx目录,目录中的文件会以列表方式呈现

 httpd虚拟主机

所谓虚拟主机指的是在一台Web服务器上配置不同的web站点。
Apache支持的虚拟主机分成三种类型:IP型、域名型和端口型(不常用)。IP型一个地址只能对应一个web站点;
域名型的一个IP地址可以对应多个web站点;端口型则是通过IP地址加端口号来唯一标示一个web站点。
IP型虚拟主机
添加多个网卡配置多个ip
先添加两个网卡

 添加之后使用ipconfig查看,会多出两个网卡设备

创建新添加的网卡配置文件(复制ens32的),单独配置ip,记住删除里面的uuid
[root @cluster151 ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens32 /etc/sysconfig/network-scripts/ifcfg-ens34
[root @cluster151 ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens32 /etc/sy sconfig/network-scripts/ifcfg-ens35

 打开新网卡的配置文件,修改其中的NAME,DEVICE,IPADDR

保存退出,重启网卡服务(或者重启虚拟机)

[root @cluster151 ~]# systemctl restart network.service
[root @cluster151 ~]# systemctl status network.service

 确保新网卡ip能被访问

接着打开httpd.conf文件,进行虚拟主机的配置

[root @cluster151 ~]# vim /etc/httpd/conf/httpd.conf

 这个文件本身没有虚拟主机的相关配置,需要在文件中添加

# 定位到文件最后一行,添加虚拟主机配置
<VirtualHost 192.168.206.131 : 80 >
# 设置针对当前 ip 的网站根目录
DocumentRoot "/home/myhtml/www"
# 设置针对当前 ip 的自定义域名 ( 随便定义 )
ServerName www.aaa.com
# 配置针对当前文件目录的访问权限
<Directory "/home/myhtml/www" >
# 是否允许访问 .htaccess 文件 ( 用于 url 重定向 ) None: 不允许 All: 允许
AllowOverride None
# 允许访问
Require all granted
</Directory>
</VirtualHost>

 三台虚拟主机的完整配置

<VirtualHost 192.168.206.131 : 80 >
DocumentRoot "/home/myhtml/www"
ServerName www.aaa.com
<Directory "/home/myhtml/www" >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.206.141 : 80 >
DocumentRoot "/home/myhtml/bbs"
ServerName bbs.aaa.com
<Directory "/home/myhtml/bbs" >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.206.151 : 80 >
DocumentRoot "/home/myhtml/blog"
ServerName blog.aaa.com
<Directory "/home/myhtml/blog" >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

 配置后,重启,通过ip测试

 基于域名的虚拟主机

 在/etc/hosts文件中添加域名ip映射

192.168.48.151 cluster151 www.aaa.com bbs.aaa.com blog.aaa.com
编辑httpd文件,将之前配置虚拟主机的ip都改为一样的,然后通过域名访问
<VirtualHost 192.168.206.131 : 80 >
DocumentRoot "/home/myhtml/www"
ServerName www.aaa.com
<Directory "/home/myhtml/www" >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.206.131 : 80 >
DocumentRoot "/home/myhtml/bbs"
ServerName bbs.aaa.com
<Directory "/home/myhtml/bbs" >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.206.131 : 80 >
DocumentRoot "/home/myhtml/blog"
ServerName blog.aaa.com
<Directory "/home/myhtml/blog" >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
使用curl通过访问域名,访问3台主机,访问不同域名显示不同目录的内容。
现在hosts中配置多个域名和一个ip的对应关系
[root @cluster151 ~]# curl www.aaa.com
www.aaa.com
[root @cluster151 ~]# curl bbs.aaa.com
bbs.aaa.com
[root @cluster151 ~]# curl blog.aaa.com
blog.aaa.com
[root @cluster151 ~]#
如果要在外部主机通过域名访问这3台虚拟服务器,需要在windows的hosts文件中添加域名ip映射
C:\Windows\System32\drivers\etc
注意,不能直接用记事本打开,需要以管理员身份启动记事本,然后选择HOSTS文件打开
192.168.206.131 www.aaa.com bbs.aaa.com blog.aaa.com
保存之后,在浏览器中,使用域名方式访问linux中httpd的虚拟主机
基于端口的虚拟主机
修改httpd.conf配置的虚拟主机端口,分别改为80,8080,8088
<VirtualHost 192.168.48.151 : 80 >
DocumentRoot "/home/myhtml/www"
ServerName www.aaa.com
<Directory "/home/myhtml/www" >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.48.151 : 8080 >
DocumentRoot "/home/myhtml/bbs"
ServerName bbs.aaa.com
<Directory "/home/myhtml/bbs" >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.48.151 : 8088 >
DocumentRoot "/home/myhtml/blog"
ServerName blog.aaa.com
<Directory "/home/myhtml/blog" >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

 另外,在配置文件中,添加针对端口的Listen监听

42 Listen 80
43 Listen 8080
44 Listen 8088

 重启后测试,通过不同端口访问,显示不同内容

使用单独的虚拟主机配置文件

虚拟主机的配置可以单独写到一个文件中。
首先将httpd.conf的中虚拟主机配置,复制一下。将原有的配置注释掉。
然后再/etc/httpd/conf.d/下创建一个虚拟主机配置文件vhost.conf
接着把复制的信息黏贴到vhost.conf中
重启服务器,访问测试。
能够实现这个配置的原因是,原有的配置文件中有一个包含辅助配置文件的设置

访问控制法则

法则
功能
Require all granted
允许所有主机访问
Require all deny(denied)
拒绝所有主机访问
Require ip IPADDR
授权指定来源地址的主机访问
Require not ip IPADDR
拒绝指定来源地址的主机访问
Require host HOSTNAME
授权指定来源主机名的主机访问
Require not host HOSTNAME
拒绝指定来源主机名的主机访问

IPADDR的类型
HOSTNAME的类型
IP
192.168.1.1
Network/mask
192.168.1.0/255.255.255.0
Network/Length
192.168.1.0/24
Net
192.168
FQDN
特定主机的全名
DOMAIN
指定域内的所有主机
注意:httpd-2.4版本在配置文件加入Require才是默认是拒绝所有主机访问的,所以安装以后
必须做显示授权访问

DNS服务器

DNS(Domain Name System,即域名系统)实质上是一个分布式数据库,其中存储了域名和
IP地址之间的映射关系,它的主要功能为域名解析,即通过域名获取对应IP地址。
域名系统的结构

域名系统采用类似目录树的等级结构,域名分为根域、顶级域、二级域、三级域和主机名五类

域名的格式一般为“主机名.三级域名.二级域名.顶级域名.”,该格式在末尾使用“.”表示根域,符合这种格式的域名称为全称域名(Fully Qualified Domain Name,简称FQDN,也称为完全合 格域名)。
域名服务器的分类
域名服务器(Domain Name Server)实质上就是一台配置了DNS服务,可实现域名解析功能的主机。
根据工作方式,域名服务器可分为如下几种:
主域名服务器(权威服务器)
辅助域名服务器
缓存域名服务器
转发域名服务器

根据服务器在DNS层次结构分类:

按照层次可将DNS服务器划分为三种类型:
根DNS服务器
顶级域DNS服务器
权威DNS服务器。

 域名查询机制

1)递归查询
本机域名服务器会将查询的最终结果返回给客户机
客户机只需发出请求
其余都交由DNS服务器完成
(2)迭代查询 
DNS服务器在无法获取最终结果时返回自己能获取的、最最终结果最为相近的内容
由客户机根据获取到的内容再次发起查询请求
资源记录
资源记录(Resource Records,简称rr)即添加到区域数据文件中的记录,记录( Resource Records)有许多类型,每种类型的功能各不相同。
A(ipv4)记录与AAAA(ipv6)记录:地址记录,域名到IP地址的映射信息
FQDN IN A IP 地址
PTR记录:IP地址到域名的映射信息

 IP地址 IN PTR FQDN

SOA记录:起始授权记录
域名 记录类型 SOA 主域名服务器的 FQDN 管理员邮件地址 (
        序列号
        刷新间隔
        重试间隔
        过期间隔
        TTL)

 NS记录:权威服务器记录

区域名 IN NS FQDN

 CNAME记录:FQDN别名记录

别名 IN CNAME 主机名

 MX记录:邮件服务器记录

区域名 IN MX 优先级 邮件服务器名称

安装DNS

在Linux系统中,人们常用BIND软件包来配置DNS服务器。BIND(Berkeley Internet Name Domain)是一个可以提供DNS服务的软件,该软件由伯克利加州大学研发,是目前应用最广泛 的DNS服务系统。BIND支持各种Linux平台,同时也支持UNIX和Windows平台。
BIND主要包含的软件包有:
bind:主程序
bind-chroot:限定主程序启动路径
bind-utils:DNS工具集合(dig)
安装DNS:
检测系统已安装的BIND软件包:
rpm -qa | grep bind
安装bind和bind-chroot:
yum -y install bind bind-chroot bind-utils
开启DNS服务并使其开机自启:
systemctl start named
systemctl enable named
在chroot模式下开启DNS服务:
systemctl start named-chroot
systemctl enable named-cheoot

 部署主从DNS服务器

为了保障网络中DNS服务的可靠性,搭建DNS服务时至少要搭建两台DNS服务器,其中一台作
为主DNS服务器,负责域名数据存储、域名解析等工作,另外一台作为从DNS服务器,该服务

 器可从主DNS服务器中复制数据,并在主服务器故障时实现域名解析等工作。

假设现已向全球统一管理域名的机构申请并注册了域名“aaatest.com”,网络地址为
192.168.48.0/16,DNS主、从服务器的IP地址与域名如表所示。
配置服务器以及配置过程中使用的软件包如下:
bind:提供主程序;
bind-libs:提供库文件;
bind-utils:提供常用命令工具包;
bind-chroot:更换服务器根路径到DNS目录。
配置主DNS服务器
部署主DNS服务器时需要修改其主配置文件、区域配置文件以及区域数据文件,下面分别对这些配置文件的修改方法进行讲解。
1.1.修改主配置文件
此处使用bind-chroot软件包更换服务器根路径,因此先复制主配置文件
到/var/named/chroot/etc/路径下:
# cp /etc/named.conf / var /named/chroot/etc/named.conf

 之后使用vi命令打开named.conf文件,对其进行修改,具体如下:

 #设置监听对象

listen - on port 53 { any; };
//named 监听所有 ip4 主机的 53 端口
listen - on - v6 port 53 { any; }; //named 监听所有 ip6 主机的 53 端口
# 设置客户端查询范围
allow-query { any; };
// 客户端查询范围,可设置为网段
# 引用区域配置文件
include "/etc/named.rfc1912.zones" ; // 引入区域配置信息文件
编辑区域配置文件
使用Vi编辑器打开区域配置文件named.rfc1912.zones,在其中添加如下内容:

 zone "aaatest.com" IN {

// 正向区域解析文件
type master;
// 服务器类型为 master ,即主服务器
file "aaatest.com.zone" ;
// 文件名为 aaatest.com.zone
allow-transfer { 192.168.48.152 ; }; // 即从服务器地址
};
zone "48.168.192.in-addr.apra" IN { // 反向区域解析文件
type master;
file "48.168.192.zone" ;
allow-transfer { 192.168.48.152 ; };
};

 编辑区域数据文件

保存区域配置文件,在/var/named/路径下分别创建正向解析数据文件aaatest.com.zone和反
向解析数据文件48.168.192.zone,并依次打开,在其中添加区域配置信息。

 正向解析数据文件

$TTL 1D
@ IN SOA dns.aaatest.com admin.aaatest.com. (
1 ; 版本号
1D ; 更新时间
1H ; 重试时间
1W ; 超时时间
2H ; 否定回答缓存时间
)
IN NS dns
IN NS dnsc
IN MX 5 mail
; 邮件服务器名称
dns
IN A 192.168.48.151
dnsc
IN A 192.168.48.152
www
IN A 192.168.48.151
ftp
IN CNAME www

 反向解析数据文件

 

$TTL 1D
@ IN SOA dns.aaatest.com admin.aaatest.com. (
1 ; 版本号
1D ; 更新时间
1H ; 重试时间
1W ; 超时时间
2H ; 否定回答缓存时间
)
              IN NS dns.aaatest.com.
              IN NS dnsc.aaatest.com.
151         IN PTR dns.aaatest.com.
152        IN PTR dnsc.aaatest.com.
151        IN PTR www.aaatest.com.
151        IN PTR ftp.aaatest.com.
因为dns要使用named账号启动,所以要给对应目录文件加权限
[root @cluster151 ~]# chown -R named.named /etc/named*
[root @cluster151 ~]# chown -R named.named / var /named/

 到此,主DNS服务器配置完毕,管理员可通过如下命令启动主DNS服务器中的DNS服务:

 [root@cluster151 ~]# systemctl start named-chroot

以上命令中的named服务即由BIND提供的DNS服务。若配置正确,使用以上命令后,终端不打印任何信息,DNS服务正常启动;否则DNS服务启动失败
启动之后,进行检查
[root @cluster151 ~]# netstat -tnlp

 使用dig解析域名,查看解析的ip地址

 #133机器上,将DNS服务器的配置改为151

# 先安装 bind-utils ,里面包含 dig 模块
[root @cluster153 ~]# yum install bind-utils
# 使用 dig 解析域名
[root @cluster153 ~]# dig www.aaatest.com

 使用trceroute测试路由过程

# 安装 traceroute
[root @cluster153 ~]# yum -y install traceroute
# 针对 ip 进行测试,测试结果默认会解析 ip 对应的域名
[root @cluster153 ~]# traceroute 192.168.48.151

 配置从DNS服务器

 从/etc/目录下复制named.conf文件到虚拟文件目录/var/named/chroot/etc/中,进行配置

 #设置监听对象

listen - on port 53 { any; };
//named 监听所有 ip4 主机的 53 端口
listen - on - v6 port 53 { any; }; //named 监听所有 ip6 主机的 53 端口
# 设置客户端查询范围
allow-query { any; };
// 客户端查询范围,可设置为网段
之后对从服务器主机中的区域配置文件/etc/named.rfc1912.zones进行修改,在其中添加内容:

 zone "aaatest.com" IN {

# 正向区域解析文件
type slave;
# 服务器类型为 slave ,即从服务器
file "slaves/aaatest.com.zone" ; # 文件存储路径
masters { 192.168.48.151 ; };
allow-transfer { none; };
};
zone "48.168.192.in-addr.apra" IN {# 反向区域解析文件
type slave;
file "slaves/48.168.192.zone" ;
masters { 192.168.48.151 ; }; # 指定主服务器的 IP 地址
allow-transfer { none; };
};
在配置反向区域数据时,可以通过masters选项指定主服务器的IP地址,此处可设置多个主服务器IP,但每个IP需用“;”分开。为保障服务器安全,将allow-transfer选项值设置为none,不允许 其它主机查看当前主机。同样要对目录设置用户权限

 [root@cluster151 ~]# chown -R named.named /etc/named*

[root @cluster151 ~]# chown -R named.named / var /named/
到此,从DNS服务器配置完毕。同样使用“systemctl start named-chroot”命令启动DNS服 务。
从DNS服务器应能复制主DNS服务器的内容,但此操作可能并不会立刻执行,管理员可使用如下命令分别对主、从服务器进行同步。
# rndc reload

 FTP服务器

简介  

 FTP(File Transfer Protocol)是TCP/IP协议簇中的协议之一,也称文件传输协议,其主要功能是借助网络实现远距离主机间的文件传输。

FTP采用“客户机/服务器”模式,FTP服务器主要用于在网络上提供文件传输服务,一般会提供上传和下载两项基本功能,上传即用户可将客户机中的文件拷贝到远程服务器中;下载则是用户 可从远程服务器中拷贝文件到客户机。

 FTP服务器文件传输方式

FTP的文件传输模式分为ASCII传输和二进制传输两种:
当用户拷贝的文件中只包含简单ASCII文本,且客户机和服务器的操作类型不同时,一般使 用ASCII传输模式,此时FTP服务器通常会自动调整文件内容,以便将文件解释为客户端主 机可存储的文本格式;
若用户拷贝的文件为代码段、数据库、压缩文件等时,为保证保存文件时,原始文件和拷贝 到的文件能诸位对应,通常在二进制传输模式下传输文件。
FTP服务器的工作模式
FTP服务在对外提供服务时需要维护两个连接:一个是控制连接,用于传输控制命令,该连接监听TCP 21号端口;另一个是数据连接,用于传输数据,该连接在主动传输模式下监听TCP 20 端口。
FTP服务器有两种工作模式:主动模式和被动模式。
主动模式
当FTP工作在主动模式下时,客户机首先发起连接请求,与服务器的21号端口建立连接,连接成功后,客户端方借此发送命令。若客户端需要传输数据,客户端会通过已建立的连接通道向服 务器发送信息,告知服务器客户端中接收数据的端口,之后服务器则通过20号端口连接到客户 端指定的端口并传送数据,简而言之,在主动模式下,控制连接的发起方是FTP客户机,而数据 连接的发起方为FTP服务器。
被动模式
当FTP工作在被动模式下时,客户端首先发起连接请求,与服务器的21号端口建立控制连接。之后仍由客户端发送信息,请求与服务器建立数据连接,服务器接收到此请求后,会随机打开一 个高端端口(端口号一般大于1024),并将该端口号告知客户端,此时客户端与服务器在该端 口再建立数据连接,通过该通道进行数据传递。综上所述,在被动模式下,控制连接和数据连接 的发起方都为客户机。

VSFTP简介

VSFTP原意为“Very Security FTP”,即“非常安全的FTP”,是Linux系统下最常用的一种免费FTP服务器软件。
VSFTP的优点

 安全、高速、稳定、小巧

 VSFTP的用户类型

为了提高FTP服务器的安全性,VSFTP将用户分为:
匿名用户(用户名:ftp/anonymous,密码为空)
本地用户(/etc/passwd文件中的Linux用户)
虚拟用户(FTP服务器的专用用户)

 安装并启动VSFTP服务

 # yum -y install vsftpd

# systemctl start vsftpd.service

 VSFTP的配置文件

VSFTP服务的配置文件主要为
/etc/vsftpd/vsftpd.conf、
/etc/vsftpd/ftpusers、
/etc/vsftpd/user_list

主配置文件/etc/vsftpd/vsftpd.conf

原始配置如下所示:

anonymous_enable=YES
# 开启匿名登录
local_enable=YES
# 开启本地用户登录
write_enable=YES
# 开启写入功能
local_umask= 022
# 设置本地用户创建文件的 umask 值为 022
dirmessage_enable=YES # 激活目录消息
xferlog_enable=YES
# 激活上传、下载功能
connect_from_port_20=YES
# 设置 VSFTP 服务器的数据连接端口为 20
xferlog_std_format=YES# 将日志文件格式设置为标准的 FTP 服务器日志格式
listen=NO
# 该选项与 listen_ipv6 不可并存
listen_ipv6=YES
# 接受来自 IPv4 IPv6 客户端的连接
pam_service_name=vsftpd # 指定 VSFTPD 将使用的 PAM 服务的名称为 vsftpd
userlist_enable=YES
# 加载用户名列表
tcp_wrappers=YES
# vsftp tcp wrapper 结合使用

 用户控制配置文件

ftpusers是VSFTP的用户控制配置文件,文件内容是一个用户列表,该文件的功能是限制用户名单中的用户登录FTP服务器,若FTP服务器需要拒绝某个用户访问,直接将该用户的用户名写在 ftpusers文件的末尾即可。

 用户列表配置文件

配置文件user_list中同样保存一个用户名单,该配置文件有两个功能,其一是只允许此文件列表中的用户登录FTP服务器,但若用户名同时存在于user_list与ftpusers中,则此用户无法登录FTP服务器;其二是拒绝user_list文件中的用户登录FTP服务器,该功能为默认功能。

 限制/排除名单文件

配置文件chroot_list中存储的也是用户名单,其路径由主配置文件vsftpd.conf中的选项
chroot_list_file指定。
chroot_list文件的功能有两个:
一是限制,即用户名单中的用户只能在其主目录中活动
二是排除,即用户名单中的用户不只能访问自己的主目录,还能跳出主目录,浏览服务器上 的其它目录。
VSFTP客户端安装
VSFTP采用“客户机/服务器”模式,若想使用VSFTP服务器提供的功能,还需在系统中安装FTP客户端。具体的安装命令如下:

 # yum -y install ftp

 匿名登录

VSFTP主配置文件中anonymous_enable的初始值为YES,即可以使用匿名用户登录FTP服务器
(用户名为ftp或者anonymous,提供任意密码或无密码访问即可.),此处我们先使用匿名用户ftp
连接VSFTP服务器,具体命令如下:
在192.168.48.152上登陆192.168.48.151,账号输入ftp,密码留空
# ftp 192.168.255.157

配置匿名服务器

创建本地用户
# useradd tom
# passwd tom

编辑主配置文件

# 允许匿名用户访问
12 anonymous_enable=YES
# 新增 , 指定匿名用户登陆的目录
13 anon_root=/ var /ftp
# 允许匿名用户删除和重命名的权限
14 anon_other_write_enable=YES
# 设置允许改变匿名用户删除文件的属主
15 chown_uploads=YES
# 允许登陆用户有写权限
22 write_enable=YES
# 允许匿名用户上传文件的权限
32 anon_upload_enable=YES
# 允许匿名用户新增目录的权限
36 anon_mkdir_write_enable=YES
# 设置匿名用户上传的属主名
51 chown_username=Tom

 创建匿名上传目录

# mkdir / var /ftp/userdir
# chown ftp.ftp / var /ftp/userdir
# chmod 777 / var /ftp/userdir

 配置防火墙和SELinux服务

 #关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service
# 关闭 SElinux
打开 SELinux 的配置文件 /etc/selinux/config ,将其中的 SELINUX=enforcing 改为 SELINU
X=disabled ,之后重启计算机。

 ftp测试

 登录测试

 从物理机命令窗口,使用ftp命令连接VSFTP服务器,并通过匿名用户ftp登录。

 C:\Users\henry>ftp 192.168.48.151

连接到 192.168.48.151
220 (vsFTPd 3.0.2 )
200 Always in UTF8 mode.
用户 ( 192.168.48.151 :(none)): ftp
331 Please specify the password.
密码 :
230 Login successful.
ftp>

 下载功能测试

从VSFTP服务器下载文件的命令为“get 文件名”,此处先使用“ls -l”命令查看登入目录中的文件列表,再使用get命令下载文件,具体操作如下:
ftp> ls -l
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Oct 30 14 : 50 aaa.txt
drwxr-xr-x 2 0 0 6 Jun 09 2021 pub
drwxrwxrwx 2 14 50 6 Oct 30 14 : 39 userdir

 226 Directory send OK.

 下载文件

ftp> get aaa.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for aaa.txt ( 4 bytes).
226 Transfer complete.
ftp: 收到 4 字节,用时 0.00 4000.00 千字节 / 秒。
ftp>

上传功能测试 

FTP客户端可通过“put 文件名”命令上传文件到服务器,前文已在服务器端VSFTP的主配置文件中配置了匿名用户的登入目录为“/var/ftp”,默认情况下使用put命令后文件将被上传 到“/var/ftp”目录,但匿名用户对该目录并不具有写入权限,因此无法向该目录中上传文件,对 此进行验证,具体操作如下:
ftp> put 55. jpg
200 PORT command successful. Consider using PASV.
553 Could not create file.
ftp>

 切换到具有权限的userdir目录下,然后上传

ftp> cd userdir

250 Directory successfully changed.
ftp> ls -l
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
ftp> put 55. jpg
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp: 发送 30027 字节,用时 0.00 30027.00 千字节 / 秒。
ftp>

 目录创建功能测试

目录创建功能同样需要写入权限,在userdir目录中使用“mkdir”命令,创建目录dir,具体操作如下:
ftp> mkdir dir
257 "/userdir/dir" created
ftp> ls -l
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw------- 1 1002 50 30027 Oct 30 15 : 02 55. jpg
drwx------ 2 14 50 6 Oct 30 15 : 04 dir
226 Directory send OK.
ftp: 收到 128 字节,用时 0.00 42.67 千字节 / 秒。
ftp>

 禁止指定用户登录

FTP服务器中的普通本地用户一般都拥有登录、上传文件的权限,但在某些情况下,我们要限制部分用户的功能,禁止其登录FTP服务器,又需在系统中保留该用户时,可将这部分用户添加到 用户控制配置文件ftpusers中,如此当这些用户视图登录FTP服务器时,便会收到来自FTP服务 器的警告。
# 查看 ftpusers 文件中已经配置过的不能登陆 ftp 的账号
[root @cluster151 ~]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

 创建账号aaa,并设置密码aaa。使用该账号可以直接登陆ftp

E:\>ftp 192.168.48.151
连接到 192.168.48.151
220 (vsFTPd 3.0.2 )
200 Always in UTF8 mode.
用户 ( 192.168.48.151 :(none)): aaa
331 Please specify the password.
密码 :
230 Login successful.
ftp> pwd
257 "/home/aaa"

 接着将该账号添加到ftpusers中,拒绝该用户登陆ftp

 [root@cluster151 ~]# echo aaa >> /etc/vsftpd/ftpusers

[root @cluster151 ~]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
s ync
shutdown
halt
mail
news
uucp
operator
games
nobody
aaa

 再次使用aaa登陆ftp,提示登陆失败

E:\>ftp 192.168.48.151
连接到 192.168.48.151
220 (vsFTPd 3.0.2 )
200 Always in UTF8 mode.
用户 ( 192.168.48.151 :(none)): aaa
331 Please specify the password.
密码 :
530 Login incorrect.
登录失败。
ftp>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值