一.YUM
1.1 YUM介绍
学习YUM 软件仓库,可以完成安装、卸载、自动升级 rpm 软件包等任务,能够自动 查找并解决 rpm 包之间的依赖关系,而无须管理员逐个、手工地去安装每个 rpm 包,使管 理员在维护大量 Linux 服务 器时更加轻松自如。特别是在拥有大量 Linux 主机的本地网络中, 构建一台“源”服务器可以大大缓解软 件安装、升级等对 Internet 的依赖。 YUM 的前身是 YUP(Yellow dog Updater,Yellow dog Linux 的软件更新器),最初由 TSS 公司 (Terra Soft Solutions,INC.)使用 Python 语言开发而成,后来由杜克大学(Duck University)的 Linux 开发队伍进行改进,命名为 YUM(Yellow dog Updater,Modified)。 要成功使用 YUM 机制来 更新系统和软件,需要有一个包含各种 rpm 安装包文件及其依 赖软件的软件仓库(repository),提供 软件仓库的服务器也称为“源”服务器。在客户机中只 要正确指定软件仓库的地址等信息,就可以通过对 应的“源”服务器来安装或更新软件
1.2 YUM源的提供方式
1.2.1 配置本地源仓库
cd /etc/yum.repos.d/
vim local.repo [local] #仓库类别
name=local #仓库名称
baseurl=file:///mnt #指定URL 访问路径为光盘挂载目录
enabled=1 #开启此yum源,此为默认项,可省略
gpgcheck=0 #不验证软件包的签名
mount /dev/sr0 /mnt #把光盘挂载到/mnt目录下(前提虚拟机是光盘挂载)
##清理yum缓存并更新
yum clean all && yum makecache
###检查
yum repolist
1.2.2 配置ftp源
主要是思路
服务器配置:
1)安装vsftpd服务端软件
2)创建并制作yum远程ftp站点的源
3)启动ftp服务
rpm -qa|grep vsftpd
yum -y install vsftpd
mkdir /var/ftp/centos7 #创建挂盘挂载目录
mount /dev/sr0 /mnt #镜像挂载
cp -rf /mnt/* /var/ftp/centos7/ & mkdir /var/ftp/other # 创建目录repodata 数据文件
cd /var/ftp/other/
createrepo -g /mnt/repodata/repomd.xml ./ #工具建立仓库数据文件
systemctl start vsftpd
客户端配置:
1)创建远程yum源的配置文件
2)yum安装软件验证结果
客户端配置:
vi /etc/yum.repos.d/centos7.repo
[root@kgc14 yum.repos.d]# cat centos7.repo
[centos7] #仓库类别
name=centos7 #仓库名称(说明)
baseurl=ftp://192.168.10.17/centos7 #URL 访问路径
enabled=1 #启用此软件仓库
gpgcheck=1 #验证软件包的签名
gpgkey=ftp://192.168.10.17/centos/RPM-GPG-KEY-CentOS-7 #GPG 公钥文件的位置
[other]
name=centos7
baseurl=ftp://192.168.10.17/other
enabled=1 #启用此软件仓库
gpgcheck=0 #验证软件包的签名
1.2.3 配置http服务源
我们需要安装http服务,所以我们需要先搭建一个本地源
#首先创建一个文件用来挂载镜像
yum -y install httpd
mkdir /var/www/html/centos7 #创建镜像目录
mount /dev/sr0 /mnt #镜像挂载
cp -rf /mnt/* /var/www/htmlcentos7/ & #拷贝镜像文件
mkdir /var/www/html/other # 创建目录repodata 数据文件
生成 YUM 源索引:进入软件包所在目录,使用 createrepo 命令生成 YUM 源所需的索引文件: createrepo /var/www/html/centos7
这将在 /var/www/html/centos7 目录下生成一个名为 repodata 的子目录,里面包含有关软件包的索引信息。
[root@benet23 yum.repos.d]# cat centos7.repo
这就是http源,照着做就行,就修改ip即可,其他不要变
[centos7] name=centos7 #我们yum 源命名
baseurl=http://192.168.10.22/centos7 #是服务器设置中最重要的部分,只有设置正确,才能从上面获取软件
enabled=1 #启用yum源,0为不启用,1为启用
gpgcheck=1 #检查GPG-KEY,0为不检查,1为检查
gpgkey=http://192.168.10.22/centos7/RPM-GPG-KEY-CentOS-7
[other]
name=centos7
baseurl=http://192.168.10.22/other
enabled=1
gpgcheck=0
下面3个命令 按顺序执行一遍
yum clean all #清除yum缓存
yum makecache #缓存本地yum源中的软件包信息
yum repolist #查看源软件包
正常情况呢,就是执行yum repolist以后有我们定义的http源名称,且有相应的数量,如果数量为0,则哪 个步骤出问题了。
1.3 EPEL
EPEL,全称Extra Packages for Enterprise Linux,是一个由Fedora社区打造,为RHEL及其衍生发行版如CentOS、Scientific Linux等提供高质量软件包的项目。它相当于添加了一个第三方源,里面包含了许多基本源里没有的软件,可以自动配置yum的软件仓库。安装上EPEL源后,就可以直接用yum来安装软件,而且EPEL不会替换原有的源,安装后会产生新的repo。EPEL更多地使用了与Fedora相同的基础架构,包括构建系统、Bugzilla的实例、更新管理器、镜子管理,因此兼容性比较好。简而言之,EPEL为Linux系统提供了额外的软件包资源,丰富了软件生态。
二.NFS共享储存服务
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之 间可以共享文件或目录。
1.1 为什么要使用共享存储
1.实现多台服务器之间数据共享
2.实现多台服务器之间数据一致
1.2 NFS应用场景
实际应用中,共享存储是重要的组成部分。如果没有共享存储,网站就变成了单点的架构
应用场景1——集群没有共享存储
1、A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。
2、B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片, 所以B用户无法看到A用户传的图片。
应用场景2——集群有共享存储
1、A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储。
2、B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件, 这样就可以访问到资源了。
1.3 NFS实现原理
1、假如访问的是NFS客户端,先调用不同的函数(例如Read()函数,读功能、Write()函数,写功能、 Create()函数,创建功能、Remove()函数、删除功能、Rename()函数,重命名功能)对数据进行处理。
2、调用完函数后,首先NFS客户端会建立TCP连接,通过TCP/IP的方式传递给NFS服务端,连上远端的 服务器。
3、接着NFS服务端接收到请求后,NFS服务器会做3步系列操作(环环相扣,先映射端口,然后验证是 否能登录服务器,最后验证文件使用权限),如下: 首先,调用portmap进程进行端口映射。 接着,调用Rpc.nfsd进程来验证NFS客户端是否拥有对应的权限连接NFS服务端。 最后,调用Rpc.mount进程来验证客户端是否拥有对应的文件使用权限;
4、Portmap进程实现用户映射和压缩
5、最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。
1.4 NFS文件共享系统实验步骤
#配置思路
1、安装nfs和rpcbind软件
2、修改配置文件设置共享
3、创建共享目录
4、开启服务
5、客户端验证共享目录可访问
rpm -q rpcbind nfs-utils
yum install -y nfs-utils rpcbind
vim /etc/exports #NFS 的配置文件为/etc/exports,文件内容默认为空(无任何共享)
/opt/web 192.168.10.0/24(rw,sync,no_root_squash)
常用选项:
rw 表示允许读写
ro 表示为只读
sync 表示同步写入到内存与硬盘中
no_root_squash 表示当客户机以root身份访问时赋予本地root权限(默认是
root_squash),如果不加那么客户端无法在里面编辑或写入文件,因为默认以nfsnobody的权限
root_squash 表示客户机用root用户访问该共享目录时,将root用户映射成匿名用户
其它常用选项:
all_squash 所有访问用户都映射为匿名用户或用户组
async 将数据先保存在内存缓冲区中,必要时才写入磁盘,速度快但会丢失数据
subtree_check(默认) 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限
no_subtree_check 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可
以提高效率
systemctl start rpcbind //需要先启动rpc服务,因为nfs要向rpc注册端口
systemctl start nfs
systemctl enable rpcbind
systemctl enable nfs
[root@localhost web]# netstat -anpu | grep rpc
udp 0 0 0.0.0.0:111 0.0.0.0:*
24525/rpcbind
[root@localhost web]# rpcinfo -p localhost //查看nfs向rpc注册的端口信息
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 55627 status
……
[root@localhost web]# exportfs -v //验证结果
/web
192.168.245.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squ
ash,no_all_squash)
exportfs -r //刷新结果
[root@localhost web]# showmount -e localhost //验证共享
Export list for localhost:
/web 192.168.245.0/24
切换到客户端:
[root@localhost ~]# yum install -y nfs-utils rpcbind
[root@localhost ~]# showmount -e 192.168.10.17 //客户端验证共享
Export list for 192.168.245.100:
/web 192.168.245.0/24
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount -t nfs 192.168.10.17:/web /var/www/html //将共享目录
挂载到网页目录
[root@localhost ~]# systemctl start httpd //启动web服务
[root@localhost ~]# curl 127.0.0.1 //成功访问主页内容
hello world!
[root@localhost ~]# echo "this is kgc " >> /var/www/html/index.html //客户端修
改主页文件
[root@localhost web]# cat index.html //服务器端会同步
this is kgc
nihao
同理可得,服务端写入或修改内容,客户端也会同步
df -h #查看挂载情况
修改/etc/fstab实现自动挂载:
192.168.10.17:/opt/web /var/www/html nfs defaults,_netdev 0 0
defaults,_netdev说明这是一个网络设备
注意:NFS 客户端与服务器端的耦合度是非常高的,如果客户端正在挂载使用,服务器端 NFS 服务突然间停
掉了,那么在客户端就会出现执行 df -h 命令卡死的现象。这个时候使用 umount 命令是无法直接卸载
的,需要加上 -lf 才能卸载
-l 表示解除正在繁忙的文件系统,-f 表示强制。
[root@localhost web]# systemctl stop nfs //服务器端模拟nfs挂掉
[root@localhost ~]# umount /var/www/html //客户端卸载时会卡住
^C
[root@localhost ~]# umount -lf /var/www/html //加lf参数成功卸载
其他nfs文件:
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息
三.tcpdump
抓包工具 iptables tcpdump
tcpdump option proto dir type 选项 协议 数据的方向 抓取的数据类型
proto(协议):
1. tcp udp icmp
2. ip ipv6 3. arp
dir(方向):
1. src 192.168.91.100 只抓取 源地址是 91.100
2. dst 192.168.91.101 只抓取目的地址是 91.101
3. src 192.168.91.100 and dst 192.168.91.101 只100 到101
type(类型)
1. host 主机
2. net 网段
3. port 端口
4. port range 端口范围
[root@localhost ~]#tcpdump -i ens33
输出格式讲解:
第一列:时分毫秒 11:53:55.288476
第二例:网络协议ip
第三列:发送方IP地址+端口号 ip地址:192.168.91.1 端口号:47496 >表示数据流向
第四列:主机名协议 主机名:localhost.localdomain 协议:ssh
第五列: seq号 ack号 win窗口长度 tcp的标志位
1.1 过滤规则
1.1.1 基于ip地址/网段过滤
host选项
主机2 ping 主机1
[root@localhost data]#tcpdump -i ens33 host 192.168.126.101
#只关心 和 192.168.126.101 有关的流量
dst 选项 目的地址
src 选项 源地址
net 选项
tcpdump net 网段/24
[root@localhost ~]#tcpdump net 192.168.91.0/24 -i ens33
控制方向 [root@localhost ~]#tcpdump -i ens33 src net 192.168.91.0/24
[root@localhost ~]#tcpdump -i ens33 dst net 192.168.91.0/24
1.1.2基于端口过滤
port 端口号 tcpdump port 80
[root@localhost ~]#tcpdump -i ens33 port 80
[root@localhost ~]#tcpdump -i ens33 port 80 or port 22
#80 和 22 端口
[root@localhost ~]#tcpdump -i ens33 src port 80 or port 22
[root@localhost ~]#tcpdump -i ens33 dst port 80 or port 22
范围端口
[root@localhost ~]#tcpdump -i ens33 portrange 80-8080
[root@localhost ~]#tcpdump -i ens33 src portrange 80-8080
[root@localhost ~]#tcpdump -i ens33 dst portrange 80-8080
1.1.3 基于协议
protocal 协议种类:ip arp icmp tcp udp
应用层协议不可以直接抓取
[root@localhost ~]#ping www.baidu.com
[root@localhost ~]#tcpdump -i ens33 icmp
1.2 常见参数
-i 指定监听网络监听端口
-w 将捕获信息保存到文件中,且不分析核打印在屏幕上
-r 读取上面存储的文件
-n 不把ip转换成域名,直接显示ip
-nn 直接显示ip和端口号
-t 在每行的输出中,不显示时间
-tt 输出一个时间戳
时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间。
-ttt 每行之间的时间间隔
-tttt 详细日期
-v 产生详细的输出
-c 指定收取数据包的数量
-C 需要与w 配合使用 指定单个文件的大小 百万字节
-Q 过滤数据包的方向 in out inout
-q 简洁的输出
-D 显示所有可用的列表
-s 指定数据包的大小