链接:https://pan.baidu.com/s/1jBlX2OoWALMaLuMkx21H7w 提取码:mzl4 复制这段内容后打开百度网盘手机App,操作更方便哦 如果看的不舒服可以上百度网盘下载完整的


第二本书

一、Linux基本命令 1.基础命令

vi /etc/sysconfig/network-scripts/ifcfg-ens32 DNBBOT=NO改成DNBBOT=YES //开启ip地址

(1)TTY终端 在Linux默认的登录模式中,主要分为两种,一种是仅有纯文本界面的登录环境(字符界面),另一种则是图形桌面的登录环境。

此外,Linux系统默认情况下提供6个虚拟终端来让用户登录。 这6个终端分别为tty1~tty6。 使用Ctrl + Alt+(F1~F6)命令来切换。其中F1是图形界面,F2~F6都是字符界面。(在安装有图形界面的Linux系统) F1是字符界面(最小化安装情况下)

切换后,可以输入“tty”命令查看当前处于哪个终端中。

(2)常用命令 ①要是想敲命令的话,有三种方法: 1)打开自带的终端,类似于windows下的cmd 2)可以进入字符界面 3)远程连接

1、hostname 查看当前主机的完整名称 同时hostname也可以修改当前系统的主机名

hostname 新的主机名 修改当前主机名为xxx(临时更改主机名) logout、exit退出当前登录的环境

比如:hostname kfc 表示临时修改当前系统主机名为kfc,退出重新登录后主机名生效

以上是临时修改,重启后不生效

想要永久修改主机名,使用以下命令: vi /etc/sysconfig/network(永久修改主机名) centos6版本
vi /etc/hostname (永久修改主机名) centos7版本

按i进入输入模式,修改完主机名后按Esc退出输入模式,再按“shift+:”再输入wq,回车即可,退出vi编辑器。

修改完后,重启生效。

init 6 重启

2、pwd 显示用户当前所在的工作目录位置

3、cd 用于切换工作目录(文件夹)

(1)绝对路径:这种方式以根目录'/'作为起点 如'/var/log'表示根目录下var子目录中的log目录;若要确切表明log是一个目录(而不是一个文件),可以在最后也加上一个目录分隔符 如表示为“/var/log/’
cd /var/log ; cd /var/log/
(2)相对路径:这种方式一般以当前工作目录作为起点,在开头不使用“/”符号,相对路径主要包括如下几种形式;

a、直接使用目录名,用于表示当前工作目录中的子目录的位置;例如,当前目录是/var,执行cd log进入log子目录;

b、使用两个点号“..”开头,表示以当前目录的上一级目录(父目录)作为起点;例如,当前目录是/var/log,执行cd ..返回到/var目录;

c、使用一个点号“.”开头,可明确表示以当前的工作目录作为起点;例如,当前目录是/var/log,“./messages”可表示当前目录下的messages文件,这种形式在以后执行脚本时经常用到

此外: cd ~或者cd 回到起初家目录
~,代表当前登录用户的家目录 cd - 切换回上一次执行cd命令之前所处的目录 cd .. 返回上一层目录 ./ 当前目录 ../ 上级目录的路径

4、ls (list)列表,用于显示目录(文件夹)中的内容

5、提示符信息 提示符包含的内容:当前用户名/主机名/目录名/提示符 #:超级管理员身份 $:普通用户身份 例子: echo $PS1 (提示符变量)
[\u@\H \W]$ echo 打印输出 注:u是username(用户名),H是Hostname(主机名),W(工作目录)

#号表示当前登录的是超级管理员用户。如果是当前登录的是普通用户,则“#”字符变为“$”

在命令提示符后可以输入字符串形式的各种操作命令,然后Enter键表示输入完毕并执行。

二、系统相关命令 主要查看Linux主机中的各种系统信息。

1、查看系统版本 lsb_release -a 查看当前操作系统的系统版本(centos 7以上需要安装redhat-lsb-core软件包) 查看发行版:cat /etc/redhat-release centos6和7 查看发行版本

2、查看操作系统:uname

3、查看内核版本:uname -r

4、查看IP地址:ifconfig

5、查看CPU信息:cat /proc/cpuinfo

6、查看内存信息:cat /proc/meminfo

8、查看硬盘信息:df -h

9、关机操作 关机操作: shutdown -h now poweroff(5.0之前强制关机) init 0

延迟关机:shutdown -h +分钟 “提示内容” 例子:shutdown -h 5 “guanji ” 取消:ctrl+c

重启操作: shutdown -r now reboot init 6

延迟重启:shutdown -r +分钟

取消延迟的操作:ctrl+c;shutdown -c

退出当前命令操作环境:exit

计算机网络

硬件方面: 传输介质:网线、光纤、电话线 服务器:IBM、dell、联想、惠普、INTER、ORCALE

软件方面 操作系统:Windows(微软) Linux(开源的操作系统) Unix 软件程序

局域网的标准 IEEE 802.3 有线以太网标准 IEEE 802.11 无线以太网标准

防火墙: 硬件防火墙:网络设备 软件防火墙:作为软件运行在系统中的 linux的防火墙: IPtables 6版本及以下版本 Firewalld 7版本及以上版本

单点故障点

网络协议的三要素 语法、语义、同步

硬件地址——物理地址(Mac地址) 就是网卡的物理地址 数据链路层 网卡、交换机

逻辑地址——ip地址 网络层 对应的网络设备——路由器 传输层 对应的网络设备——防火墙 会话层、表示层、应用层————软件程序

Tcp/ip参考模型每层的动作 应用层对数据采取动作:翻译——将数据翻译成电脑能识别的语言 传输层对数据采取动作:分段——将数据分成一段段,简称数据段 网络层对数据段采取动作:打包——将数据段打包成一个个包,简称为数据包 数据链路层对数据采取动作:装帧——将数据包装成一个个数据帧 物理层对数据采取动作:转换比特流——将数据装换成比特流在传输介质中传输

TCP 安全、可靠的痛心协议

UDP 简单、高校的通信协议

端口号,最大65536个端口

SYN=1,ACK=0,发送一个请求报文 SYN=1,ACK=1,同意建立连接

FIN 终止位。 FIN=1时,表示数据传输完毕后,就端开链接

ACK FIN SYN

TCP报文段重要的选项: 源端口号 目标端口号 序号 确认号 控制位: ACK确认位 ACK=1确认连接请求 SYN同步位 SYN=1,ACK-0 发送请求连接报文 SYN=1,ACK=1 同意建立连接 FIN 终止位 FIN-1 代表数据传输完成后,端开连接 校验和 判断数据是否损坏,主要是校验首部和数据

TCP连接

三次握手——两台主机连接的过程 四次挥手——两台主机断开连接的过程

半连接状态 ——四次挥手以后,但是数据还在传输的状态,只有等到数据传输完成以后,才回断开连接

web服务器 apache 80 nginx 80 tomcat 8080

端口 协议 说明 21 FTP FTP服务器所开放的控制端口 23 TELNET 用于远程登录,可以远程控制管理目标 25 SMTP SMTP服务器开放的端口,用于发送邮件 80 HTTP 超文本传输协议 110 POP3 用于邮件的接受

UDP报文的首部格式 源端口号 目标端口号

常用的UDP端口号及其功能

ip地址 A类:1~127 0.0.0.0~127.255.255.255,其中0.0.0.0是不可用,因为它代表任意地址,127.0.0.0~127.255.255.255也不可用,因为这段地址都适用于测试用的,网卡有没有问题 1~126 私有地址:10.0.0.0~10.255.255.255

B类:128~191 私有地址:172.16.0.0~172.31.255.255 C类:192~223 私有地址:192.168.0.0~192.168.255.255 D类:224~239 军事 E类:240~254 科研

255结尾的ip地址就是广播地址

Ip地址由两个部分组(每一段取值范围是0~255) 网络部分(NETWORK) 主机部分(HOST) 实例192.168.0.25:192.168.0(网络部分).25(主机部分)

ip地址和子网掩码作逻辑“与”运算得到网络地址 0和任何数相与都等于0 1和任何数相与都等于任何数本省

T568A的线序1~8分别为:白绿、绿、白橙、蓝、白蓝、橙、白棕、棕 T568B 的线序1~8分别为:白橙、橙、白绿、蓝、白蓝、绿、白棕、棕

信号的分类: 模拟信号 数字信号 信号在传输过程中产生的失真 噪声 衰减 数字信号的优势 抗干扰能力强 传输距离远并能保证质量、

线缆的连接 标准网线 交叉网线 全反线

双绞线分类 屏蔽双绞线 非屏蔽双绞线

双绞线的顺序和RJ-45水晶头的管脚序号必须——对应 标准网线:就是网线两端使用同一个线序(A与B) 交叉网线:就是网线一端使用是A,另一端使用时B

口诀: 相同设备交叉连,不同设备标准连,PC与路由器为相同设备

光纤的特点 传输带宽高 传输距离远 抗干扰能力强 光脉冲在光纤中的传输是利用了光的全反射原理 光纤分为单模光纤和多模光纤

数据链路层对应的是交换机 数据链路层是用以太网帧头来装帧 作用:负责网络中相邻几点之间的可靠的数据通信,而且还可以进行流量(访问)控制

以太网帧格式: 目的地址:目的mac地址——接收方的网卡物理地址 源地址:源mac地址——发送方的网卡物理地址 类型:用来表示上层协议的类型 0800H代表IP协议 0806代表ARP协议 数据:MTU——最大传输单元,46~1500字节

交换机自带有一个MAC地址缓存表 缓存主机与MAC地址对应关系

交换机工作原理: 交换机接受发送的信息,学习其中的源mac地址,然后根据目的mac地址查看mac地址缓存表,表中有相关信息,那就转发,没有就泛洪,然后学习目的的mac地址

双工模式: duplex full 全双工 duplex half 半双工 duplex auto 自动匹配

接口速率 Speed 10 10M Speed 100 100M Speed 1000 1000M Speed auto 自动匹配

注:设置完双工模式后,一定要设置接口速率,不然不生效

思科模拟器 交换机设置命令如下 Conf t 进入特权模式 Exit 退出当前模式 Write 重定义设备参数

注:接口为f0/几 代表是路由器的接口 接口为f1/几 代表是交换机的接口

Hostname 名字 修改设备名称 Show mac-address-table 查看交换机mac地址表(在用户模式下) Do show mac-address-table(在特权模式下)

查看——show

路由器设置 Conf t Int f0/0 进接口 Ip add 192.168.10.1 255.255.255.0 给当前接口设置ip地址 No shutdown 激活当前接口 Do show ip int b 查看设置ip地址

给电脑设置ip地址: Tools——VPCS 切换不同的电脑:VPCS<1>:1或者2...... 设置ip地址:ip 192.168.10.10 设置ip地址同时设置网关:ip 192.168.10.10 192.168.10.1 测试ip地址能不能连通:ping 192.168.10.1

网络层的功能 定义了基于ip协议的逻辑地址 连接不同的媒介类型 选择数据通过网络的最佳路径

协议字段重要地方 版本 首部长度 优先级与服务类型 TTL 协议号 源地址 目标地址

ICMP首先封装数据数据,然后再用ip协议封装数据

Ping的常用参数 -t系统将会一直不停的ping下去 -a可以返回对方主机的主机名 -l可以使用参数改变ping包的大小

ARP缓存表 里面记录了ip地址和Mac地址的对应关系

Windows系统中的ARP命令 arp -1:查看ARP缓存表 arp -d:清除ARP缓存 ARP绑定

路由器: 行为管理——ARP绑定

ARP攻击: 首先制造一个虚假的ARP应答信息, 虚假的ARP应答信息里面包含了被攻击主机的ip地址和Mac地址(虚假的Mac地址,是本机的) 发送给其他主机 1、欺骗其他所有主机 吧虚假的ARP应答信息,发送给处理我们要攻击的主机以外的,所有其他主机。 2、欺骗被攻击计算机

ARP攻击和欺骗的区别: ARP攻击:制造一个虚假的Mac地址 ARP欺骗:制造一个真实的Mac地址 相同点:都是制造一个虚假的ARP应答信息。

路由器的工作原理: 根据路由器的路由表进行转发,如果路由表有路由就转发没有则丢弃。

注:不同网段需将数据包发送给网关才能转发 同一网关的直接查找主机。 路由表的操作:缺什么加什么

工作的过程: 路由器接收数据包,查看数据包中的ip地址,并与路由器中的路由表进行匹配,找到转发端口,找到转发端口,转发到该端口。

静态路由: 手动的,单向的,缺什么加什么

默认路由: 可以匹配所有的网段,但是它的优先级最低。 当目标地址匹配到静态路由,默认路由就不会再匹配。 当目标地址匹配不到静态路由,才会匹配默认路由。

只有一条路径的情况下,才会设置。

Vlan ——虚拟局域网 现网中,网络广播风暴,解决方法:交换机划分vlan

静态vlan 基于端口划分静态vlan 动态vlan 基于Mac地址划分动态vlan

配置静态vlan的步骤 创建vlan 将交换机的

Int range f0/1,f0/2,f0/5 Int range f0/1-5,f0/8 一次性进入多个接口

Do show vlan-s b switchport trunk encapsulation dot1q 封装协议标准

CEF: 转发信息表FIB,是一个路由表的镜像,复制路由表的内容 领接关系表

FIB依托于领接关系表

三层交换机中给vlan配置ip地址就是给虚接口配置ip地址

No ip routing 关闭路由功能 Ip routing 启用路由功能 No switchport 关闭交换功能,一般用于将交换机接口转换为路由器接口

MAC地址由48位二进制,由16进制表示,前三段表示厂商编号,后三段表示网卡的唯一编号。

Linux 登录用户,就是登录一个新的一个环境 (shell环境)

Help 显示系统中的所有内部命令及用法

命令 --help 显示命令的选项

Man 命令 显示该命令的用法及选项 “man手册”

linux网卡ip地址设置方法 第一种:图形界面 第二种:nmtui 第三种:字符界面配置文件方法 Vi/etc/sysconfig/network-scripts/ifcfg-ens32 是centos6版本的 //网卡配置文件 BOOTPROTO=nome 网卡的地址配置模式 注:dhcp——自动获取ip地址 Static——手动设置ip地址 Nome——手动设置ip地址 NAME=ens32 网卡名称3 UUID=d467524d-e3dc-4d5a-b1a5-b230ae002d5a网卡的编号 DEVICE=ens32 物理网卡名称 ONBBOT=no 是否开机启动网卡 No,代表开机不启动网卡 Yes,代表开机启动网卡 IPADDR=192.168.80.104 设置网卡ip地址 子网掩码: NETMASK=255.255.255.0 centos6和7版本都生效 PREFIX=24 从centos7版本开始才有的。

GATEWAY=192.168.80.1 网关地址 DNS1=192.168.80.10 指定dns服务器地址。 DNS2= //最多支持四个DNS

扩展: 给网卡设置两个ip地址 IpADDR0=192.168.80.100 PREFIX0=24 IPADDR1=192.168.80.101 PREFIX1=24

ls 显示当前所在工作目录里面的内容 ls 目录名 显示指定目录里面的内容

文件名以.开头的,是隐藏文件或目录 以“.”作为目录名的目录,代表当前目录 以“..”作为目录名的目录,代表上一层目录

ls -ld //显示当前目录的属性 ls -ld 目录名 //显示指定目录本身的属性

du 显示当前目录下所有内容的各自大小 du -a 显示当前目录下所有内容的各自大小 du -sh 显示当前目录总的大小 (常用)

执行ls命令后,你会发现各种颜色的文件或目录: 深蓝色——目录 浅蓝色——链接文件 白色——普通文本文件 灰色——文本文件 绿色——脚本文件 红色闪烁——损坏的连接文件 红色字体——压缩文件 ×××——设备文件(代表硬件的文件)

touch 文件名称 //创建新的文本文件 一次创建多个文本文件: touch 文件名称1 文件名称2 ....... 注:多个文件之间以空格作为分隔。

源文件已存在,用touch在创建一遍的话,作用是更改该文件的创建时间。

mkdir 创建目录(文件夹) mkdir 目录名 //创建一个新的目录一次性创建多个目录: mkdir 目录名1 目录名2..... 一次性创建嵌套的多个目录: mkdir -p 目录名1/目录名2/目录名3......

cp 源文件 目的目录 //将该文件复制到目的目录里面

注:cp 只能复制文件

Rm -r /opt/abc删除opt下的ABC

cp -r 源目录 目的地 //复制目录

Alias 别名,作用,给命令取一个名称 Alias 别名名称=“执行的魅力或者值” 临时性的,重启后不生效

Vi /etc/bashrc 最后插入 alias 别名名称=“执行的魅力或者值” 保存退出即可 source /etc/bashrc 立即生效 以上永久生效的方式

移动 mv 源文件或目录 目的地

重命名:在目的地目录后面自定义一个名称 mv 源文件或目录 目的地目录/名称 //移动重命名 cp 源文件或目录 目的地目录/名称 //复制重命名

which 所要查找的命令 //查看命令或程序所在的路径

通配符 *,代表所有 ?,只代表一个字母

find/ -name a* 查找系统中以小a开头的内容

find/etc -size +(-)50k 查找系统中内容大于(小于)50kb的内容

fing/-user lq 查找系统中属于为lq的内容

fing /-type f 查找系统中所有文本文件 所有内容

f——文本文件 d——目录 b——块设备文件 c——字符快文件 l——连接文件

以上都是广泛查找

Find/-size -5k -a -name c* -a -type f -exec cp -rf{}/opt/bb/;

查找系统中小于5k且名称以a开头的且类型为文件的内容并把它复制到/opt/bb目录里面去。

Find / -size +5k -a -size -10k -a -type f 查找系统中大于5k小于10k的文件

/root 超级管理员root的家目录 /bin 存放普通用户可使用的命令 /etc 存放的是配置文件 /boot 存放的是系统内核文件、启动文件 /home 存放的是普通用户的家目录 /usr 存放的是滴三方安装的软件目录 /var 存放的是日志文件、数据库文件等动态变化的文件 /dev 存放的是设备文件 /sbin 存放超级管理员使用的命令

Linux中的一切皆是文件 /usr/local/ 安装的第三方软件存放位置 media mnt挂载硬件的 cat 看文件,是一次性显示所有内容,适用于文件内容较少的文件 cat -n 显示文件内容的行号 more 适用于文件较多的文件,但是不支持查找功能 less适用于文件较多的文件,但是支持查找功能 head 显示文件内容前几行内容 tail 显示文件内容最后几行内容 tail -n 2 自定义显示最后多少行内容 tail -f 动态更新内容 wc -c 注意,空格和换行、标点符号、特殊符号都算一个字节 grep root /etc/passwd 显示文件中包含关键字的行 gzip bzip2 是吧源文件直接压缩 tar 备份压缩,将源文件复制一遍,然后对复制的文件进行压缩 -c压缩,启用压缩功能 -x解压缩,启用解压缩功能 -v显示压缩和解压缩的过程 -f使用归档的方式 注:-vf,固定模式 -t查看压缩文件的内容 -z使用gz格式 -j使用bz2格式

总结: 压缩: tar czvf 压缩文件名 源文件或目录 //以gz格式去压缩文件 tar cjvf 压缩文件名 源文件或目录 //以bz2格式去压缩文件

注:以什么样的格式去压缩就以什么格式结尾。 文件名.tar.gz 文件名.tar.bz2

解压缩: tar xjvf 压缩文件名 //以bz2格式去解压缩文件 tar xzvf 压缩文件名 //以gz格式去解压缩文件

解压缩到某个目录中的话: tar xjvf 压缩文件名 -C 目的目录 tar xzvf 压缩文件名 -C 目的目录

扩展: tar cf 压缩文件名 -C 目的目录 //可以解压bz2和gz格式压缩文件

查看压缩文件内容; tar tjvf 压缩文件名 //以bz2格式去看压缩文件 tar tzvf 压缩文件名 //以gz格式去看压缩文件

vi编辑器:

输入模式:有个“--insert--”标志

末行模式:界面底下有个“:”标志

光标移动

复制粘贴删除

复制多行:几(数字多少复制多少行)yy /(?)要搜索的字符 从上而下文件中查找字符

命令模式: 删除一个字母: x键:在命令模式下使用的 delete键:在输入模式下使用的

删除行: dd,删除光标所在的行,

ZZ:在命令模式下,保存退出

末行模式: :w,保存 :q,退出 :wq,保存退出 等同于:x :q!强制退出,不保存退出。

:w /root/a.txt 将当前文件所有内容另存为/root/a.txt :18,19 w /root/b.txt 将当前文件内容的第18行到19行另存为 为/root/b.txt

:e /root/c.txt 在文件中打开新的文件 :r /root/d.txt 在当前文件中读入新的文件内容

查找撤销保存退出:

文件内容替换

建立软件仓库: mount /dev/cdrom/mnt/

安装软件包的命令 rpm -ivh 软件包名称

忽略依赖关系卸载软件 rpm -e 软件包名称 --nodeps

重建RPM数据库 rpm --rebuilddb rpm --initdb

查看以安装的软件包: rpm -qa 软件包的名称 查看系统中的已安装的所有软件包列表

rpm -qi(information 信息)软件包的名称 查看指定软件包的详细信息

rpm -ql(list 类表)软件包的名称 查看指定软件包的要安装软件的目录。

rpm -qf(file 文件)文件的名称 查看指定文件属于哪个软件包

rpm -qa 软件名 查看该软件由哪个软件包安装的

rpm -qc 软件包的名称 查看指定软件包的要安装的配置文件(.conf)

rpm -qd 软件包的名称 查看指定软件包中的压缩文件。

查看未安装的软件包 rpm -qpi 软件包的名称 查看指定未安装的软件包的详细信息

bash-4.1.2-15.el6_4.x86_64.rpm bash 软件包名称 -4.1.2版本号 主版本4 -15.el6_4.服务器的结构 15发布次数 x86_64.rpm适用于 x86硬件平台64位

绿色免安装包是个二进制

useradd命令

passwd命令

usermod 命令 修改用户账号属性

删除宿主目录 userdel -r 用户名称 ls -ld /home/用户名 确认宿主目录是否删除成功

yum 大黄狗 作用:解决安装软件包的依赖关系当安装有依赖关系的软件包时,会将依赖的软件包一起安装。

本地yum:yum源、光驱挂载

yum源:以“.repo”结尾 cd /etc/yum.repos.d/ mkdir back mv C* back/

vi local.repo 新建本地yum源 [local] name=local baseurl=file:///mnt enabled=1 gpgcheck=0

临时挂载光驱: mount /dev/cdrom /mnt 永久挂载光驱: vi /etc/fatab //开机自动挂载配置文件 跳到最后一行: /dev/cdrom /mnt iso9660 defaults 0 0 硬件 挂载点 挂载格式 选项(权限)

mount -a //检查语法错误

用yum安装软件: yum install 软件包名称 //安装多个软件,以空格作为分隔 yum install 软件包//查找有没有这个软件包

yum remove 软件名称 //卸载 systemctl stop firewalld关闭防火墙

-g指定基本组(私有组) -G指定公共组

passwd tom 对指定用户更改密码

gpasswd删除组成员

查询账号信息

添加:who w users

文件或目录访问的权限

.bash_logout 当前用户退出系统时执行,可用于删除日志

.bash_profile 用户登录系统时被执行,是一个开机启动文件,但是只有在开机启动时执行一次

.bashrc 也是开机启动文件,但是用户每次进入系统都会执行一遍,而且作用范围很广。

以上都是只影响当前登录用户,不会影响其他人。

/etc/profile /etc/bashrc 对所有用户生效。对所有人都有影响。

u、g、o、a分别表示 属主、属组、其他用户

chmod两种表示方法 子母法:chmod u+rwx,g+rwx 文件名或目录名 数字法:chmod 777 文件名或目录名

  •        ---                r--                 r--,1 root root 0 10月 30 12:02 aa
    

文件类型 文件所有者权限 文件所属组的权限 文件(其他人的权限) 7 = 007 只有一个数字的时候代表其他人 77 = 077

u——user——文件所有者 g——group——文件所属组 o——other——其他人 a——all——所有人

+,在原有的权限去增加 -,在原有的权限上去出去 =,直接设置

r,读权限, 对于目录来说,就是能让用户看到目录中的内容 对于文件来说,就是能让用户查看文件中的内容

w,写权限 对于目录来说,就是能用户可以在当前目录中,创建、重命名、删除内容。 对于文件来说,就是能用户可以在该文件中,进行修改文件中内容、删除

x、执行权限 对目录来说,就是能让用户进入当前目录。 对于文件来说,就是让用户可以执行文件,(即执行脚本)

目录权限最大为777,普通文件权限最大为666 脚本文件权限最大为777

影藏权限: t,sticky权限,粘之位,作用:公共文件内,某个账号的文件,只允许其他人修改读取,不可以删除,只会出现在其他人权限上

chmod 1777对象

s,在文件所有者盒所属组权限上。作用,将之后创建的文件或目录自动更改当前目录的归属。 chmod g+s 对象

改归属: 改文件所有者:chown 用户账号 对象 该文件所属组:chown .组账号 对象 chown:组账号 对象

同时修改文件所有者和所属组: chow 用户账号.组账号 对象 chown 用户账号:组账号 对象

默认权限为777

umask 查看当前的反掩码 umask

su - 用户名 //切换用户

useradd 用户 //创建登录用户

创建分区 fdisk /dev/sdb n p enter

  • 要分区多大的内存 p 查看有没有成功 w 保存退出

ls /dev/ | grep sdb 查看sdb硬盘分区情况

删除分区 fdisk /dev/sdb d 选择删除哪个盘 p 查看有没有成功 w 保存退出

硬盘分区挂载:mount 分区文件绝对路径 挂载点 卸载:umount 挂载点

光盘设备挂载: /dev/cdrom(sr0) 挂载点(/mnt或者/media)

卸载:umount 挂载点

镜像文件挂载: mount -o loo 镜像类型 挂载点 卸载: umount 挂载点

以上都是临时挂载

永久挂载: /etc/fstab 是一个开机自动挂载配置文件。

vi /etc/fstab

分区文件 挂载点 文件系统 参数 0 0 例子: 挂载普通分区: /dev/sdb1 /opt/cc xfs defaults 0 0

挂载光盘: /ev/cdrom /mnt iso960 defaults 0 0

mount -a 检查语法错误并进行挂载,-a相当于add

mount 查看分区的详细信息

linux如何挂载windows 下的共享目录 (windows最好在磁盘中设置共享目录) mount.cifs//192.168.80.1/aaa2/mnt/server -o
//mnt挂载点mount.cifs//192.168.80.1/aaa2 挂载点 -o user=administor,oass=123456 //username=windows用户名,password=windows用户密码 linux 下的server需要自己手动建一个 后面的user 与 pass 是windows 主机的账号和密码注意空格和逗号

永久挂载: vi /etc/fstab //192.168.80.2/aaa2/opt/dd cifs defaults,username=administrator,password=123456 0 (不需要1需要) 0(不需要) 需不需要备份 需不需要磁盘的检查

挂载参数:rw 可读可写 ro 只可读 noexec 不可执行 defaults 默认参数 usrquota 用户磁盘配额 grpquota 组磁盘配额——基本组生效

扩展 :blkid 用来查看硬盘的UUID号

df -hT 查看硬盘分区情况及使用情况


cmd模式下输入以下命令:

netsh winsock reset

文件属性和文件系统属性的关系: 特殊权限——影藏权限: a:不能添加内容,也不能删除,也不能重命名 i:不能添加内容,也不能删除,也不能重命名

lsattr 文件名 查看影藏权限

chattr 用于添加和删除影藏权限

chattr +i 文件名 锁文件 chattr -i 文件名 解锁文件

lsattr 文件名 查看文件的隐藏权限

将/dev/sda1/格式为xfs文件 mkfs.xfs /dev/sdal

sda1: sd: 代表硬盘的类型scsi a: 代表硬盘的序号 1: 代表硬盘分区的序号

初始化交换分区: fdisk 硬盘名称 n p enter +100M t 83 代表交换分区 82 代表普通分区 w mkswap 交换分区的名称 初始化 swapon 交换分区的名称 激活

分区最常用的方式: 标准分区 逻辑卷

LVM概述 Logical Volume Manager ,逻辑卷管理 动态调整整磁盘容量,从而提高

LVM机制的基本概念 PV(物理卷) VG(卷组) LV(逻辑卷)

xfs_growfs /dev/vg01/lv01 xfs 文件系统 resize2fs /dev/vg01/lv01 ext4文件系统

磁盘配额:

usrquota 用户账号限额 grpquota 组账号限额

quotaon -p 挂载点 查看磁盘配额有没有开启

quotaon 挂载点 开启磁盘配额 quotaoff 挂载点 关闭磁盘配额

注:xfs文件系统,默认开启磁盘配额 ext4文件系统,默认不开启磁盘配额,需要手动开启: quotacheck -ugcv 分区的名称
quotaon 挂载点 开启磁盘配额

进行磁盘配额: edquota -u 用户名 编辑用户磁盘配额 edquota -g 组账号 编辑组的磁盘配额

soft 软限制,是硬限制的80%,可以超过,超过之后只能在7天之内使用,7天之后无法使用。 hard 硬限制,固定的容量,不可超过。

hard = 10G soft = 8G

查看配额使用情况: quota -u 用户名 查看用户的配额情况 quota -g 组账号 查看组的配额使用情况,针对用户的基本组 repquota 挂载点 查看目录使用的情况

针对ext4文件系统: quotacheck -augcv 创建配额文件 quotaon 挂载点 开启

RAID0: 优点:提速,速率成倍的,有几硬盘就有几倍速率。 磁盘的使用率100% 缺点:没有数据的可靠性(安全性)。

RAID1: 不可以提速 有数据可靠性 磁盘使用率是50%,容量是N/2

RAID5: 能提速。读取速度提升,写的速度没有提升 有数据的可靠性 磁盘的使用率(n-1)/n 允许坏一块硬盘 浪费CPU资源。

RAID6: 能提速,读取速率提升,写的速率降低 能容错,可以允许2块磁盘损坏 磁盘使用率是(n-1)/n

RAID 1+0: 能提速,速率为n/2 有数据可靠性 能容错,允许一块磁盘损坏 磁盘使用率是n/2

1、根据需求增加硬盘。 2、使用以下命令创建相应级别的RAID。

mdadm -Cv /dev/md0 -l5 -n3 -x1 /dev/sd[b-e]

3、cat /proc/mdstat //查看md0的状态 mdadm -vDs /dev/md0 //查看md0的详细信息。

4、格式化挂载及自动挂载 mkfs.ext4 /dev/md0 //对md0格式化 mount /dev/md0 /mnt vi /etc/fstab/

5、保存RAID的配置文件。 mdadm -Ds > /etc/mdadm.conf

6、测试 mdadm -f /dev/md0 /dev/sdc //模拟失效 mdadm -r /dev/md0 /dev/sdc //删除坏盘 mdadm -a /dev/md0 /dev/sdf //增加新盘

mdadm -S /dev/md0 //停止前先卸载还要保存配置文件 mdadm -A /dev/md0 //激活阵列

cat /etc/udev/rules.d/70-persistent-net.rules 查看网卡的MAC地址等信息

caiwu的所有者是root,所属组也是root

lsblk 查看硬盘详细信息 fdisk -l 查看硬盘详细信息

systemctl enale firewalld 设置防火墙随系统启动而启动,即开机自启。 systemctl disable firewalld 设置防火墙不随系统启动而启动,即不开自启,相当于禁用防火墙

atd,一次性计划任务 centos6版本 chkconfig 优化服务启动状态 chkconfig 服务名称 on 设置为开机自启1 chkconfig 服务名称 off 设置为不开机自启

chkconfig --level 运行级别 服务名称 on/off 定义服务在某个级别中的启动状态。

例子: chkconfig --level 5 httpd on

屏蔽服务 systemctl mask 服务器 禁用某服务 systemctl umask 服务名称 取消禁用某服务

centos 7版本

systemd进程开机时,默认从/etc/systemd/system目录中读取服务的配置文件用于启动该服务

systemctl管理的是/etc/systemd/system /usr/lib/systemd/system

service管理的是/etc/init.d/

基础命令: systemctl list-unit-files 查看当前系统上的所有服务

systemctl list-unit-files | grep enabled|wc -l 统计设置为开机自启的服务有多少

systemctl get-default 查看当前系统的默认运行级别

systemctl set-default 运行级别(multi-user.target/graphical.target) 设置系统的默认运行级别

systemd进程初始化 cent0s7版本

设置服务开机自启的命令 systemctl enable 服务名称 7版本 chkconfig 服务名称 on 6版本

查看版本信息 cat /etc/redhat-release

systemctl is-active 服务名称 判断服务的启动状态

systemctl start/stop/restart/reload 服务名

启动、停止、启动、重加载服务

systemctl enable/disable 服务名 设置服务是开机自启,还是开机不自启

systemctl mask/umask 服务名 设置禁用服务,不禁用服务

其他的基础命令:

date 查看时间,并可以设置时间

date -s “时间” 例子 date -s ”2018-11-6 9:16”

timedatectl set-ntp yes 开启网络时间同步

timedatectl set-ntp no 关闭

hostnamectl set-hostname 新的主机名 永久修改主机名 centos7

hostname 查看有没有修改成功

localectl 查看当前系统的语言信息

localectl list-locales 当前系统支持哪些语言

localectl list-locales LANG=zh_TW.utf-8 设置当前系统语言

程序用户,专门用来执行某个程序 ps aux 查看信息

pgrep 查看服务的进程号 例子:pgrep -l log pstree

and = &

命令行 & 直接调到后台去运行

Ctrl+Zn 调到后台后停止状态

fg 将后台程序调到前台

bg 将后台停止状态的程序回复到后台运行

终止进程: ctrl+c 键 强行终止

kill 进程号(PID) 杀死进程 kill -9 进程号(PID) 强制杀死

killall 进程名称 杀死进程 killall -9 进程名称 强制杀死进程

pkill 进程名称 杀死进程 pkill -l 确定 -U 指定用户,杀死该用户运行的所有进程 -t 指定终端 -9 强制

总结: kill 是通过进程号(PID)来杀死进程的 killall通过进程名称来杀死 pkill可以通过多种路径去杀死进程

pkill可以用来剔除服务器登录的用户

who 查看当前登录的用户 pkill -kill -t pts/1(-U 用户名) touch /etc/nologin 让所有普通用户无法登录服务器

rm -f /etc/nologin

at,一次性计划任务 服务脚本名称:/etc/init.d/atd

at 时间 当天某个时间执行任务 at 时间 日期 某天日期某个时间执行该任务

at 几点几分 年月日

注:任务执行,是在后台执行,不会显示在前台。 所有,尽量将执行的结构写到文件中去。方便查看。

at> 任务命令(用绝对路径)

ctrl+d提交任务。

atq 等同于 at -l 查看设置的一次性计划任务

atrm 任务序号 删除任务。

anacron

which 要查找命令 查找这条命令的绝对路径

设置密码策略: chage -d 时间 用户名 设置最近一次修改密码的时间 chage -E 时间 用户名 设置用户的账号什么时候过期 chage -m 天数 用户名 设置密码最少使用天数 chage -M 天数 用户名 设置密码最大使用天数 chage -I 天数 用户名 设置密码过期后,再过多少天不改密码,到期密码失效。

chage -W 天数 用户名 设置过期前几天警告修改密码 注:99999,永不过期

chage -l 用户名 查看用户和密码的信息

getent passwd 用户名 查看账户的信息 getent shadwn 用户名 查看账户的密码

chage -d 0 用户名 强制下一次登录改密码

chage -m 7 用户名

chage -M 30 用户名 到30天提醒修改密码

~/.bash_profile 针对当前登录用户

/etc/profile 针对所有用户

vi /etc/profile HISTSIZE=1000 记录历史命令的条数

/usr/bin/rm -f ~/.bash_history 清除历史命令(rm -f ~/.bash_history 清除历史命令) clear

export TMOUT=600 超时自动断开远程连接

history -c 清除历史命令

su 切换用户 格式:su - 用户名 注:有“-”时,同时切换用户的shell环境,切换到当前登录用户的家目录中去

没有时,仅切换身份,不切换用户环境

密码验证: 1、root——》任意用户 不需要输入密码 2、任意用户——》其他用户 ,需要输入密码

http://www.openwall.com/john/

pam配置文件结构:(位置:/etc/pam.d/) 过程: 每一行都是一个独立的认证过程 每行可以分为三个字段: 认证类型 控制类型 pam模块与其参数

认证类型: 1、认证管理(auth)
接受用户和密码,进而对用户的密码进行认证 2、账户管理(account) 检查用户是否允许登录系统,是否过期,登录是否有时间限制 3、密码管理(password) 主要用来修改用户密码 4、会话管理(session) 主要是提供对会话的管理和记账

控制类型:用于PAM验证类型的返回结果 1、required 验证失败时任然继续,但返回fail,只有返回成功才能通过认证。 2、requisite 验证失败立即借宿整个验证过程。 3、suffcient 验证成功时,立即返回,不在继续,否则忽略结果继续认证 4、optional 不用与验证,只显示信息(普遍用于session类型) 5、include 使用其他配置文件中同样功能的额相关定义来进行检查

su 的缺点是: 切换用户的时候,必须知道目标用户的密码。

sudo

既可以让普通用户拥有一部分管理权限,又不用将root密码告诉他人

localhost本机

多个命令之间以逗号“,”作为分隔

命令使用绝对路径。 当有多个用户的时候可采用别名方式去授权 别名一定要大写

User_Alias U=lq,tom,jack...... 正对用户和组设置别名 Uost_Alias H=localhost,192.168.80.100....对主机设置别名 //ALL代表所有 Cmnd_Alias C=/usr/bin/mount,/usr/bin/umount...对命令设置别名

U H=C

Grub限制:(单用户模式) 1、给Grub设置明文密码 vi/etc/grub.d/10_linux 末尾 cat <<EOF

set superusers="jack"

grub2-mkconfig - /boot/grub2/grub.cfg 生成新的grub文件

2、给Grub设置加密密码

给jack授权,让jack可以执行/usr/bin/下的所有命令,但是除了mount和umount visudo vi /etc/sudoers

用户名 主机名(地址)=授予的执行命令

jack ALL=/usr/bin/*,!user/bin/mount,/user/bin/umount

急救模式: 重启系统 看到“VMware”界面,鼠标点进去,按Esc键 然后选择第三个“CD-ROM Drive”回车 再选择第三个“Troubleshooting”回车 选择第二个“Recue a CentOS system”回车后等待一段时间 看到“Please make a selection。。。”后输入“1”回车 再按回车 在“sh-4.2#”后面输入“chroot /mnt/sysimage” 在“bash-4.2#”后面输入“passwd” 或者echo “123” | passwd --stdin root回车

然后输入touch /.autorelabel

exit 退出shell环境

然后重启reboot

单用户模式:

重启系统 在启动菜单上 按e

找到Linux 16的那一行,在末尾处 即在"LANG=zh_cn.UTF-8"后面加上“init=/bin/sh”或者 rd.break

Ctrl+x 启动提示符

重新挂载/ 成可读可写 #mount -o remount,rw /

#touch /.autorelabel

#passwd 改密码

exit

exec /sbin/init ----------给GRUB设置密码-------- vi /etc/grub.d/10_linux

cat <<EOF set superusers="jack" password jack abc123 EOF

grub2-mkconfig -o /boot/grub2/grub.cfg #生成新的grub文件

然后重启生效

----------------以下是设置加密密码的配置---------

grub2-mkpasswd-pbkdf2 #生成密码加密

注意:密文从 grub.pbkdf2…… 开始复制

vi /etc/grub.d/10_linux

cat <<EOF

set superusers="jack"

password_pbkdf2 jack 密文 生成的密码加密

EOF

grub2-mkconfig -o /boot/grub2/grub.cfg #生成新的grub文件

然后重启生效

exec /sbin/init

yum install lrz* -y上传下载的工具

软链接: ln -s 源文件绝对路径 软链接目标文件的绝对路径

硬链接: ln 源文件 目标

弱口令检测 john

rz -E

yum install gcc gcc-c++ make -y

tar xf john-1.8.0.tar.xz -C /opt/

cd /opt/john-1.8.0/

cd src/

make clean linux-x86-64

useradd tom

passwd tom

cd /opt/john-1.8.0/run/

cp /etc/shadow ./shadow.txt
准备要破解的密码文件

./john shadow.txt 执行暴力破解

./john --show shadow.txt

查看已破解出的账户列表

使用密码字典文件去破解

./john --wordlist=./password.lst ./shadow.txt #破解记录会默认存放在john.pot文件中

对于密码的暴力破解,字典文件的选择很关键。只要字典文件足够完整,密码破解只是时间上的问题。

password.lst是John the Ripper 默认提供的字典文件 其中大概有3000多个常见的弱口令

--wordlist= 指定字典文件的位置,一遍对指定的密码文件进行暴力分析。

ext3、4下误删除文件 先添加一块硬盘

然后分区

格式化为EXT3、4并挂载

mkfs.ext4 /dev/sdb1

mkdir /data

mount /dev/sdb1 /aa

extundelete安装

安装依赖的软件包(必须安装) yum install e2fsprogs* -y

yum install gcc gcc-c++ make -y

tar xf extundelete-0.2.4.tar.bz2 -C /opt

cd /opt/extundelete-0.2.4/

./configure (--prefix=/usr/local/extundelete)

make && make install

extundelete -V


extundelete version 0.2.4

libext2fs version 1.41.12

Processor is little endian.


出现以上内容,说明安装成功。

cd /aa

在/aa目录中,上传或者放置一些有内容的文件或目录

rm -rf *

全部删除

umount /aa

查看看文件 extundelete /dev/sdb1 --inode 2

注:一般一个分区挂载到一个目录下时,这个”根”目录的inode值为2

我们为了查看根目录所有文件,所以查看分区inode为2的这个部分

恢复指定的文件 注: 默认被删文件会恢复到当前目录下的RECOVERED_FILES目录中去

extundelete --restore-file pic.jpg /dev/sdb1

ls RECOVERED_FILES/

完全恢复设备上所有文件

extundelete --restore-all /dev/sdb1

注:这里完全恢复并不会把之前恢复的pic.jpg文件覆盖掉,而是重命名为pic.jpg.v1

注:在centos6里面可用于ext4文件恢复 在centos7只能用于ext3文件恢复

网络扫描NMAP

Nmap即Network Mapper,它是在免费软件基金会的GNU General Public License (GPL)下发布的。

其基本功能有:探测一组主机是否在线;扫描主机端口,嗅探提供的网络服务;判断主机的操作系统。

	makefile

软件下载后,执行configure、make和make install三个命令,将nmap二进制码安装到系统上,就可以执行nmap了。

是一个强大的端口扫描类安全评测工具。被设计为检测主机数量众多的巨大网络,支持ping扫描、多端口检测、OS识别等多种技术

使用NMAP定期扫描内部网络,可以找出网络中不可控的应用服务,即使关闭不安全的服务,减小安全风险。

官网下载:http://nmap.org/download.html

或下载包

rpm -vhU http://nmap.org/dist/nmap-* rpm -vhU http://nmap.org/dist/zenmap-*

yum install nmap -y

用法: nmap 扫描类型 选项 目标

扫描类型: -sS TCP SYN扫描(半开):只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接,否则目标端口没有开放。

-sT TCP连接扫描:这是一个完整的TCP扫描方式,用来建立一个TCP连接,如果成功则认为目标正在监听服务,否则目标端口没有开放。

-sF TCP FIN扫描:相当于发送一个断开的请求,开放的端口会忽略,关闭的段看看会回应RST数据包。许多防火墙对SYN数据包只进行简单过滤,而忽略了其他形式的TCP攻击包。

可间接检查防火墙的安全性 (用于穿透防火墙,进行攻击)

-sU UDP扫描:探测目标主机提供哪些UDP服务

-sP ICMP扫描:类似于ping检测,快速判断目标主机是否存活,不做其他扫描

-P0 跳过ping检查:这种方式认为所有的目标主机使存货的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。

例子: nmap 127.0.0.1 检查本机开放了哪些常用的TCP端口、UDP端口

nmap -p 21(端口号) 192.168.80.105

查看指定端口的服务有木有开启

nmsp -n -sP 网段

查看网段中存活的主机

日志管理 目标: 1、日志的管理 2、日志服务器的配置 3、NTP服务器的设置

学会提问: 1、我在做什么 2、我要实现什么样的效果,而我的结果是什么 提供结果对比 3、报错信息是什么 4、日志怎么显示的。

如何解决问题? 1、定位问题 通过查看日志来实现 2、解决问题 一、日志 遇到报错,解决问题的方法: 1.看报错信息 2.查看日志

在linux里日志的管理是由rsyslogd(5之前版本里使用syslog)。

即使最小化安装,此服务都是开启的,而且是开机自动启动的。

运行的时候需要读取本身的配置文件: ls /etc/rsyslog.* /etc/rsyslog.conf

/etc/rsyslog.d: gluster.conf.example listen.conf

注:以“.conf”结尾的文件就是配置文件。

一般通常查看/etc/rsyslog.conf这个配置文件。

这是模块,不同模块提供不同的的功能,后面是相关功能介绍

保持默认值

条目,这是重点关注的。

格式:事件.级别 file(文件)

事件:系统里内置很多种事件 每种事件里都有一个级别。 一共有以下几种级别:

从左往右,越来越低,最低级别是info,debug是用于测试 。

做开发可以自己定义。

事件中内置级别大于事件后面跟随的级别,则此事件就会被记录到文件中。小于后面级别,则不会记录到文件中。

所有日志设备的info级别日志都写入/var/log/messages文件,mail、authpriv、cron这三个日志设备除外,他们会写入各自的日志文件

注:其中*是通配符,代表任何设备;none表示不对任何级别的信息进行记录。

1、将authpirv设备的任何级别的信息记录到/var/log/secure文件中,这主要是一些和验证、权限使用相关的信息。 authpriv.* /var/log/secure 例如:被人暴力登录,暴力攻击等等。

2、//将mail设备中的任何级别的信息记录到/var/log/maillog文件中,这主要是和电子邮件相关的信息。 mail.* -/var/log/maillog 注:“-”异步,

同步sync:当往内存写东西时,内存同时往硬盘里写入。 异步async:先往内存写,然后在往硬盘写

异步的效率比同步的效率高。 异步的内存要大才行。

3、//将cron设备中的任何级别的信息记录到/var/log/cron文件中,这主要是和系统中定期执行的任务相关的信息。 cron.* /var/log/cron

4、//将任何设备的emerg级别的信息发送给所有正在系统上的终端用户。 .emerg 恐慌状态,比如宕机、系统崩溃等 :omusrmsg: 对所有的在线终端发送警告信息。

logger -p local5.emerg ‘1111111111’ 模拟测试,定义一个事件等级。

5、//将uucp和news设备的crit级别的信息记录到/var/log/spooler文件中。 uucp,news.crit /var/log/spooler

6、//将和系统启动相关的信息记录到/var/log/boot.log文件中。 local7.* /var/log/boot.log

例子:local5.debug /var/log/xx.log 定义当local5级别大于debug时,记录到文件/var/log/xx.log

模拟事件发生:logger -p local.debug ‘系统正在崩溃’

/var/log

如何去搭建一个日志服务器? 把所有主机的日志发送到一台日志服务器上。 客户端: local6.debug @192.168.80.105

systemctl restart rsyslog

服务器: local6.debug /var/log/xx.log

systemctl restart rsyslog

模拟测试:logger -p local.info “xxxxxxx” 但是日志中没有 因为服务器没有接受客户端的信息,所以没有记录到日志中。

通过UDP或者TCP的方式来接收。把前面的#号删除

systemctl restart rsyslog

如果多台的话,文件就会放在一个文件里,这样就成了一个大杂烩了。

vi /etc/hosts 192.168.80.101 www.bb.com bb 192.168.80.102 www.cc.com cc

服务器:

:fromhost,isequal,”www.bb.com” /var/log/aa.log :fromhost,isequal,”www.bb.com” ~ //到此,匹配结束

:fromhost 日志来自哪个主机的
isequal 等于某个值 “” 主机名(完整的主机名) 文件名 放到某个日志文件中

有几台客户端,就添加几次以上两条的规则。

日志匹配规则,是从上往下匹配。

如何查看日志?

查看系统中的所有事件:journalctl
按q退出

journalctl -f 查看最新的事件日志 journalctl -p err 指定查看级别的事件日志。 journalctl --since “2018-08-14 20:00:00” 从什么时候开始至今 journalctl --since “2018-08-14 20:00:00” --until “2018-08-14 20:30:00” 查看从什么时候开始到什么时候结束的日志

时间

修改时间: date 122110002018 修改时间 hwclock -s 还原原本时间

timedatectl timedatectl list-timezones 时区列表 timedatectl set-time 11:43:00 修改时间

方法一:timedatectl set-timezone Asia/Shanghai 更改时区

所有时区的记录,都是记录到/etc/localtime,全是乱码 方法二: cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

注:/usr/share/zoneinfo目录中是全球的时区,修改哪个时区直接覆盖/etc/localtime就行。

有的服务对时间的要求比较严格。

配置NTP服务器

systemctl is-active chronyd //查看chronyd是否在运行 systemctl stop chronyd.service //关闭chronyd systemctl disable chronyd.service //设置开机不启动

yum install ntp*

vim /etc/ntp.conf 记录的是NTP的参数

晶体芯片的时间跳动频率

设置一些权限。默认即可,noquery不允许别人向自己查询。 restrict 192.168.80.0 mask 255.255.255.0 nomodify notrap 允许192.168.80.0向本身查询时间 说明: restrict 限制 nomodify 不允许修改 notrap 不允许陷阱操作 nopeer 不允许与别人建立相等的关系 noquery 不允许别人向本身查询

注:没有写权限,就是所有的权限。

server后面跟上层时间服务器,iburst加速同步

server 127.127.1.0 iburst 使用自己本身的时间

127.127.1.0 回环地址,代表主板芯片的地址。

客户端: systemctl is-active ntpd systemctl stop ntpd ntpdate 192.168.80.100 与80.100 保持同步

图形化界面 yum install system-config-date -y

system-config-date &

“在网络上同步日期和时间” 添加时间服务器IP地址 确定即可

timedatectl set-ntp true system-config-date &

点击空白处,就开始取保持同步。

chornyc sources -v

查看是否同步成功,成功有个*号。

第三本书 yum provides 要装的命令 -y 装命令

netstat -anptu | grep 服务名称/端口号 //检测服务或端口有没有开启 nslookup 测试DNS域名解析 ifconfig 修改网卡的地址、状态 设置网络接口的ip地址、子网掩码 ifconfig 接口名 ip地址 [netmask 子网掩码] ifconfig 网络接口 ip地址[/掩码长度]

禁用或者重新激活网卡 ifconfig 网络接口 up ifconfig 网络接口 down

设置虚拟网络接口 ifconfig 接口名:序号 ip地址

/etc/sysconfig/network-scripts/目录下的 ifcfg-ens33:第1块以太网卡的配置文件

设置网络参数 临时配置 固定配置

重启network网络服务 systemctl restart network

禁用、启用网络接口 ifdown ens33 ifup ens33

/etc/resolv.conf 文件 保存本机需要使用的DNS服务器的ip地址

route 设置路由记录 systemctl resrt network

route 查看路由表条目

route add -net 192.168.3.0/24 gw 192.168.4.254 //添加静态路由 使本机访问另一个网段192.168.3.0/24的数据包都发给192.168.4.254

route del default gw 192.168.4.1 //删除默认网关记录192.168.4.1

route add default gw 192.168.4.254 //添加新的默认网关记录192.168.4.254

route -n 可以将路由记录中的地址显示为数字形式

netstat 查看网络连接情况 -a 显示当前主机中所有活动的网络连接信息 -n 以数字的形式显示相关的主机地址、端口信息 -r 显示路由表信息 -l 显示处于监听(Listening)状态的网络连接及端口信息 -t 查看TCP协议相关的信息 -u 查看UDP协议相关的信息 -p 显示与网络连接相关的进程号、进程名称信息(该选项需要root权限)

主机名配置文件 CentOS6 vi /rtc/sysconfig/network CentOS7 /etc/resolv.conf

永久修改主机名的配置文件,centos6和centos7(centos6的网卡编号:eth数字cents7的网卡编号:ens数字 RHEL7的网卡编号:eno数字) 6:/etc/sysconfig/network HOSTNAME=www.aa.com 7:/etc/hostname www.aa.com

192.168.0.1 进入DHCP DHCP的分配方式 自动分配 手动分配 动态分配

DHCP租约过程

客户机请求ip地址,发送一个DHCP Discover广播信息

服务器响应客户机,发送DHCP Offer单播信息给客户机,信息里面包含可提供的ip地址

客户机选择ip地址,发送DHCP Request广播信息

服务器确定租约,发送DHCP ACK单播确认

systemctl stop firewalld关闭防火墙 setenforce 0

如何分配指定的ip地址给指定的对象 host 自定义名称{ hardware ethernet 设备的mac地址; fixed-address 指定分配的ip地址; }

DHCP

第一步:安装

rpm -ivh /mnt/Packages/dhcp-4.2.5-58.el7.centos.x86_64.rpm ----安装DHCP软件包

第二步:修改配置文件

rpm -qc dhcp ----查看dhcp的配置文件

rpm -ql dhcp | grep dhcpd.conf.example 查找dhcp服务的配置模版文件 /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example

cp -rf /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

vi /etc/dhcp/dhcpd.conf ----修改dhcp配置文件,全局配置

subnet 192.168.80.0 netmask 255.255.255.0 { ----网段声明 subnet +网段 netmask+子网掩码 //定义子网网段的配置项 range 192.168.80.100 192.168.80.200; ----设置用于分配的ip地址池 option routers 192.168.80.1; ----设置客户机的默认网关 option domain-name-servers 2.2.2.2, 3.3.3.3; ----配置DNS 服务器 default-lease-time 600; ----默认租约时间
max-lease-time 7200; ----指定最大租赁时间长度 } #host boss { ----主机声明

hardware ethernet MAC地址 ----指定其它pc(打印机)mac地址

fixed-address 192.168.80.188; ----固定地址

#}

第三步:启动

service dhcpd start ----启动

netstat -anpu | grep dhcp //67端口需要工作

service firewalld stop ----关闭防火墙

用客户端测试地址获得。

windows 7版本,Fn+R cmd

ipconfig /release ----解放Ip地址池 ipconfig /renew ----重建

cat /var/lib/dhcpd/dhcpd.leases 查看租约信息

service dhcpd restart 重启才生效

学习: 在centos里面共享一个目录,让Windows系统来使用目录

解决方法:samba

作用:实现Linux系统与Windows系统之间的文件共享服务。

安装samba服务:

systemctl stop firewalld //关闭防火墙

setenforce 0 //关闭监控

mount /dev/cdrom/mnt/ //临时挂载

yum install samba* -y //安装samba

samba服务的主配置文件:vi /etc/samba/smb.conf

[global] //全职配置,对所有的以下内容都有影响 workqroup = SAMBA //定义工作组 security = user //安全验证 //安全验证有以下方式: 1、share:客户端访问本机无需密码(密名访问) 2、user:验证来访主机提供的用户名和密码才可以访问本机(身份验证) 3、server:使用独立的远程主机来验证来访主机提供的密码(集中管理用户) 4、domain:使用域控制器来进行×××的。

passdb backend = tdbsam //定义用户后台的类型 共3种:(3个添加Samba的命令) smbpasswd 使用smbpasswd命令为系统用户设置Samba服务程序的密码 tdbsam 创建数据库文件并使用pdbedit命令建立Samba服务程序的用户 ldapsam 基于LDAP服务进行账户验证

server string = Samba server version %v //服务器的介绍信息 %v代表显示Samba版本号

log file = /ver/log/samba/log.%m //定义日志文件的存放位置和名称,其中%m代表来访的主机。

max log size = 50 //定义最大日志文件大小,单位为kb

printing = cups //打印机的设置 printcap name = cups //打印机的设置 load printers = yes //设置在Samba服务启动时是否共享打印机设置 cups options = raw //打印机的选项

[homes] //家目录共享参数,设置Linux用户的默认登录目录 comment = Home Directories //描述信息 valid users = %S, %D%W%S //有效用户 browseable = No //指定共享信息是否在“网上领居”中可见 read only = No //定义是否只读 inherit acls = Yes
writable = yes //允许写入操作,既可以创建删除此目录中的内容 write list = jack,tom //用户写权限的用户

[printers] //打印机共享参数 comment = All Printers path = /var/tmp //linux系统的共享目录的绝对路径 public = yes //定义是否所有人可见,等同于 guest ok = yes 是否允许所有人访问此目录,默认是允许 printable = Yes create mask = 0600 //文件权限,共享目录之后,用户在此目录中创建文件后的权限 针对文本文件 directory mask = 0755 //目录权限 针对目录(文件夹) hosts deny = 192.168.80.6 //拒绝某个主机访问Samba host allow = 192.168.80.0 173.11.0.0 //允许某些主机可以访问 browseable = No valid users =lq tom //只能允许那些用户访问Samba访问 只允许哪些用户访问此共享目录

useradd tom //创建tom

pdbedit -a tom //添加Samba程序用户 -a=add smbpasswd -a 系统用户 //添加Samba程序用户

pdbedit -L //查看已添加Samba程序用户

systemctl enable smb //重启Samba

共享目录的本身系统权限大于Samba服务设置权限

write list > read only > writable //权限排序

testparm //查看主配置文件中有没有语法错误

共享账号账户映射,提高Samba共享安全性 一个系统用户对应一个Samba用户, 多个Samba用户对应一个系统用户

samba访问限制: 1、针对Samba用户 valid users=lq tom @caiwu @renshi 注:限制组的成员,限制成员的公共组

2、针对ip地址 host allow = 192.168.80.100 允许 host deny = 192.168.80.90 拒绝

3、针对网段 host allow = 192.168.80.0/24 host deny = 192.168.90.0/24

windows: cmd——\主机ip地址

centos: smbclient -L //主机ip地址 -U Samba用户名%密码


[global]
	workgroup = MYGROUP
	server string = Samba Server Version %v
	log file = /var/log/samba/log.%m
	max log size = 50
	security = user
	passdb backend = tdbsam
	printers = yes
	cups options = raw
[homes]
	comment = Home Directories
	browseable = no
	writable = yes
[printers]
	comment = All Printers
	path = /var/spool/samba
	browseable = no
	guest ok = no
	writable = no
	printable = yes

-----------------以上是默认的samba配置文件------------

----------------------配置匿名共享---------------------
systemctl  stop firewalld
setenforce  0

vi /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0

vi /etc/fstab
/dev/cdrom  /mnt  iso9660  defaults  0  0

mount -a
---------------以上上配置yum仓库---------------
yum install -y samba

mkdir  /opt/aa

vi /etc/samba/smb.conf
security = share

[database]
comment = this is test file
path = /opt/aa
public = yes


testparm

systemctl start  smb
systemctl enable smb

测试:
windows:运行里面输入\\192.168.80.110


——————————配置用户密码验证——————————
vi /etc/samba/smb.conf
security = user

[database]
comment = this is test file
path = /opt/aa
public = yes
writable = yes

testparm  

useradd  -s /sbin/nologin jack 

--注意:SMABA用户是系统用户,但是密码不是系统密码,是SAMBA服务器的密码-

pdbedit -a -u jack 
pdbedit -L 

systemctl restart  smb

测试:
windows:运行里面输入\\192.168.80.110
net use /d *    //清除微软系统的共享访问缓存,让用户可以切换其它账号登录
————————————————————————————
----------------以下是配置对共享目录的权限-------------
vi /etc/samba/smb.conf
security = share

[database]
comment = this is test file
path = /opt/aa
public = yes
read only = yes
writable = yes 
valid users = jack,tom   //可以通过  @test  加组名     只允许哪些用户访问此共享目录
write list = jack
directory mask = 0700 
create mask = 0640  
hosts deny = 192.168.80.6
hosts allow = 192.168.80.0  173.11.0.0  
  0可以省略,多个网段可以以空格做间隔符 


PS:  write list = ... > read only = yes > writable = yes

“;”是注释

只有某某有写权限,只需  write list = 用户或组名(基本组)


 //注意一下系统目录本身的权限对用户是否有读写执行



————————————————————————————

----------------------配置共享帐号映射(别名)---------
vi /etc/samba/smbusers
hunter = sunboy player

vi /etc/samba/smb.conf

[global]
username map = /etc/samba/smbusers

systemctl restart smb

-----------------------------------------------------

------------------windows共享目录,linux去连接-------
yum  install  cifs-utils  -y
yum  install  samba-client  -y

smbclient -L 192.168.80.6
smbclient -L 192.168.80.6 -U jack

mount.cifs //192.168.80.6/ISO-all /media/  匿名共享直接挂载 要有mount.cifs命令   

yum  provides mount.cifs

mount -o username=jack //192.168.80.6/ISO-all /media/

-----------------以上临时的-------------

vi  /etc/fstab
//192.168.80.10/共享文件  /opt/bb cifs  username=administrator,password=123   0   0
-----------------------永久挂载-----------------
vim  auth.smb
username=jack
password=123
domain=MYGROUP

vi  /etc/fstab
//192.168.80.110/test  /opt/dd  cifs  credentials=/root/auth.smb  0  0

注意:cifs:是samba的共享文件的格式


设置共享账户映射的步骤
vi /etc/samba/smb.conf
[global]模块最下方添加以下内容
username map = /erc/samba/smbusersss











ftp用户类型
1、匿名用户:ftp、anonymous    不需要密码
2、本地用户:就是本机的系统用户,useradd创建的   需要密码,是一个系统用户
3、虚拟用户:不直接使用系统用户账号        需要密码,是系统用户映射出的用户



安装ftp:
yum  install  vsftpd  -y


ftp主配置文件:vi /etc/vsftpd/vsftpd.conf

ftp 的根目录:/var/ftp   默认共享的目录


ftp三种访问方式:
1、浏览器:ftp://ip地址
2、我的电脑界面最上方空白处输入:ftp://ip地址
3、cmd——ftp  ip地址


----------常用配置项-----------

listen=YES:是否以独立运行的方式监听服务
listen_address=192.168.4.1:设置监听的 IP 地址
listen_port=21:设置监听 FTP 服务的端口号
write_enable=YES:是否启用写入权限(影响整个服务器)
download_enable=YES:是否允许下载文件
userlist_enable=YES:是否启用 user_list 列表文件
userlist_deny=YES:是否禁用 user_list 中的用户
max_clients=0:限制并发客户端连接数,就是最多允许多少用户同时登录
max_per_ip=0:限制同一 IP 地址的并发连接数,就是一个IP最多同时下载几个文件



注:ftp默认有下载权限

vsftpd服务默认开启匿名用户模式:
需要做的就是开放匿名用户的上传、下载的权限,以及让匿名用户去创建、删除、更改文件的权限

anonymous_enable = YES 	 //启用匿名访问
anon_umask=022       	 //匿名用户所上传文件的权限掩码
anon_root=/var/ftp      	 //匿名用户的FTP根目录
anon_upload_enable=YES 	 //不管匿名、本地或者虚拟用户,若要允许上传文件,必须启用
anon_mkdir_write_enable=YES  //允许创建目录
anon_other_write_enable=YES  //开放其他写入权限,允许匿名修改目录,删除目录
anon_max_rate=0  		   //限制最大传输速度(字节/秒)

注:ftp目录系统本身的权限大于ftp配置文件设置的权限。



本地用户模式:

local_enable=YES  //是否启用本地系统用户
local_umask=022  //本地用户所上传文件的权限掩码
local_root=/var/ftp  //设置本地用户的ftp根目录
chroot_local_user=YES  //是否将用户禁锢在主目录
local_max_rate=0  ///限制最大传输速度(字节/秒),等于0时不限速
write_enable=YES  //设置可写权限,对所有人生效

限制某些用户登录ftp    userlist_deny=YES




虚拟用户模式:最安全的一种模式

--------被动模式配置项--------

pasv_enable=YES          启用被动模式
pasv_min_port=24500      被动模式最小端口号
pasv_max_port=24600      被动模式最大端口号


--------虚拟用户配置项-----------
cd /etc/vsftpd      
vi vusers.txt        ----建立文本格式的虚拟用户用户名和密码列表

奇数行用户名
偶数行密码

db_load -T -t hash -f vusers.txt vusers.db    ----将文本格式vusers.txt转换为数据库文件vusers.db
chmod 600 vusers.*      ----将生成的数据文件、文本文件权限设为600(只有超级用户可读可写)安全性    
useradd -d /srv/ -s /sbin/nologin vuser   ----创建家目录在/srv,不可登录服务器的的虚拟用户映射的系统用户vuser

vi /etc/pam.d/vsftpd.vu      ----建立支持虚拟用户的PAM认证文件
#%PAM-1.0
auth          required     pam_userdb.so db=/etc/vsftpd/vusers   
account    required     pam_userdb.so db=/etc/vsftpd/vusers

vi vsftpd.conf   ----设置配置文件

#pam_service_name=vsftpd
……
guest_enable=YES       ----启用虚拟用户登录
guest_username=vuser   ----把虚拟用户账号映射到系统用户vuser
pam_service_name=vsftpd.vu  ----指定虚拟用户PAM认证文件

systemctl restart vsftpd

filezilla
530,为pam认证文件有错误
500,为用户家目录不可有写权限;、
550,为ftp服务器权限
553,为系统文件权限

测试……

vi /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vdir //为虚拟账号建立单独的配置文件存放的目录

vi test01 //以虚拟用户自己的用户名命名,就是独立配置文件。

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_max_rate=0
local_root=/opt/t01  //设置虚拟用户自己的家目录    anon_root=/opt/t01  (centos6.5中应用)
max_per_ip=2 //设置虚拟用户同时下载文件数 (不管用)


虚拟用户用的配置项,用的是匿名用户的配置项,处理local_root之外7版本
6版本里面定义根目录是anon_root


------------以下是详细的安装配置步骤---

 rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm

cd /etc/vsftpd/
cp vsftpd.conf vsftpd.conf.back

service vsftpd start

/var/ftp/ 这是FTP服务器的默认工作目录。

登录:在CMD里 ftp 192.168.80.181

在文件夹里或者浏览器里:ftp://192.168.80.181/




tftp   简单文件传输协议
UDP协议来工作
yum install tftp-server -y
vi /etc/xinetd.d/tftp主配置文件位置










www.baidu.com.

“.”代表根服务器
全球13台,最权威的。
10台在美国,1台在瑞典,1台在英国伦敦,1台在日本。

顶级域   跟服务器
一级域(域名)
.com(商业组织)
.org(非营利组织)
.gov(镇府部门)
.net(网络服务商)
.edu(教研机构)
.pub(公共大众)
.cn(中国国家顶级域名)
.uk(英国国家顶级域名)

二级域

dns服务三大配置文件:
主配置文件: /etc/named.conf   
区域配置文件: /etc/named.rfc1912.zones
数据配置文件存放目录:/var/named/

dns查询的方式:
递归查询:dns服务器在收到用户请求时,必须向用户返回一个准确的结果信息。如果服务器没有存储与之对应的信息,则询问其他服务器,然后将返回的查询结果提交用户。

迭代查询:dns服务器在收到用户请求时,并不直接回复查询结果,而是告诉另一个服务器的地址,用户在向这台服务器提交请求,这样依次反复,知道返回查询结果。




vi /etc/named.conf

options {     //全职配置
   listen - on  port  53  {  any;  };  //定义监听的地址和端口   any(所有)
listen - on -v6 port  53  {  ::1;  };  //ipv6
directory     “/var/named”;   //定义解析的资源记录配置文件的储存位置
dump - file    “/var/named/data/cache_dump.db”;  //缓存备份文件
statistics - file  “/var/named/data/named_stats.txt”;  //状态文件
memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };

recursion  yes;   //允许递归查询

dnssec - enable  yes;  //启用dns安全策略
dnssec - validation yes;  //启用dns的valid安全策略

bindkeys - file  “/etc/named.iscdlv.key”;  //指定密钥文件

managed - keys - directory  “/var/named/dynamic”;   //管理密钥的工作目录

pid - file  “/run/name/named.pid”;    //指定进程号pid文件

session - keyfile  “/run/named/session.key”;
};   //会话密钥文件

logging  {   //日志设置
channel  default_debug  {   //设置通道为debug调试模式
file  “data/named.run”;   //文件为动态
};
};

zone  “.” IN  {   //声明根域设置
type  hint;   //类型hint是跟域,类型有hint.master,slave
file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";







vi  /etc/named.rfc1912.zones
zone  “hello.com”  IN  {  声明区域名,也称为区域设置,正向解析区域
type   master;   //类型,主域名服务器
file  “hello.com.zone”;  指定数据配置文件的文件名,默认存放在/var/named
allow - update  {  any;  };   允许那些客户机动态更新解析信息
};


zone  “80.168.192.in - addr.arpa”  IN  {  
type   master;   
file  “hello.com.local”;  
allow - update  {  any;  };   //允许其他人更新
also-notify { any; };  //允许其他人更新
};

dns三大服务器
主域名服务器 (master)
从域名服务器(slave)
缓存域名服务器

ntpdate  timel.aliyun.com  //同步时间

service start  ntpd //启动





DNS服务器主从同步:
首先同步时间:
在主域名服务器上:
yum install ntp -y

vi /etc/ntp.conf 
restrict 192.168.80.0 mask 255.255.255.0 nomodify notrap 
server 127.127.1.0
fudge 127.127.1.0 stratum 8

service ntpd start   //启动
systemctl enable ntpd   //开机自启

从域名服务器上:
yum install ntp  -y

ntpdate  192.168.80.100

搭建主从同步:

在主域名服务器上:
vi /etc/named.conf
修改以下内容:
listen-on port 53 { any; };
allow-query     { any; };


vi /etc/named.rfc1912.zones

zone "hello.com" IN {
        type master;
        file "hello.com.zone";
        allow-update { 192.168.80.101; };
        also-notify { 192.168.80.101; };
};

zone "80.168.192.in-addr.arpa" IN {
        type master;
        file "hello.com.local";
        allow-update { 192.168.80.101; };
        also-notify { 192.168.80.101; };
};

cd /var/named/

cp -p named.localhost hello.com.zone

vi hello.com.zone

$TTL 1D
@       IN SOA  hello.com. 18013882536.qq.com (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.hello.com.
dns     IN A    192.168.80.100
www     IN A    192.168.80.101
ftp     IN A    192.168.80.102


cp -p hello.com.zone hello.com.local

vi hello.com.local

$TTL 1D
@       IN SOA  hello.com. 18013882536.qq.com (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.hello.com.
100     IN PTR  dns.hello.com.
101     IN PTR  www.hello.com.


systemctl start named


在从域名服务器中:

vi /etc/named.conf
修改以下内容:
listen-on port 53 { any; };
allow-query     { any; };


vi /etc/named.rfc1912.zones

zone "hello.com" IN {
        type slave;
        masters { 192.168.80.100; };
        file "slaves/hello.com.zone";
};
zone "80.168.192.in-addr.arpa" IN {
        type slave;
        masters { 192.168.80.100; };
        file "slaves/hello.com.local";
};

systemctl start named


cat hello.com.zone


注:如果从域名服务器同步过去的数据配置文件出现乱码,使用以下方法解决:
vi  /etc/named.conf
masterfile-format text ;

测试能否实时同步:
在主域名服务器中添加新的解析记录,并更改序列号
查看从域名服务器是否实时同步该数据








缓存域名服务器:
192.168.80.100  上一级dns服务器
192.168.80.101   缓存域名服务器
192.168.80.102   客户端


分离解析域名服务器:
一个网址对应几个ip地址,不同的客户端访问,访问的是不同的ip地址。


环境介绍:
一套dns服务器,
192.168.80.100   国内
192.168.90.100   国外
客户端1  国内:192.168.80.101
客户端2  国外:192.168.90.101

服务三部曲:  安装--》修改配置文件--》启动



指定dns服务器
vi  /etc/resolv.conf
nameserver  dns服务器ip地址

vi  /etc/sysconfig/network-scripts/ifcfg-ens32
DNS1=dns服务器ip地址


检查dns配置文件的语法错误
named-checkconf
named-checkzone


缓存域名服务器:
vi  /etc/named.conf
在options下面添加:
forwarders { 192.168.80.100; };  //放在options对所有区域有影响
//放在zone “域名”  IN  {只对当前区域生效
注,可写多个上级dns服务器地址

将以下两行:
dnssec-enable yes;
dnssec-validation yes;

将"yes"改为"no"

systemctl  start named


dns分离解析:
vi /etc/named.conf
listen-on port 53 { any; };
allow-query     { any; };

//zone "." IN {
//      type hint;
//      file "named.ca";
//};


vi /etc/named.rfc1912.zones

acl "china" { 192.168.80.0/24; };
acl "american" { 192.168.90.0/24; };

view "china" {
        match-clients { "china"; };
        zone "xiaoshuo.com" IN {
                type master;
                file "xiaoshuo.com.zone";
                };
};

view "american" {
        match-clients { "american"; };
        zone "xiaoshuo.com" IN {
                type master;
                file "xiaoshuo.com.local";
                };
};

cd /var/named/

cp -p named.localhost  xiaoshuo.com.zone

vi xiaoshuo.com.zone

$TTL 1D
@       IN SOA  xiaoshuo.com. 18013882536.163.com (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.xiaoshuo.com.
dns     IN A    192.168.80.100
www     IN A    192.168.80.100


cp -p xiaoshuo.com.zone xiaoshuo.com.local

vi xiaoshuo.com.local

$TTL 1D
@       IN SOA  xiaoshuo.com. 18013882536.163.com (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.xiaoshuo.com.
dns     IN A    192.168.90.100
www     IN A    192.168.90.100

named-checkconf

systemctl start named


测试验证







yum仓库:
局域网yum仓库    baseurl=ftp://
网络上yum仓库    baseurl=http://
本地yum仓库     baseurl=file://



192.168.80.100  yum仓库服务器,提供软件下载与安装


192.168.80.101  yum仓库

yum  provides 你要查找的文件或命令     //查找软件包信息






远程访问及控制





 rpm -qa | grep openssh
openssh-server-7.4p1-11.el7.x86_64   //ssh服务器
openssh-7.4p1-11.el7.x86_64
openssh-clients-7.4p1-11.el7.x86_64   //ssh客户端软件

 vi /etc/ssh/sshd_config    //ssh配置文件

Port 9922    默认端口号,为了其安全一般要更改为其他端口
#AddressFamily any   说明要监听任意地址
#ListenAddress 0.0.0.0  监听本机所有的IPv4的ip
#ListenAddress ::   监听本机所有的ipv6的地址
Protocol 2   监听的协议版本
# HostKey for protocol version 1   //说明key的协议版本
SyslogFacility AUTHPRIV        //使用AUTHPRIV 记录日志  
#LogLevel INFO    //log日志级别
                
                
# Authentication:            //认证相关
#LoginGraceTime 2m    //登陆宽限时长  默认2分钟不登录自动关闭
#PermitRootLogin yes    //是否支持管理员直接登陆,no禁止root用户登录
#StrictModes yes    //是否使用严格模式 (严格检查用户的某些相关信息)
#MaxAuthTries 6        //最大尝试次数  (6次以后终端断开)
#MaxSessions 10        //最大并发允许链接数 (超过 将拒绝)
#RSAAuthentication yes    //是否支持RSA密钥认证
#PubkeyAuthentication yes    //是否支持公钥认证
#AuthorizedKeysFile     .ssh/authorized_keys  //默认保存口令的文件
#PermitEmptyPasswords no        //是否支持空密码登陆
PasswordAuthentication yes     是否密码验证
                
UsePAM yes //是否使用PAM 认证( 是一种统一认证框架)
X11Forwarding yes     //是否转发图形界面请求 (可以打开远程服务器图形界面)
Subsystem       sftp    /usr/libexec/openssh/sftp-server  
#UseDNS yes        //是否允许DNS反解  比较浪费时间一般更改为no
                    /etc/ssh/ssh_known_hosts  //保存已经认可主机的文件

AllowUsers  jack tom@192.168.80.110
DenyUsers   lisa simon@192.168.80.111


客户端配置文件/etc/ssh/ssh_config 主要参数详解

    客户端配置文件时登陆别人的ssh使用的
    # Host *        //表示连接所有主机
    #   Port 22        //默认连接端口
    #   Cipher 3des        //加密时使用的加密机制
    #   StrictHostKeyChecking ask    //严格的主机秘钥检查 即第一次连接时是否询问





构建密钥对验证的SSH体系: 无密码输入登录远程连接
在客户端用普通账号创建密钥对
将公钥文件上传至服务器
在服务器中导入公钥文本
在客户端使用密钥对验证

操作如下:
--------客户端------------
ssh-keygen -t rsa    //生成以rsa算法密钥对
cd .ssh/
ls 
scp id_rsa.pub root@192.168.80.100:/root

注:id_rsa  私钥
    id_rsa.pub  公钥

-------SSH服务器------用普通用户去登陆服务器。
mkdir /home/test2/.ssh
cat id_rsa.pub > /home/test2/.ssh/authorized_keys


----客户端------
ssh test2@192.168.80.100

ssh-copy-id -i 公钥文件 用户@目标主机地址  // 验证密码后,会将公钥自动添加到目标主机usrer宿主目录下.ssh/authorized_keys文件结尾
其文件归属全为user

ssh-keygen -t rsa

ssh-copy-id root@192.168.80.101

注:客户端私钥不可丢失,不然其他人也可无密码登录服务器。

----------------------------------------------------------------------



TCP  Wrappers   访问控制保护机制

 tcp_wrapper只能对基于tcp协议的服务作访问控制,但并不是所有基于tcp协议的服务都能实现用tcp_wraper作访问控制。

配置文件:/etc/hosts.allow允许访问,白名单
	  /etc/hosts.deny 拒绝访问,黑名单

内容策略:   服务列表:客户机地址列表

sshd:   192.168.80.110,192.168.80.*

sshd:ALL

先检查hosts.allow,找到匹配则允许访问
否则再检查hosts.deny,找到规则拒绝访问
若两个文件中均没有匹配的策略,则默认允许访问



内置的访问控制列表:

ALL:所有的主机;

KNOWN:所有能被当前主机正确解析的主机名;

UNKNOWN:所有不能被当前主机正确解析的主机名;

PARANOID:正向解析和反向解析结果不一致所有主机;






yum







yum软件仓库

内网yum仓库:本地yum仓库(即以光盘镜像自带软件作为yum软件仓库)
	    
	    局域网yum仓库(ftp服务实现)

公网yum仓库(通过http实现)

----------本地yum仓库------------
cd /etc/yum.repos.d/   //进入到yum仓库的配置目录下

mkdir  bak   创建一个目录,用来放置centos7.4默认的yum设置

mv C* bak/   将以C开头的文件全部移动到bak目录下。

vi local.repo    //后面一定要跟.repo,因为yum只识别以.repo结尾的文件

[local]       //仓库唯一标识,避免与其他仓库冲突
name=local        //当前仓库名称说明
baseurl=file:///mnt      //指向仓库的路径,即url访问路径,可指向多个备用
enabled=1     //1,表示此仓库被使用;0,表示此仓库不被使用
gpgcheck=0   //0,不验证软件包。1,验证

gpgkey=file:///mnt/RPM-GPG-KEY-centos-release    //指定公钥文件地址
注:使用本地yum仓库,一定要将光盘挂载本地目录下,不然无法使用本地yum仓库

使用以下命令挂载光盘:

mount /dev/cdrom /mnt     手动临时挂载光盘,关机重启后就没有了。

df   //查看挂载信息


-------本地服务器yum仓库-----------------




----------搭建阿里云yum仓库-------------前提得能上网。

1、阿里云yum仓库
[Ali]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7


2、中科大
[mariadb]    
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos74-amd64/
gpgcheck=1
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB


本地与阿里云yum仓库,优先使用最新的服务


--------------------使用yum仓库去安装服务-------------------------------

yum clean all     清除所有仓库缓存

yum  makecache    重建仓库

yum repolist all  列出所有仓库

yum provides      根据特定条件搜索软件包

yum whatprovides */文件名    查看文件属于哪个软件包安装的

yum list   列出仓库中所有软件包

yum info   查看软件包信息

yum install   安装   跟-y的话,无需手动去确认是否安装。

yum reinstall   重新安装软件包

yum remove    卸载

yum update    更新   (需要联网)

yum check-update   检查可更新的软件包   (需要联网)

yum grouplist     查看组服务

yum groupinstall     安装组服务







NFS


NFS    Network File System   网络文件系统

其功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类unix系统间实现磁盘文件共享的一种方法。

NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的

NFS应用场景,适用于局域网中,常用于高可用文件共享,多台服务器共享同样的数据,可扩展性比较差,本身高可用方案不完善,取而代之的数据量比较大的可以采用MFS、TFS、HDFS等等分布式文件系统。


NFS体系至少有两个主要部分:

一台NFS服务器和若干台客户机

NFS的共享配置文件:/etc/exports

------------nfs服务器--------------------------------------

yum install -y nfs-utils     会自动安装rpcbind

mkdir -p /opt/wwwroot

vi /etc/exports    //NFS配置文件(空文件)
/opt/wwwroot	192.168.80.0/24(rw,sync,no_root_squash)
目录/opt/wwwroot共享给192.168.80.0/24网段,允许读写,同步写入

/var/ftp/pub 	192.168.80.110(rw) 192.168.80.120(ro)    //空格隔开



注:
第一列代表共享哪个目录
第二列代表允许哪个客户端去访问
第三列共享目录的一些权限设置
*	所有人
ro	只读
rw	允许读写
sync	同步写入
no_root_squash      当客户机以root身份访问时,赋予root权限(即超级用户保留权限)
		    否则,root用户所有请求映射成anonymous用户一样的权限(默认)

手动启动,先启动rpcbind,再启动nfs

systemctl start rpcbind
systemctl start nfs

netstat -anptu | grep rpcbind    显示UDP端口111

showmount -e  +IP地址 //查看发布的NFS共享目录


rpm -ql nfs-utils | grep show

--------------------客户端-------------------

yum install nfs-utils 

-------手动挂载NFS共享目录---------------

mount IP地址:共享目录名 挂载到的位置
例子:mount 192.168.80.100:/opt/wwwroot /var/www/html/
  
mount -t nfs   地址:共享目录名 挂载到的位置   //7以下版本

mount   //查看
tail -1 /etc/mtb  //查看挂载信息

-------设置自动挂载------------网络存储概念
vi /etc/fstab
192.168.80.100:/opt/wwwroot /var/www/html nfs rw,_netdev 0 0 
umonut /var/www/html
mount -a    //读写生效

多台pc端NFS共享资源,一个文件可同时看,不可同时更改同一个文件

(负载均衡集群)















使用yum安装的httpd服务的网页根目录:/var/www/html





实验的目的:
1、通过设置配置文件,测试postfix基本发信功能
2、通过用字符端测试收信,并用microsoft outlook 配置测试
3、通过发信认证配置,用字符端测试普通发信测试认证发信,并用microsoft outlook 配置测试
4、通过设置LAMP设置WEB邮箱,登录网页邮箱
5、实现群发邮件
6、限制发送邮件的大小
7、通过配置用户磁盘配额实现限制用户邮箱空间

---以下是postfix常用目录----
/etc/postfix/  //配置文件主目录
/usr/libexec/postfix/ //可用程序目录
/var/spool/postfix/ //邮件队列目录

--------------------vi编辑器永久显示行数------------
vi ~/.vimrc
set nu
----------------------------------------------------

---------检测postfix是否安装以及认证是否支持--------

postconf -a // 验证是否支持cyrus dovecot功能

systemctl start postfix 

netstat -anpt | grep 25   postfix工作在tcp的25端口

systemctl status postfix  

-------第一步是配置DNS解析配置----

systemctl stop firewalld

setenforce 0

yum  install bind bind-utils -y

vi /etc/named.conf   修改dns的主配置文件

将修改成以下内容:
13行        listen-on port 53 { any; };
19行        allow-query     { any; };

vi /etc/named.rfc1912.zones  //配置dns的区域配置文件

zone "lq.com" IN {   正向解析
        type master;
        file "lq.com.zone";
};

zone "80.168.192.in-addr.arpa" {   反向解析
        type master;
        file "lq.com.local";
};

vi /var/named/lq.com.zone  dns服务的正向区域数据配置文件

        NS      mail.lq.com.
        MX 10   mail.lq.com.    //邮件服务器必须配置
mail    A       192.168.80.110

vi /var/name/lq.com.local  dns服务的正向区域数据配置文件

        NS      mail.lq.com.
        MX 10   mail.lq.com.
110     PTR     mail.lq.com.

rndc-confgen -r /dev/urandom -a //解决启动卡顿问题

systemctl start named
systemctl enable named

vi /etc/resolv.conf
nameserver 192.168.80.189

-------------------测试------------------------------
nslookup mail.lq.com  //得出解析结果才可以
nslookup 192.168.80.110
-----------------------------------------------------

--------------配置postfix基本发信功能----------------

  //编辑postfix服务主配置文件
末尾添加以下内容:(也可以查找修改)
76  myhostname = mail.bt.com    //邮件名
83  mydomain = bt.com          //邮件域名
99  myorigin = $mydomain       //邮件资源起始域,往外发文件所填写的邮件域
116 inet_interfaces = all   //监听的网络接口 
164 mydestination = $myhostname, $mydomain  //目标域,可以收发邮件的客户端(服务的对象)
418 home_mailbox = Maildir/     //邮件存放的目录和格式
默认在接收方用户的家目录里面/home/用户名/Maildir/

postfix check   检查配置文件内有没有语法错误

systemctl reload postfix
systemctl restart postfix       //重启

postconf //查看postfix的当前配置
postconf -n //查看postfix非默认配置

-----------------增加邮件测试账号--------------------
groupadd mailusers    //创建邮件使用者组
useradd -g mailusers jack  //创建基本组mailusers的用户  
useradd -g mailusers tom
echo "123" | passwd --stdin jack    //设置密码
echo "123" | passwd --stdin tom

注:postfix和vsftpd服务一样,都可以调用本地系统的账户和密码


----------连接服务器的25端口进行简单发信测试----------

yum install telnet

telnet mail.lq.com 25

helo mail.lq.com //声明本机的主机名





mail from:jack@lq.com //声明发件人地址

rcpt to:tom@lq.com //声明收件人地址

data //写正文

i am jack!!
.

quit // 退出

----------使用root查看tom用户是否收到测试邮件----------

cat /home/tom/Maildir/new/后面内容可用Tab键补全

-------------------------------------------------------
到此基本发信功能已完成。

------第二步:安装dovecot提供收信服务------

yum install dovecot -y

vi /etc/dovecot/dovecot.conf   //编辑dovecot配置文件

24  protocols = imap pop3 lmtp  把#去掉让其生效,协议为imap pop3 imtp协议
30  listen = *  把#去掉让其生效,作用监听所有的110,143端口

48  login_trusted_networks = 192.168.80.0/24  允许登录的网段地址,可不写

末尾添加以下内容:
disable_plaintext_auth = no  启用明文认证

ssl = no  管理加密,no是不加密

cd /etc/dovecot/conf.d/   dovecot子配置文件存放目录

vi 10-mail.conf //编辑dovecot子配置文件
 
24  mail_location = maildir:~/Maildir  
    指定本地邮箱的存放位置


service dovecot start //启动服务

netstat -anpt | grep dovecot  // 110 143端口需要监听

---------------------以下测试收信---------------------
telnet mail.lq.com 110   //连接mail.aa.com 的110端口

user tom   登录tom账号

pass 123123   密码输入

list   列表已收邮件

retr 1   读取邮件1

quit   退出

---以上收信方式太不友好,安装MUA软件连接服务器收发邮件---

outlook 或者 Foxmail软件 配置测试。


---------------以下进行发信认证配置--------------

yum install cyrus-sasl* 


vi /etc/sasl2/smtpd.conf  //编辑配置文件

pwcheck_method: saslauthd   //认证方法
mech_list: plain login   //机械列表:普通登录
log_level:3    日志级别

vi /etc/sysconfig/saslauthd
7  MECH=shadow   使用本地账号密码验证

service saslauthd start
systemctl enable saslauthd

vi /etc/postfix/main.cf

--在末尾新增--

smtpd_sasl_auth_enable = yes //开启认证
smtpd_sasl_security_options = noanonymous //不允许匿名发信
mynetworks = 127.0.0.0/8 //允许的网段,如果增加本机所在网段就会出现允许不验证也能向外域发信
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination 
//允许本地域以及认证成功的发信,拒绝认证失败的发信

postfix check   检测配置文件内有没有语法错误

systemctl reload postfix
systemctl restart postfix

-----------------测试普通发信-------------------
telnet mail.lq.com 25

helo mail.lq.com   

mail from:jack@lq.com

rcpt to:test@126.com 

//提示:Relay access denied,说明认证正在执行。

quit
------测试认证发信,注意:一定要关闭SELINUX-----

------------以下将用户名密码生成密文-------------

printf "jack" | openssl base64
amFjaw==
printf "abc123" | openssl base64
YWJjMTIz

--------------字符终端测试认证发信-----------
telnet mail.lq.com 25

ehlo mai.lq.com //注意是ehlo不是helo

auth login //认证登录

amFjaw== //用户名

YWJjMTIz // 密码

mail from:jack@lq.com

rcpt to:weisheng213@126.com

data

this is test 
.

quit
-------------
配置OUTLOOK认证发信-在账户属性里-服务器-我的服务器要求身份验证
测试……

配置OUTLOOK:选择文件-账户设置-账户设置-选择账户-更改-其它设置-发送服务器-勾选-使用与接收邮件服务器相同设置


----------第四步:配置web邮箱网页收发邮件------------

注意:需要搭建好LAMP环境
--------RPM安装LAMP---------
yum install -y \
httpd \
mariadb-server mariadb \
php \
php-mysql \
php-gd \
libjpeg* \
php-ldap \
php-odbc \
php-pear \
php-xml \
php-xmlrpc \
php-mhash

vi /etc/httpd/conf/httpd.conf
修改成以下内容:
95  ServerName www.lq.com
164 DirectoryIndex index.html index.php

vi /etc/php.ini
878 date.timezone = PRC    日期时区=×××

systemctl start httpd.service
systemctl start mariadb.service
systemctl enable httpd
systemctl enable mariadb

netstat -anpt | grep 80      
netstat -anpt | grep 3306

vi /var/www/html/index.php  //php探针   验证Apache支持php语言

<?php   
phpinfo();  //php函数,解析显示php内容信息。
?>

注:/var/www/html是用软件包安装的httpd服务的网页根目录

php -i  检测

windows浏览器中输入以下:
http://192.168.80.181/


--------进入数据库,建立授权账号-----
mysql_secure_installation    mysql安全初始化安装

mysql -u root -p 123   使用指定用户和密码登录mysql数据库

CREATE DATABASE abc;   创建新的空的数据库

GRANT all ON abc.* TO 'mail'@'%' IDENTIFIED BY '123456';   
授权,将abc数据库所有的权限授予用户mail,身份验证密码为123456,“%”表示任意主机

flush privileges;   刷新权限

--------下面测试数据库工作是否正常-----
vi /var/www/html/index.php  
删除所有内容后,添加以下内容:

<?php
$link=mysql_connect('192.168.80.181','mail','123456');
if($link) echo "Success!!";
else echo "Fail!!";
mysql_close();
?>

意思:用mail用户,密码123456,去连接192.168.80.110数据库,如果连接成功显示success!!,失败则显示Fail!!

下载一个网页邮箱的软件包。(小松鼠网页邮箱为例)
http://www.squirrelmail.org/download.php   下载地址

tar xzvf squirrelmail-webmail-1.4.22.tar.gz
tar xzvf all_locales-1.4.18-20090526.tar.gz -C squirrelmail-webmail-1.4.22

cp -rv squirrelmail-webmail-1.4.22 /var/www/html/mail
cd /var/www/html/mail

mkdir attach     //创建附件目录,用于存放附件
chown -R apache:apache attach/ data/
//更改attach/ data/归属,让程序账号apache便于运行

cd config   //切换到配置文件存放的目录

cp config_default.php config.php
//创建squirrelmail配置文件

vi config.php  //修改squirrelmail配置文件

118  $domain = 'lq.com';   /域名
231  $imap_server_type = 'dovecot';  //imap服务器类型设置为dovecot
499  $data_dir = '/var/www/html/mail/data'; //原件存放位置 
517  $attachment_dir = '/var/www/html/mail/attach/'//附件存放位置;
1012 $squirrelmail_default_language = 'zh_CN'; //squirrelmail默认语言设置为中文
1027 $default_charset = 'zh_CN.UTF-8';  //字符编码设置为中文

http://192.168.80.181/mail

------以下设置邮件组-----
vi /etc/aliases   //别名配置文件

90 student:	jack,tom   

添加student别名,代表jack,tom

newaliases //生成hash数据库文件

vi /etc/postfix/main.cf
386 alias_maps = hash:/etc/aliases  
如果前面有“#”号,就把“#”去掉

postfix reload

测试向student@lq.com发信的时候jack,tom都会收到。

----以下设置邮件大小------
vi /etc/postfix/main.cf
message_size_limit = 5120000 //定义每次发送邮件大小限制,单位是Byte
postfix reload

通过增加大附件测试效果。

----以下通过配置用户磁盘配额实现限制用户邮箱空间-----

umount /home

vi /etc/fstab
UUID=beec665d-7867-4133-8c3a-466ad6018413 /home           xfs     defaults,usrquota,grpquota        0 0

mount -a

quotaon -p  /home   查看有没有开启磁盘限额
   
edquota -u jack //对用户Jack做磁盘配额,使用过,才会出现

repquota /home/    //查看home目录使用情况

增加附件测试效果




/home/jack/Maildir/
new   新邮件
cus   已读邮件
tmp   草稿邮件











ca认证

如何搭建一个企业CA证书服务器

定义系统环境:
centos 7.4

ca.lq.com   192.168.80.100  openssl*
mail.lq.com  192.168.80.101  dovecot*
client.lq.com  192.168.80.102  mutt*









原版



----以下在CA服务器端配置---IP:80.110

1、 确认安装了openssl软件

rpm -qa  | grep openssl
openssl-devel-1.0.1e-15.el6.x86_64
openssl-1.0.1e-15.el6.x86_64

vi /etc/pki/tls/openssl.cnf   openssl服务的配置文件
[ CA_default ]

dir             = /etc/pki/CA  工作目录 # Where everything is kept(保存)
certs           = $dir/certs   颁发了的证书 # Where the issued(发行者)certs are kept 
crl_dir         = $dir/crl    吊销了的证书 # Where the issued crl are kept
database        = $dir/index.txt 索引文件  # database index file.
new_certs_dir   = $dir/newcerts  新证书 # default place for new certs.

certificate     = $dir/cacert.pem 根证书  # The CA certificate
serial          = $dir/serial  序列号  # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem# The private key
RANDFILE        = $dir/private/.rand    # private random number file

x509_extensions = usr_cert              # The extentions to add to the cert

---修改以下配置----
[ req_distinguished_name ] L128

countryName                     = Country Name (2 letter code)
countryName_default             = CN

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = JiangSu

localityName                    = Locality Name (eg, city)
localityName_default    = NanJing

commonName                      = NJXT Certificate Authority
commonName_max                  = 64

emailAddress                    = test@126.com
emailAddress_max                = 64

cd /etc/pki/CA/
echo 01 > serial 
touch index.txt //新建一个索引文件

openssl genrsa -out private/cakey.pem -des3 2048 //生成私钥必须输入密码

openssl req -new -x509 -key private/cakey.pem -days 365 > cacert.pem //生成根证书需要输以上密码 一直回车

yum install httpd //通过WWW服务器共享出去

cp cacert.pem /var/www/html/ //把根证书发布出去

cd /var/www/html/
mv cacert.pem ROOTCA.pem


------以下在邮件服务器上配置----------IP:80.111
openssl genrsa -out imaps-ser.key 1024 //生成私钥文件

openssl req -new -key imaps-ser.key -out imaps-svr.csr //生成签名请求文件要和CA相同

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:JiangSu
Locality Name (eg, city) [Default City]:NanJing

Common Name (eg, your name or your server's hostname) []:localhost.localdomain //写主机名

其它直接回车……


scp imaps-svr.csr root@192.168.80.100:/root/  //把签名请求文件传送给CA服务器

--------以下在CA上操作---------
openssl req -in imaps-svr.csr -noout -text //查看一imaps-svr.csr的内容

openssl ca -in imaps-svr.csr -out imaps-svr.crt //为客户端生成证书,全部回答Y

scp imaps-svr.crt root@192.168.80.101:/root //把证书传送给客户端

-------以下在邮件服务器上操作------

vi /etc/dovecot/dovecot.conf

ssl = yes

cp imaps-svr.crt /etc/ssl/certs/dovecot.pem //把数字证书放到指定位置
mkdir /etc/ssl/private
cp imaps-ser.key /etc/ssl/private/dovecot.pem //把私钥放到指定位置

service dovecot restart

netstat -anpt | grep dovecot //993 和 995 在监听

-----------以下在用户侧进行测试---------IP:80.105
yum install mutt

mkdir .mutt

cd .mutt

vi muttrc

set folder=imaps://mail.lq.com
set spoolfile=imaps://mail.lq.com
set certificate_file=/root/.mutt/testca.CRT

 
vi /etc/resolv.conf  //使客户端能够解析mail.aa.com
nameserver 192.168.80.111

输入 mutt 测试IMAPS的效果。









修改版



----以下在CA服务器端配置---IP:80.110

1、 确认安装了openssl软件

rpm -qa  | grep openssl
openssl-devel-1.0.1e-15.el6.x86_64
openssl-1.0.1e-15.el6.x86_64

vi /etc/pki/tls/openssl.cnf   openssl服务的配置文件
[ CA_default ]

dir             = /etc/pki/CA  工作目录 # Where everything is kept(保存)
certs           = $dir/certs   颁发了的证书 # Where the issued(发行者)certs are kept 
crl_dir         = $dir/crl    吊销了的证书 # Where the issued crl are kept
database        = $dir/index.txt 索引文件  # database index file.
new_certs_dir   = $dir/newcerts  新证书 # default place for new certs.

certificate     = $dir/cacert.pem 根证书  # The CA certificate
serial          = $dir/serial  序列号  # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem# The private key
RANDFILE        = $dir/private/.rand    # private random number file

x509_extensions = usr_cert              # The extentions to add to the cert

---修改以下配置----
[ req_distinguished_name ] L128

countryName                     = Country Name (2 letter code)
countryName_default             = CN

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = JiangSu

localityName                    = Locality Name (eg, city)
localityName_default    = NanJing

commonName                      = NJXT Certificate Authority
commonName_max                  = 64

emailAddress                    = test@126.com
emailAddress_max                = 64

cd /etc/pki/CA/
echo 01 > serial 
touch index.txt //新建一个索引文件

openssl genrsa -out private/cakey.pem -des3 2048 //生成私钥必须输入密码

openssl req -new -x509 -key private/cakey.pem -days 365 > cacert.pem //生成根证书需要输以上密码 一直回车

yum install httpd //通过WWW服务器共享出去

cp cacert.pem /var/www/html/ //把根证书发布出去

cd /var/www/html/
mv cacert.pem ROOTCA.pem


------以下在邮件服务器上配置----------IP:80.111
openssl genrsa -out imaps-ser.key 1024 //生成私钥文件

openssl req -new -key imaps-ser.key -out imaps-svr.csr //生成签名请求文件要和CA相同

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:JiangSu
Locality Name (eg, city) [Default City]:NanJing

Common Name (eg, your name or your server's hostname) []:localhost.localdomain //写主机名

其它直接回车……


scp imaps-svr.csr root@192.168.80.100:/root/  //把签名请求文件传送给CA服务器

--------以下在CA上操作---------
openssl req -in imaps-svr.csr -noout -text //查看一imaps-svr.csr的内容

openssl ca -in imaps-svr.csr -out imaps-svr.crt //为客户端生成证书,全部回答Y

scp imaps-svr.crt root@192.168.80.101:/root //把证书传送给客户端

-------以下在web服务器上操作------
yum install httpd
yum install mod_ssl -y
cp imaps-ser.key /etc/httpd/conf.d/server.key   将密钥复制到相应目录中

cp imaps-svr.crt /etc/httpd/conf.d/server.crt  将证书复制到相应位置

vi /etc/httpd/conf.d/ssl.conf
编辑认证安全配置,修改成以下内容:
100 SSLCertificateFile /etc/httpd/conf.d/server.crt

107 SSLCertificateKeyFil	/etc/httpd/conf.d/server.key

systemctl restart httpd

测试:浏览器访问192.168.80.101,看能否访问http

然后在访问https://192.168.80.101,看是否需要下载证书










网络装机:
PXE——用来检测硬件
TFTP——传输应答文件及引导文件等
FTP——传输系统镜像文件
DHCP——分配网卡ip地址,指定应答文件所在位置
kickstart——创建一个应答文件,从而实现无人值守的装机。









systemctl stop firewalld
setenforce 0


第一步:部署dhcp服务

yum install dhcp -y

vi /etc/dhcp/dhcpd.conf

subnet 192.168.80.0 netmask 255.255.255.0 {
        range 192.168.80.150 192.168.80.200;
        option routers 192.168.80.1;
        option domain-name-servers 192.168.80.100;
        default-lease-time 600;
        max-lease-time 7200;
        next-server 192.168.80.100;   指的是TFTP的服务器地址
        filename "/pxelinux.0";	指定文件
}

注:filename指的是告诉客户端所需的引导程序文件是什么及路径
    “/”并不是系统的根,而是/var/lib/tftpboot(tftp服务根目录)

systemctl start dhcpd
systemctl enable dhcpd

netstat -anptu | grep dhcpd

第二步:部署tftp-server服务

yum install xinetd -y
yum install tftp-server -y

vi /etc/xinetd.d/tftp

disable                 = no

systemctl restart xinetd
systemctl enable xinetd
netstat -anptu | grep xinetd

第三步:安装syslinux服务

yum install syslinux -y

cd /usr/share/syslinux/

cp pxelinux.0 /var/lib/tftpboot/   引导文件

cd /mnt/images/pxeboot/

cp initrd.img vmlinuz /var/lib/tftpboot/  linux引导加载模块,内核加载

mkdir /var/lib/tftpboot/pxelinux.cfg

cd /mnt/isolinux/

cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default  安装菜单

cp boot.msg /var/lib/tftpboot/

cd /var/lib/tftpboot/

chmod +r pxelinux.cfg/default 

vi pxelinux.cfg/default   定义开机界面的选择菜单

default vesamenu.c32    改为   default linux   默认选项
timeout 600   超时时间

display boot.msg   开机界面的选择菜单

61 label linux
62   menu label ^Install CentOS 7
63   kernel vmlinuz
64   append initrd=initrd.img inst.repo=ftp://192.168.80.100/dvd quiet

inst.repo=nfs://192.168.80.100:/dvd 

inst.repo=http://192.168.80.100/dvd 

第四步:部署ftp或者nfs或者httpd服务

yum install vsftpd -y


systemctl start vsftpd
systemctl enable vsftpd


netstat -anptu | grep vsftpd

为了装牛叉,高大上
yum install lrz* -y

yum install -y gcc gcc-c++ make

yum install wget -y

wget ftp://ftp.figlet.org/pub/figlet/program/unix/figlet-2.2.5.tar.gz

tar xf figlet-2.2.5.tar.gz -C /opt/

cd /opt/figlet-2.2.5/

make && make install

./figlet welcome

              _                          
__      _____| | ___ ___  _ __ ___   ___ 
\ \ /\ / / _ \ |/ __/ _ \| '_ ` _ \ / _ \
 \ V  V /  __/ | (_| (_) | | | | | |  __/
  \_/\_/ \___|_|\___\___/|_| |_| |_|\___|
                                         
cd /var/lib/tftpboot/

vi boot.msg

文件内容如下:
^L
^Xsplash.lss
----------------------------------------------
              _
__      _____| | ___ ___  _ __ ___   ___
\ \ /\ / / _ \ |/ __/ _ \| '_ ` _ \ / _ \
 \ V  V /  __/ | (_| (_) | | | | | |  __/
  \_/\_/ \___|_|\___\___/|_| |_| |_|\___|

----------------------------------------------

 -  Press the ^O01<ENTER>^O07 key to begin the installation process.

开启虚拟机安装系统。

也可以选择安装哪个版本的linux系统

这里就需要两个版本的系统镜像和引导文件了



kickstart服务——应答文件

图形化界面——可视化界面

yum  install system-config-kickstart  -y

system-config-kickstart &

yum  install vsftpd -y

cp ks.cfg  /var/ftp

vi  pxelinux.cfg/default
append initrd=initrd.img inst.ks=ftp://192.168.80.180/ks.cfg quiet     指定应答文件

ks.cfg  明确指定了镜像文件在哪
  

由于下载软件包信息失败,软件包选择被禁止

问题解决:

#只需将文件内[centos]修改位[development]即可,如下
[root@node1 kk]# cat /etc/yum.repos.d/my.repo 
[development]
name=my-centos7
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@node1

修改文件后,卸载命令system-config-kickstart并重新安装:

# 卸载命令
[root@node1 kk]# yum remove -y system-config-kickstart

#重建yum缓存
[root@node1 kk]# yum clean all
[root@node1 kk]# yum makecache

#重新安装命令
[root@node1 kk]# yum install -y system-config-kickstart

命令安装完毕后,重新执行system-config-kickstart命令即可发现软件包
































未修改


cobbler大平台,管理一切装机操作服务


Cobbler服务    自动部署装机
dhcp	       自动分配ip地址使新机器和服务器在同一个段落互联互通
tftp	       压缩内核     引导程序  (速度快)
ftp            iso镜像文件




-----------------Cobbler--------------------

rpm -ivh http://mirrors.yun-idc.com/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm

yum list

yum clean all

yum makecache

-------------------正式部署----------------------------------
mv   back/*  /etc/yum.repos.d
yum install cobbler cobbler-wedhcp tftp-server pykickstart httpd rsync xinetd -y

注:cobbler  服务
    cobbler-web   通过网页形式进行管理
    pykickstart   用python开发的kickstart
    httpd         检测文件是否安装
    rsync         同步管理
    xinetd        管理平台,管理tftp和xinetd
    





vi /etc/cobbler/settings       //修改cobbler配置文件

272   next_server: 192.168.80.100          //指定PXE位置

384   server: 192.168.80.100   //tftp服务器

242   manage_dhcp: 1                 //管理dhcp启动

101 default_password_crypted: "$1$mF86/UHC$WvcIcX2t6crBz2onWxyac."

这个就是给客户端装机后的root密码,盐值加密

systemctl stop firewalld.service      //关闭防火墙
setenforce 0                          //关闭增强安全功能

systemctl restart httpd.service

systemctl start cobblerd.service

cobbler check 

--------------------提示内容:需要优化-----------
The following are potential configuration items that you may want to fix:

1 : SELinux is enabled. Please review the following wiki page for detailson ensuring cobbler works correctly in your SELinux environment:
    https://github.com/cobbler/cobbler/wiki/Selinux
2 : change 'disable' to 'no' in /etc/xinetd.d/tftp
3 : Some network boot-loaders are missing from /var/lib/cobbler/loaders, ou may run 'cobbler get-loaders' to download them, or, if you only want t handle x86/x86_64 netbooting, you may ensure that you have installed a *ecent* version of the syslinux package installed and can ignore this messge entirely.  Files in this directory, should you want to support all arcitectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. Th 'cobbler get-loaders' command is the easiest way to resolve these requirments.
4 : enable and start rsyncd.service with systemctl
5 : debmirror package is not installed, it will be required to manage deban deployments and repositories
6 : The default password used by the sample templates for newly installedmachines (default_password_crypted in /etc/cobbler/settings) is still setto 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'randomphrase-here' 'your-password-here'" to generate new one
7 : fencing tools were not found, and are required to use the (optional) ower management features. install cman or fence-agents to use them

Restart cobblerd and then run 'cobbler sync' to apply changes.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

先设置密码

openssl passwd -1 -salt 'abner' 'abner'    //盐值加密
$1$abner$kDle2KnwbPHdm1UZEE79V.        //加密结果

注:如果tab键补不全,就用yum安装

继续回settings文件中

default_password_crypted: "$1$abner$kDle2KnwbPHdm1UZEE79V."    //粘贴

保存退出settings文件


systemctl start rsyncd.service      //启动服务

vim /etc/xinetd.d/tftp

disable   = no     //启用

systemctl restart xinetd.service     //重启服务

vim /etc/cobbler/dhcp.template       //cobbler控制的dhcp服务模板

subnet 192.168.80.0 netmask 255.255.255.0 {
     option routers             192.168.80.1;     //修改网关
     option domain-name-servers 192.168.80.2;     //修改DNS
     option subnet-mask         255.255.255.0;
     range dynamic-bootp        192.168.80.50 192.168.80.90;   //修改地址池

cobbler sync       //帮助同步生成DHCP配置文件   同步到dhcp服务里去

cobbler get-loaders                //下载引导操作系统文件

systemctl restart dhcpd
systemctl restart xinetd
systemctl restart rsyncd



------------------使用cobbler check再次检查----------
下面三条可以忽略不去处理
1 : SELinux is enabled. Please review the following wiki page for details on ensuring cobbler works correctly in your SELinux environment:
    https://github.com/cobbler/cobbler/wiki/Selinux
2 : debmirror package is not installed, it will be required to manage debian deployments and repositories
3 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them
-------------------------------------------------------------------------------------------------------------------------------------

/var/log/cobbler/cobbler.log   //日志文件所在位置

cobbler import --path=/mnt/ --name=CentOS-7-x86_64 --arch=x86_64  //导入iso镜像,命名为   ,指定系统多少位

注:iso镜像一定要先挂载到/mnt下面
可以导入多个镜像。   

/var/www/cobbler/ks_mirror/CentOS-7-x86_64        //默认导入存放位置


cobbler list     //查看导入结果

cobbler distro list   //查看发行版本

yum install tree -y
tree /var/lib/tftpboot/
tree /var/lib/tftpboot/images   //查看内核和初始化文件在tftp server 共享目录


cobbler profile report                        
/var/lib/cobbler/kickstarts/sample_end.ks    //ks默认文件存放位置

systemctl restart dhcpd
systemctl restart xinetd
systemctl restart rsyncd
systemctl restart cobblerd


客户端安装完成后只具备字符界面  登录账户  root   密码abner



--------------------cobbler web-----------------------------

第一种  

/etc/cobbler/modules.conf     //authn_configfile 模块认证
htdigest -c /etc/cobbler/users.digest Cobbler cbadmin
输入两次确认密码 例如:abc123

systemctl restart cobblerd.service
systemctl restart httpd.service

web账户为 cbadmin  密码为 abc123


第二种  pam认证

vim /etc/cobbler/modules.conf 

module = authn_pam    //修改pam认证

module = authz_ownership    //在users.conf指定访问权限

useradd webuser
passwd webuser

vim /etc/cobbler/users.conf


[admins]
admin = ""
cobbler = ""
webuser = ""     //添加

systemctl restart cobblerd.service
systemctl restart httpd.service


测试:浏览器访问:192.168.80.100

webuser
123



yum install  "virt*"  -y   kvm虚拟平台












修改


cobbler大平台,管理一切装机操作服务


Cobbler服务    自动部署装机
dhcp	       自动分配ip地址使新机器和服务器在同一个段落互联互通
tftp	       压缩内核     引导程序  (速度快)
ftp            iso镜像文件




-----------------Cobbler--------------------
rpm -ivh http://mirrors.yun-idc.com/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm

yum list

yum clean all

yum makecache

-------------------正式部署----------------------------------
yum install cobbler cobbler-web dhcp tftp-server pykickstart httpd rsync xinetd -y

注:cobbler  自动装机,管理其他服务
    cobbler-web   通过网页形式进行管理
    pykickstart  	 生成应答文件
httpd         提供网站服务
tftp-server	 传输文件
    rsync         同步服务文件
    xinetd        管理平台,管理tftp和xinetd
    







vi /etc/cobbler/settings       //修改cobbler配置文件
注:用yum或者rpm安装的服务,其配置文件都在/etc目录下
272   next_server: 192.168.80.100          //指定PXE位置

384   server: 192.168.80.100   //tftp服务器

242   manage_dhcp: 1                 //管理dhcp启动

101 default_password_crypted: "$1$mF86/UHC$WvcIcX2t6crBz2onWxyac."

这个就是给客户端装机后的root密码,盐值加密

systemctl stop firewalld.service      //关闭防火墙
setenforce 0                          //关闭增强安全功能

systemctl start httpd.service

systemctl start cobblerd.service

cobbler check 

--------------------提示内容:需要优化-----------
The following are potential configuration items that you may want to fix:

1 : SELinux is enabled. Please review the following wiki page for detailson ensuring cobbler works correctly in your SELinux environment:
    https://github.com/cobbler/cobbler/wiki/Selinux
2 : change 'disable' to 'no' in /etc/xinetd.d/tftp
3 : Some network boot-loaders are missing from /var/lib/cobbler/loaders, ou may run 'cobbler get-loaders' to download them, or, if you only want t handle x86/x86_64 netbooting, you may ensure that you have installed a *ecent* version of the syslinux package installed and can ignore this messge entirely.  Files in this directory, should you want to support all arcitectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. Th 'cobbler get-loaders' command is the easiest way to resolve these requirments.
4 : enable and start rsyncd.service with systemctl
5 : debmirror package is not installed, it will be required to manage deban deployments and repositories
6 : The default password used by the sample templates for newly installedmachines (default_password_crypted in /etc/cobbler/settings) is still setto 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'randomphrase-here' 'your-password-here'" to generate new one
7 : fencing tools were not found, and are required to use the (optional) ower management features. install cman or fence-agents to use them

Restart cobblerd and then run 'cobbler sync' to apply changes.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

先设置密码

openssl passwd -1 -salt 'abner' 'abner'    //盐值加密
$1$abner$kDle2KnwbPHdm1UZEE79V.        //加密结果

注:如果tab键补不全,就用yum安装

继续回settings文件中

default_password_crypted: "$1$abner$kDle2KnwbPHdm1UZEE79V."    //粘贴

保存退出settings文件


systemctl start rsyncd.service      //启动服务

vim /etc/xinetd.d/tftp

disable   = no     //启用

systemctl restart xinetd.service     //重启服务

vim /etc/cobbler/dhcp.template       //cobbler控制的dhcp服务模板

subnet 192.168.80.0 netmask 255.255.255.0 {
     option routers             192.168.80.1;     //修改网关
     option domain-name-servers 192.168.80.2;     //修改DNS
     option subnet-mask         255.255.255.0;
     range dynamic-bootp        192.168.80.50 192.168.80.90;   //修改地址池

cobbler sync       //帮助同步生成DHCP配置文件   同步到dhcp服务里去

cobbler get-loaders                //下载引导操作系统文件

systemctl restart dhcpd.service
systemctl restart xinetd.service
systemctl restart rsyncd.service



------------------使用cobbler check再次检查----------
下面三条可以忽略不去处理
1 : SELinux is enabled. Please review the following wiki page for details on ensuring cobbler works correctly in your SELinux environment:
    https://github.com/cobbler/cobbler/wiki/Selinux
2 : debmirror package is not installed, it will be required to manage debian deployments and repositories
3 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them
-------------------------------------------------------------------------------------------------------------------------------------

/var/log/cobbler/cobbler.log   //日志文件所在位置

cobbler import --path=/mnt/ --name=CentOS-7-x86_64 --arch=x86_64  //导入iso镜像,命名为   ,指定系统多少位

注:iso镜像一定要先挂载到/mnt下面
可以导入多个镜像。   

/var/www/cobbler/ks_mirror/CentOS-7-x86_64        //默认导入存放位置


cobbler list     //查看导入结果

cobbler distro list   //查看发行版本

yum install tree -y
tree /var/lib/tftpboot/
tree /var/lib/tftpboot/images   //查看内核和初始化文件在tftp server 共享目录


cobbler profile report                        
/var/lib/cobbler/kickstarts/sample_end.ks    //ks默认文件存放位置

systemctl restart dhcpd.service    
systemctl restart xinetd.service
systemctl restart rsyncd.service
systemctl restart cobblerd.service


客户端安装完成后只具备字符界面  登录账户  root   密码abner



--------------------cobbler web-----------------------------

第一种  

/etc/cobbler/modules.conf     //authn_configfile 模块认证
htdigest -c /etc/cobbler/users.digest Cobbler cbadmin
输入两次确认密码 例如:abc123

systemctl restart cobblerd.service
systemctl restart httpd.service

浏览器访问:https://192.168.80.100/cobbler_web

web账户为 cbadmin  密码为 abc123


第二种  pam认证

vim /etc/cobbler/modules.conf 

module = authn_pam    //修改pam认证

module = authz_ownership    //在users.conf指定访问权限

useradd webuser
passwd webuser

vim /etc/cobbler/users.conf


[admins]
admin = ""
cobbler = ""
webuser = ""     //添加

systemctl restart cobblerd.service
systemctl restart httpd.service


测试:浏览器访问:https://192.168.80.100/cobbler_web

webuser
123











linux		网络服务:

dhcp		动态分配ip地址参数

samba	共享文件服务

ftp		文件传输服务(协议)
匿名访问
本地用户认证
虚拟用户认证

dns		域名解析服务
搭建正向解析
搭建反向解析
dns主从同步
dns分离解析

postfix	邮箱服务
centos如何搭建postfix
匿名发现
认证发信
收信服务
web邮箱

ca		认证:openssl
搭建ca服务器颁发证书
web网站颁发

远程管理及访问控制:
openssh
ssh的服务端的配置文件:/etc/ssh/sshd_config
ssh 的客户端的配置文件:/etc/ssh/ssh_config
如何修改ssh服务端口

访问控制:tcp  wrappers
/etc/hosts.allow
/etc/hosts.deny

内容格式:
服务名称:允许访问的主机地址或者网址


ip地址:192.168.80.100
网段地址:192.168.80.0/255.255.255.0
网址:网址
域:.域名

顺序:先读取/etc/hosts.allow,在读取/etc/hosts.deny,如果两个文件中都没内	容,那么默认允许访问服务


yum仓库
本地yum仓库如何搭建
局域网yum仓库
网络yum仓库
yum的基础命令:
yum  list
yum	  repolist  列表可以使用的yum仓库
yum  info  软件名称  查看软件包的信息
yum  install
yum  remove
yum  provides  命令或者程序  查看命令或者程序属于那个软件包
yum  whatprovides  /*/文件名  查看某个文件属于哪个软件包
yum  clean  all  清除缓存
yum  makecache  重建缓存

批量装机:
PXE+kickstart实现无人值守的装机
dhcp、tftp-server、xinetd、vsftpd(nfs-utils、httpd)、kickstart(system-config-kickstart)

cobbler自动装机服务
cobbler  cobbler-web  dhcp  tftp-server  xinetd  rsyuc  pykickstart  httpd












shell脚本

特殊的后缀名:
.sh 	 	  shell脚本文件
.py  	  python脚本文件
.jsp  	  Java网页文件
.repo 	  yum仓库配置文件
.php  	  php语言编写文件
.html 	  html编写的网页文件
.db   	  数据库文件

Linux系统中的一切事物都是文件


shell的作用:
1、翻译官,解释用户输入的命令
2、用户的登录shell程序,默认为/bin/bash
3、shell脚本文件,编写脚本代码必须有执行权限。



shell脚本的执行方式:
1、脚本的路径(需要执行权限)
绝对路径     /root/first.sh
相对路径     首先切换到脚本文件所在的目录,然后用”./脚本名”去执行

注:必须脚本文件要有执行权限

2、sh 脚本路径(不需要执行权限)
方法一:绝对路径     sh  /opt/first.sh

方法二:相对路径     首先切换到脚本文件所在的目录,然后用”sh  脚本名”去执行

3、source  脚本路径(不需要执行权限)
方法一:绝对路径     source   /opt/first.sh

方法二:相对路径     首先切换到脚本文件所在的目录,然后用”source  脚本名”去执行


|作用:将管道符号左侧的命令执行的结果,作为右侧命令的处理对象


shell脚本的构成:
1、脚本声明
#!/bin/bash   声明后面的命令可以通过此shell程序去解释并执行

2、注释信息
摘要、脚本的作用、参数说明、工作效率、创建日期、作者、版本声明、第几次的修改、每次返回的动态值得定义等

3、可执行的命令语句
注:所有特殊符号必须是英文模式输入。


重定向操作
类型		操作符		用途
重定向输入		  <		从指定的文件读取数据,而不是从键盘输入
---------------------------------------------------------------------------------------------------------------
重定向输出		  >		将输出结果保存到指定的文件(覆盖原有内容)
  >>		将输出结果追加到指定的文件
---------------------------------------------------------------------------------------------------------------
标准错误输出	  2>	将错误信息保存到指定的文件(覆盖原有内容)
2>>	将错误信息追加到指定的文件中
---------------------------------------------------------------------------------------------------------------
混合输出		  &>	将标准输出、标准错误的内容保存到同一个文件中



例子将正确和错误的分开:rm  -f  *      >1.txt            2>2.txt
要输入的命令   正确文件位置    错误文件位置

例子将正确和错误写在一个文件里面:rm  -f  *  &>  1.txt
要输入的命令   文件位置



变量名=变量值   #等于号两边不允许空格
自定义变量
总结:
1、声明变量不需要声明类型
2、可以存储不同类型内容  A=weixin01
3、有时候使用变量时要明确变量类型
4、严格区分大小写
5、等于号两边不允许出现空格
6、首个字符必须是字母(a-z,A-Z或者_)
7、不能使用标点符号作为变量名
8、不能使用bash里面的关键字作为变量名


格式:变量名=变量值

查看变量:
格式:echo  $变量名
  echo  ${变量名}

通过echo进行输出变量,其中$是引用变量的特殊字符是特殊字符(必须要使用$符号)

注:echo和调用的变量之间必须要有空格
当需要一起调用多个变量时,以空格隔开
当变量名和后面的字符混淆的时候,因使用{ }将变量名括起来


——————以上是最基本的赋值方法——————————


变量赋值的特殊方法:
1、双引号””
当变量值之间有空格的时候,要使用””去括起来
允许通过$符号引用其他变量值

2、单引号’’所见即所得
禁止应用变量值,将$符号当作普通字符来使用

3、反撇号``
与$()效果一样
作用:命令替换,提取命令执行的结果


ls  -l  `which  useradd`
优先执行反撇号里面的命令,在执行其他

变量赋值的时候,如果要赋值的是某条命令执行的结果,必须使用反撇号
缺点:反撇号不是实现嵌套命令替换操作,这时候使用$()来代替

rpm  -qc  $(rpm  -qf  $(which  useradd))

A=`rpm  -qc  $(rpm  -qf  $(which  useradd))`
A=$(rpm  -qc  $(rpm  -qf  $(which  useradd)))

4、交互式赋值    read
read命令用于提示用户输入信息,从而实现简单交互过程
(输入命令就是一种交互式的过程)

多个变量名交互式赋值,赋值之间有空格,变量名也有空格。

为了更友好,通常使用-p来设置提示信息


只是在当前shell程序中定义一个变量,但是到其他shell程序中无法引用

设置变量的作用范围:
export  变量名=变量值
设置全值变量,所有子shell程序都可以使用此变量
-------------------------------------------以上临时生效-----------------------------------------------------------

永久生效:
vi  /etc/profile
export   变量名=变量值
sourece   /etc/profile   生效


数值变量的运算:
expr
$(())  加加:++   减减:--   2的n次方:2**n



环境变量

常见的环境变量:
PWD:显示当前所在的工作目录
USER:用户的名称,可以查看当前登录的用户
HOME:用户的加目录,显示当前用户的家目录
LANG:语言和字符集变量
PTAN:命令搜索路径,可以用tab键补全
PS1:提示符变量


位置变量:
方便通过命令行为程序提供操作参数


当执行命令行时,第一个字段表示命令名或者脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量
第一个字段位置变量是$0
第二个字段位置变量是$1
第三个字段位置变量是$2

例子:  ls  /opt  /bot  /root
/opt/a.sh   /opt  


vi  weizhi.sh

#!/bin/bash
sum=$(($1+$2))
echo”$1+$2=$sum”


全局环境变量文件:/etc/profile
局部环境变量文件:~/.bash_profile

预定义变量:
$#:表示命令行的位置变量的个数
$*:表示每个位置变量的内容
$?:返回上一次执行的结果,0为正确执行,非0的代表异常(报错)
$0:表示当前执行的命令或者程序名











条件测试
 test 条件表达式   /  条件表达式

常用的测试操作符
-d 测试是否为目录
-e 测试目录或文件是否存在
-f 测试是否为文件
-r 测试当前用户是否有权限读取read
-w 测试当前用户是否有权写入write
-nt  判断文件A是否比文件B新
-ot  判断文件A是否比文件B旧
-ef  判断两个文件是否为同一个文件,用来判断两个文件是否指向同一个inode


[ -w /opt/bb ] && echo $?  一条命令  正确输出错误不执行echo  $?
[[  -f /opt/bb ]]  &&  echo  “yes” ||  echo  “no”    ||否则   正确执行yes错误执行no



整数值比较

[ 整数1  操作符  整数2]

操作符
-eq   第一个书等于第二个数
-ne   第一个数不等于第二个数
-gt   第一个数大于第二个数
-lt    第一个数小于第二个数
-le    第一个数小于或等于第二个数
-ge   第一个数大于或等于第二个数



字符串比较
格式1  [ 字符串1 = 字符串2 ]
        [ 字符串1 != 字符串2 ]
格式二   [ -z 字符串 ]

=  第一个字符串与第二个字符串相同
!=  第一个字符串与第二个字符串不相同,其中”!”符号表示取反
-z   检查字符串是为空,对于未定义或赋予空值得变量将视为空串



逻辑测试
格式1  [ 表达式1 ]  操作符  [ 表达式 ]
格式2  命令1  操作符  命令2

测试操作符
&&   逻辑与,表示“而且”,只有当前后两个条件都成立,整个测试命令的返回值才0(结果成立)。使用Test命令测试时,“&&”可改为“-a”
||   逻辑或,表示“或者”,只要前后两个条件中有一个成立,整个测试命令的返回值即为0(结果成立)。使用Test命令测试时,“||”可改为“-o”
!    逻辑否,表示“取反”,只有指定的条件不成立时,整个测试命令的返回值才为0(结果成立)


if语句结构

单分支:
if  条件测试操作
then
命令序列
fi

双分支:
if  条件测试操作
then
命令序列1
else
命令序列2
fi

多分支:
if  条件测试操作
then
命令序列1
elif  条件测试操作2
then
命令序列2
else
命令序列3
fi






case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分支选择结构。

case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。
case语句格式如下:
case 值 in 
	模式1)     
		command1     
		command2     
		command3 
	;; 
	模式2)     
	command1     
	command2     
	command3 
	;; 
	*)     
	command1     
	command2     
	command3 
	;; 
esac

取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;

注:
;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后esac

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

? 下面的脚本提示输入1到4,与每一种模式进行匹配:

echo 'Input a number:'
read Num
case $Num in
    1)  echo 'You select 1'
    ;;
    2)  echo 'You select 2'
    ;;
    3)  echo 'You select 3'
    ;;
    4|5)  echo 'You select 4 or 5'
    ;;
    *)  echo 'default'
    ;;
esac

case语句结构特点如下:
匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。
最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列。
#!/bin/bash
read -p "请输入你的内容" KEY
case $KEY in
	[a-z]|[A-Z])
		echo "It's a 字母."
	;;
	[0-9]*) 
		echo "It's a 数字."
	;;
	*)
		echo "标点符号、特殊符号等"
esac


#!/bin/sh
case $1 in
        start | begin)
          echo "start something"
        ;;
        stop | end)
          echo "stop something"
        ;;
        *)
          echo "请输入正确的操作start | stop"
        ;;
esac


作用:
1、作为选择语句来编写
2、作为系统服务启动脚本






循环语句


for循环语句
需要指定一个变量以及可以取值的取值列表,针对每一个不同的取值相同的命令序列,直到变量值用尽,退出循环


取值列表:for语句的执行条件,其中包括多个属性相同的对象,需要预先指定。

格式:
for  变量名  in 取值列表
do
命令序列
done

注:
for语句的操作对象为用户指定名称的变量
通过in关键字为改变量预先设置一个取值列表

多个取值之间以空格作为分隔
do~done之间是一个循环体

应用领域:
1、字符串取值列表
#!/bin/bash
#字符串取值列表
for  HOME  in  北京  上海  广州  安徽  南京
do
echo  “$HOME欢迎你”
done


2、文件取值列表
#!/bin/bash
#文件取值列表(命令执行取值列表)
i=1
for  USER  in  $(cat  /opt/a)
do
echo  ”$i号用户:$USER”
let  i++ //循环加一
done


3、扫描ip地址
#!/bin/bash
#扫描ip地址
for  IP  in  192.168.108.{1..254}   //1到254
do
ping  -c  3  -i  0.2  -W  1  $IP  &>  /dev/null

if  [ $? -eq 0 ];then
echo  “$IP  is  up!!!”
else
echo  “$IP  is  down!!!”
fi
done

setfacl -m u:andy:rwx /usr/local/httpd/html/     给一个andy用户权限

4、批量添加用户

方法一:同一个姓
#!/bin/bash
#批量添加用户

for  A  in  teacher{1..5}
do
useradd  $A
echo  123  |  passwd  --stdin  $A  &>  /dev/null
done

方法二:不同姓名

vi  b
lisi
zhangsan
wangwu
jack

#!/bin/bash
#批量添加用户

for  A  in  $(cat  /opt/b)
do
useradd  $A
echo  123  |  passwd  --stdin  $A  &>  /dev/null
done






while循环语句
while和for的区别
for语句非常适合用于列表对象无规律,且列表来源是固定的场合


while对于要求控制循环次数、操作对象按数字顺序编号,按特定条件执行重复操作。

重复测试某个条件时,只要条件成立就会反复执行(无限),除非强制终止,或者exit语句退出脚本

格式:
while  条件测试操作(判断语句)
do
命令序列
done

应用领域
1、批量添加用户
#!/bin/bash

U=”student”
i=1
while  [ $i  -le  10 ]
do
useradd  $U$i
echo  123  |  passwd  --stdin  $U$i  &>  /dev/null
let i++
done




交互式批量创建
#!/bin/bash
read  -p  “请输入要创建用户的前缀:”  X
read  -p  “请输入要创建用户的个数:”  M
read  -p  “请输入用户的初始密码:”  N
i=1
while  [ $i  -le  $10 ]
do
useradd  $X$i
echo  “$N”  |  passwd  --stdin  $X$i  &>  /dev/null
chage  -d  0  $X$i
let i++
done


3、猜价格游戏
#!/bin/bash
P=$(($PANDOM%1000))
T=0
echo  “商品实际价格范围0~999,请猜一猜看是多少?”

while  true
do
read  -p  “请输入猜测的价格数目:”INT
let  T++
if  [ $INT  -eq  $P ];then
echo  “恭喜答对了,实际价格是$P”
echo  ”你总共猜测了$T次”
exit  0   //正常退出脚本
elif  [ $INT  -gt  $P ];then
echo  “太高了”
else
echo  “太低了”
fi
done



shell函数


格式:
[ function ] 函数名(){
命令序列
[return  x]
}

注:
[ function ]是可写可不写,表示该函数的功能,可省略
()里面是没有内容的,固定格式
执行的命令序列放在{}里面
[return  x]的作用是当命令序列执行完后返回给系统一个值。相当于echo  $?


例子:
两个数求和
#!/bin/bash

sum(){
echo  “你需要计算的两个整数分别是:$1和$2”
SUM=$(($1+$2))
echo  “$1  +  $2  =  $SUM”
}

sum  $1  $2    //调用shell函数



99乘法表

#!/bin/bash

#for loop
for (( i=1;i<=9;i++ ))
do
    for (( j=1;j<=i;j++  ))
    do
       let "temp=i*j"
       echo -n "$i*$j=$temp "
    done
    echo ""
done





扫描ip地址
#!/bin/bash
#扫描ip地址
up=0
down=0
for IP in 192.168.108.{1..254}
do
        ping -c 3 -i 0.2 -W 1 $IP &> /dev/null
                     
        if [ $? -eq 0 ];then
                        echo "$IP is up!!!"
                 let  up++    
            else
                        echo "$IP is down!!!"
              let down++        
    
fi
done
       echo "up地址有=$up,down地址有=$down"

要求:down的主机ip地址统计有多少个,up的有多少个??



编写一个shell程序,将1到100之间的所有整数累加求和(即计算1+2+3+4+…+98+99+100的值)

#!/bin/bash
j=0
for ((i=1;i<=100;i++))
do
j=$[$i+$j]
done
echo $j

seq  作用:生成一个数到另一个数之间的所有整数











正则表达式

正则表达式

Linux文本处理工具:
vi编辑器
vim编辑器   yum  install  vim  -y
grep
egrep
sed
awk


正则表达式:
不是一个工具程序,而是一个字符串处理的标准依据,是使单个字符串搜索、匹配一系列符号某个语法规则的字符串

字符串匹配的模式:
作用:用来检查一个串是否包含某种子串,将匹配的子串替换或者某个串取出符合某个条件的子串等

find / -name “a?”
find / -name “a*”
通配符:
?:匹配文件名中含有0个或者1个字符
*:匹配0个或多个字符,一般以......开头


广泛匹配

精确匹配,就要用到正则表达式

^[0-9]+abc$

注:
^:以什么开头
[0-9]:代表数字,匹配单个数字
+:匹配多个,匹配多个数字
abc$:代表以abc结尾



^[a-z0-9_-]{3,15}&
注:
  ^[a-z0-9_-]:^代表以什么开头;a-z代表字母a-z;0-9代表数字0-9;下划线;连字符

{3,15}:3~15字符的长度
$:代表结束标记

 用处:用户注册表单时,只允许用户名包含字母、数字、下划线和连字符并且设置用户名的长度。
用的正则表达式的方式去设置。

运维工作比较繁杂,大量过滤日志文件,化繁为简。

正则表达式的作用:
1、测试字符串的模式,数据验证
2、替换文本
3、基于匹配模式去文本文件中提取出符合条件的内容

应用领域:
系统:UNIX,Linux,HP等操作系统
开发语言:C#,Java,JavaScript,Python,Ruby,PHP

注:
正则表达式:用来查找文件内容、文本、字符串,一般只支持四剑客grep,egrep,sed,awk

通配符:用来查找文件或者目录的,普通命令都支持。find
正则表达式分类:
基础表达式:BRE,常用的正则表达式
扩展正则表达式:ERE,对于基础正则表达式的扩充和深化

什么是基础正则表达式的元字符?
什么是扩展正则表达式的元字符?
grep
egrep
sed
awk









	



基础正则表达式
元字符	作用
\              转义字符,用于取消特殊符号的含义,如:\!、\n等
^              匹配字符串的开始位置,如:^world匹配以world开头的行
$              匹配字符串的结束位置,如:world$匹配以world开头的行
.              匹配除\n(换行)之外的任意一个字符
*              匹配前面的子表达式0次或者多次
[list]            匹配list列表中的一个字符,如:[0-9]匹配任一位数字
[^list]           匹配不在list列表中的一个字符,如:[^0-9]匹配任意一位非数字字符
\{n\}            匹配前面的子表达式n次,如:[0-9]\{2\}匹配两位数字
\{n,\}           匹配前面的子表达式不少于n次,如:[0-9]\{2,\}表示两位及两位以上数字
\{n,m}          匹配前面的子表达式n到m此,如:{a-z}\{2,3\}匹配两到三位的小写字母



                扩展元字符
元字符	作用
+              匹配前面表达式1次以上,如:go+d,将匹配至少一个o
?              匹配前面的子表达式0次或者1次,如go?d,将匹配gd或god
()              将()号中的字符串作为一个整数,如:(xzy)+,将匹配xyz整体1次以上
|              以或的方式匹配字符串,如:good|great,将匹配good或者great






Linux中文本处理工具:
grep(只支持基础正则表达)
egrep(支持扩展正则表达)
sed(支持扩展正则表达)
awk(支持基础正在表达支持扩展正则表达式)


grep工具

-i:忽略大小写
-v:取反
过滤出
过滤掉

grep ‘root’ /etc/passwd   //筛选文件中包含root的行
grep -v ‘root’ /etc/passwd   //筛选文件中不包含root的行
注:-v  表示过滤掉,不显示出来
grep ‘r..d’ /etc/passwd    //筛选r和d之间有两个字符的行
grep ‘[^s]bin’ /etc/passwd   //筛选bin前面不是s的行
grep ‘^$’ /etc/passwd     //筛选出空白行
grep ‘t[es]’ /etc/passwd    //筛选包含字符串te或ts的行
grep ‘0\{1,\}’ /etc/passwd   //查找数字0出现1次及以上的行
grep -e ‘root’ -e ‘sshd’ /etc/passwd     //查找root和sshd的行,-e参数查找多个模式
grep ’[^a-z]ae’ /etc/passwd       //筛选ae前面不是小写字母的行
grep ’^[a-z]ae’ /etc/passwd       //筛选ae前面是小写字母的行
注:当使用连续的字符时,小写字母[a-z],大写字母[A-Z],数字[0-9]
grep ’o*’ /etc/passwd         //匹配所有内容(若有空白行的文件,甚至包括空白行)
注:oo*匹配至少包含一个o的行(第一个o必须出现,第二个0可出现0次或多次)

egrep工具
egrep ‘0+’ /etc/passwd     //匹配至少包含一个0的行
egrep ‘(root|ntp)’ /etc/passwd    //匹配包含root或者nto的行
egrep ‘ro?t’ /etc/passwd     //匹配rt或者rot的行
egrep -v ‘^$|^#’ /etc/passwd    //过滤文件中空白行与#开头的行,没有空白行与#号开头的行,所以没有任何输出

sed工具概述
sed是文本处理工具,读取文本内容,根据指定的条件进行处理,如删除,替换,添加等
可在无交互的情况下实现相当复杂的文本处理操作
被广泛应用于shell脚本,已完成自动化处理任务
sed依赖于正则表达式

命令语法:
sed -e ‘编辑指令’ 文件1 文件2...  注:-e,在’编辑命令’中有”;”来分隔执行命令
sed -n -e ‘编辑指令’文件1 文件2...   -n只显示过滤出内容
sed -i -e ‘编辑指令’ 文件1 文件2...   -i:流编辑器,读一行处理一行

sed命令格式:
编辑命令格式:[地址1,[地址2]]操作[参数]
“地址”,可数字、正则表达式、$,如果没有地址代表是所有行
“操作”,可以是p、d、s、r、w、i等
“参数”,一般有g,代表只要符合条件的全部进行处理(g全部)
常用操作:
p:输出指定的行
d:删除指定的行
s:子串替换,格式:”行范围s/旧字符串/新字符串/g”
r:读取指定条件
w:保存为文件
i:插入,在当前行前面插入一行或多行
输出指定的行:
  sed -n ‘p’ /etc/passwd    //将所有内容输出  cat
  sed -n ‘-7p’ /etc/passwd   //将第7行内容输出
  sed -n ‘$p’ /etc/passwd    //将最后一行输出
  sed -n ‘1,7{p;n}’ /etc/passwd   //将1~7行中的奇数行输出
  sed -n ‘1,7{n;p}’ /etc/passwd   //将1~7行中的偶数行输出
sed -n ‘1,+4p’ /etc/passwd    //从第1行,连续4行进行输出
sed -n ‘/root/p’ /etc/passwd    //将匹配包含root的行进行输出
sed -n ‘10,/nom/p’ /etc/passwd   //将从第10行至第一个包含nom的进行输出
sed -nr ‘/ro{1,}t/p’ /etc/passwd   //匹配不少于1次前导字符0,加-r参数支持扩产展正则表达式   rot root
sed -n’/root\|ntp/p’ /etc/passwd    //输出包含root或者ntp的行 注:如果遇到特殊符号,扩展正则需要转义符”\”
sed -n ‘/root/=’ /etc/passwd      //将包含root所在的行行号输出,“=”用来输出行号
sed -e ‘5q’ /etc/passwd          //输出前五行信息后退出,q退出
sed -e ‘5p ; 7p;9p’ /etc/passwd     //输出5行、7行、9行信息插入符合条件的行:



插入符合条件的行:
sed ‘root/i admin:x:490:490::/:/sbin/nologin’ /etc/passwd   //在包含root行的前面一行插入admin:x:490:490::/:/sbin/nologin
sed ‘/root/a admin:x:490:490::/:/sbin/nologin’ /etc/passwd     //在包含root行的下一行插入admin:x:490:490::/:/sbin/nologin
sed ‘3aADMIN’ /etc/passwd           //在第3行之后插入ADMIN
删除符合要求的行:
  sed ‘1d’ /etc/passwd             //删除第一行
  sed ‘$d’ /etc/passwd             //删除最后一行
  sed ‘/^$/d’ /etc/passwd          //删除所有空行
  sed ‘2,4d’ /etc/passwd           //删除第2到4行
  sed ‘/root/d’ /etc/passwd         //删除包含root的行,这里的”i”表示取反操作
  sed ‘/^root/d’ /etc/passwd        //删除以root开头的行
  sed ‘/nologin$/d’ /etc/passwd     //删除以nologin结尾的行替换成符合条件的文本:
  sed ‘s/root//g’ /etc/passwd       //将文件中所有的root都替换成空   加g替换所有   s:全部内容
  sed ’/root/c admin:x:490:490::/:/sbin/nologin’ /etc/passwd      //将含有root的行为替换为admin:x:490....
  sed -n ‘s/root/admin/2p’ /etc/passwd      //把每行的第2个root替换成admin
  sed ’/root/s/root/ROOT/g’ /etc/passwd       //将第1~3行中的所有bin都替换成BIN
  sed ‘s/$/ABC/’ /etc/passwd         //在每行行尾插入字符串ABC
  sed ‘s/^/#/’ /etc/passwd            //在每行行首插入#号
  sed ‘/root/s /^/#/’ /etc/passwd       //将包含root的行的行首插入#号
  sed ‘1c ABC’ /etc/passwd           //将第一行替换成ABC
  sed ‘y/root/ROOT/’ /etc/passwd       //将root对应替换为ROOT       y:对应替换
  sed ‘/1,10y/root/ROOT/’ /etc/passwd      //将第1~10行中的root对应替换为ROOT
迁移符合条件的文本:
  sed ‘15,16 w out.txt’ test.txt   //另存为
  sed ‘5r /etc/reslov.conf’ test.txt         //将/etc/reslov.conf内容读取的当前文件第五行后面
  sed ‘1,5{H;d};$G’ test.txt             //将第1~5行内容迁移至末尾  注:H,复制到缓冲区。G,追加到指定行后
  sed ‘/^ip/s/^/#/’ test.txt               //在以ip开头的行的行首插入#
  sed ‘1,5H;15,16G’ test.txt



执行多次命令:
  sed -ne ‘s/root/admin/’ -ne ‘s/bash/sh/p’ /etc/passwd     //将root和bash动作替换
  sed -ne ‘s/root/admin/;s/bash/sh/p’ /etc/passwd        //将root和bash动作替换
直接修改文件内容:  有-i直接修改原文件,保存修改后的文件
  sed -i ‘s/^/#/’ /etc/passwd                  //在每行开头插入#号,直接修改原文件



awk工具介绍
awk也是一个功能强大的编辑工具,与sed一样,可在无交互的情况下实现相当复杂的文本操作
命令格式:
awk 选项 '模式或条件 {编辑指令}’ 文件1 文件2
awk -f 脚本文件 文件1 文件2

工作原理:
逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令

awk内置变量
FS:指定每行文本的字段分隔符,缺省为空格或制表位。      注:默认分隔符为空格
NF:当前处理的行的字段个数
NR:当前处理的行的行号(序数)
$0:当前处理的行的整行内容
$n:当前处理行的第n个字段(第n列)

案例:
awk -F: '{print $0,NF}' /etc/passwd       //输出以冒号为分隔的/etc/passwd文件中记录的字段段数
df -hT |awk '{print $1,$6}'        //用awk截取命令df -hT输出的结果,不带任何条件,进行格式化,打印第1列和第6列数据
awk '{print $0}' /etc/passwd       //输出所有内容
cat /etc/passwd    grep ""  /etc/passwd   sed -n 'p' /etc/passwd
打印文本内容:
awk 'NR==1,NR==3{print}' bfile     //输出第1至第3行内容
awk 'NR==1||NR==3{print}' bfile     //输出第1行、第3行内容
awk '/^root/{print}' /etc/passwd    //输出以root开头的行
awk '/nologin$/{print}' /etc/passwd      //输出以nologin结尾的行
awk '(NR>=1)&&(NR<=3){print}' /etc/passwd     //输出第1行到第3行内容
awk "(NR%2)==1{print}' /etc/passwd            //输出所有奇数行的内容
awk '(NR%2)==0{print}' /etc/passwd            //输出所有偶数行的内容
awk -F: '!($3<900)' /etc/passwd                //输出第3个字段不小于900的行,“!”号表示取反


在使用awk的过程中,可以使用关系运算符作为“条件”,用于比较数字与字符串,运算符大于(>)、小于(<)、小于等于(<=)、等于(==)、不等于(!=)
也可使用逻辑操作符&&,表示“与”,||表示“或”,!表示“非”
还可以进行简单的数学运算加(+)、减(—)、乘(*)、除(/)、取余(%)、乘方(^)。
只有当条件为真,才执行指定的动作。

awk -F: '{if($3>200)print $0}' /etc/passwd    //输出第3个字段大于200的行
awk -F: '{max=($3>$4)?$3:$4;print max}' /etc/passwd    
 //如果第3个字段的值大于第4个字段的值,则把问号前表达式的值赋给max,否则就将冒号后那个表达式的值赋给max
awk -F: '{max=($3>200)?$3:$1;print max}' /etc/passwd   // //如果第3个字段的值大于200,则把第3个字段的值赋给max,否则就将第1个字段的值赋给max
在使用awk过程中还可以使用条件表达式,条件表达式的运算涉及两个符号,冒号和问号,其实质就是if...else语句的捷径,有着if...else相同的结果

接字段输出文本
awk -F: '{print NR,$0}' /etc/passwd      //输出处理数据的行号,每处理完一条记录,NR值加1
awk -F":" '$3<5{print $1 $3}'/etc/passwd     //输出第3列小于5的第1列与第3列数据
awk -F ":" '($1~"root")&&(NF==7){print $1,$3}'/etc/passwd      //输出包含7个字段,并且第1个字段中包含root的行第1与第2字段内容
awk -F":" 'NR==3,NR==7{print $1,$7}' /etc/passwd       //输出第3行到第7行中以冒号为分隔符的第1列与第7列的数据

输出数据时插入文本标签:
awk -F: '/^root/{print "Hi," $1}' /etc/passwd        //输出以冒号为分隔符,以root开头的行第一列,且在前面插入“Hi,”
awk '{print $1"--"$3}' 6.txt   //输出第一列和第二列并加入普通字符     引号引用普通字符
awk -F":" '$7~"/bash"{print $1}' /etc/passwd      //输出冒号分隔且第7个字段中包含/bash的行的第1个字段
awk -F':''{print $1":"$2":"$3":"$4}' /etc/passwd    //保留原来的格式,输出以冒号为分隔,/etc/passwd文件的前4个字段
awk -F":" '{print $1,$3}' /etc/passwd               //输出以冒号为分隔符的第1列和第3列
awk 'BEGIN{FS=":"} {print $1,$3}' /etc/passwd       //输出以冒号为分隔符的第1列和第3列
awk 'BEGIN{X=0};/\/bin\/bash$/{x++};END{printx}' /etc/passwd       //统计以/bin/bash为结尾的行数

awk执行顺序:首先执行BEGIN{}中的操作,然后从指定的文件中逐行读取数据,自动更新NF、NR、$0、$1等内建变量的值,去s执行'模式或条件{编辑指令}’;最后执行END{}操作

处理命令输出的结果:
date |awk '{print "Month:"$2"\nYear:"$6}'        //输出日期的第2列且在前面插入Month:,换行输出第6列并在前面插入Year

awk应用案例:
#!/bin/bash
#monitor available disk space
#截取以"/"为结尾的行,打印出第5个字段也就是跟分区使用百分比,截取掉“%”
SPACE='df | sed -ne '/\/$/p' | awk '{print $5}' | sed 's/%//''  或 df | grep "/$" | awk '{print $5}' | awk -F% '{print $1}'
#截取出的数据与90进行相比,大于90给管理员发邮件报警
if [ $SPACE -ge 90 ]             现网磁盘使用率在80~85%
then
echo "Disk spaceis not enough" | mail -s "Disk Alarm"admin@example.com
fi

shell脚本实战:
1、欢迎脚本
为root用户编写登录欢迎脚本,成功登陆后报告当前主机中的进程数、已登录用户数、登陆的用户名、根文件系统的磁盘使用率
"#!/bin/bash
"
#此脚本用于显示进程数,登录的用户数与用户名,根分区的磁盘使用率
echo "已开启进程数:$(($(ps aux | wc -l)-1))"                   #注意要减1
echo "已登录用户数:$(who | wc -l)"
echo "已登录的用户账号:$(who | awk '{print $1}')"
echo "根分区磁盘使用率: $(df -h | grep "/$" | awk '{print $5}')"





2、MAC记录与端口扫描脚本:
记录局域网中各主机的MAC地址,保存到/etc/ethers文件中,若文件已存在,应先转移进行备份;每行一条记录,第1列为Ip地址,第2列为对应的MAC地址。
检查有哪些主机开启了匿名FTP服务,扫描对象为/etc/ehters文件中的所有IP地址,扫描的端口为21.
#!/bin/bash
#定义网段地址、MAC列表文件
NADD="192.168.80."
FILE="/etc/ehters"
#发送ARP请求,并记录反馈结果
[ -f $FILE ] && /bin/cp -f $FILE $FILE.old
HADD=1          #定义起始扫描地址
while [ $HADD -lt 255 ]
do
        arping -c 2 -w 1 ${NADD}${HADD} &> /dev/null       //当有两块网卡的时候,要指定一块网卡去ARP扫描,(加-I 网卡编号)
        if [ $? -eq 0 ];then
          arp -n | grep ${NADD}${HADD} | awk  '{print $1,$3}' >> $FILE
        fi
        let HADD++
done

TARGET=$(awk '{print $1}' /etc/ehters)
echo "以下主机已开放匿名FTP服务:"
for IP in $TARGET
do
        wget ftp://$IP/ $> /dev/null              wget下载工具
        if [ $? -eq 0 ]; then
                echo $IP
                rm -rf index.html                #事先在ftp服务器上准备下载文件,测试后删除
        fi
done

3、开发系统监控脚本:
编写名为sysmon.sh的shell脚本
监控内容包括CPU使用率、内存使用率、根分区的磁盘使用率
百分比只需精确到各位,如:7%、12%、23%等
出现以下任意情况时告警:磁盘占用率超过90%、CPU使用率超过80%、内存使用率超过90%,告警邮件通过mail命令发送到指定邮箱
结合crond服务,每半小时执行一次监控脚本
#!/bin/bash
#提取性能监控指标(磁盘占用、CPU使用、内存使用)
DUG=$(df -h | grep "/$" | awk '{print $5}' | awk -F% '{print $1}')
echo "当前根分区的空间使用情况:${DUG}%"
CUG=$(expr 100 - $(mpstat | tail -l | awk '{print $12}' | awk -F. '{print $2}'))
echo "当前CPU使用情况:${CUG}%"
MUG=$(expr $(free | grep "Mem:" | awk '{print $3}') \* 100 / $(free | grep "Mem:" | awk '{print $2}'))
echo "当前内存使用情况:${MUG}%"
#设置告警日志文件、告警邮箱
ALOG="/tmp/alert.txt"
AMAIL="root@localhost"
#判断是否记录告警
if [ $DUG -gt 80 ]
then
        echo "磁盘占用率:$DUG" >> $ALOG
fi
if [ $CUG -gt 80 ]
then
        echo "CPU占用率:$CUG" >> $ALOG
fi
if [ $MUG -gt 80 ]
then
        echo "内存占用率:$MUG" >> $ALOG
fi
if [ -f $ALOG ]
then
        cat $ALOG | mail -s "Host Alert" $AMAIL
        rm -rf $ALOG
fi


常用选项
-f:忽略大小写
-b:忽略每行前面的空格
-M:按照月份进行排序
-n:按照数字进行排序
-r:反向排序
-u:等同于uniq,表示相同的数据仅显示一行
-t:指定分隔符,默认使用[Tab]键分隔
-o<输出文件>:将排序后的结果转存至指定文件
-k:指定排序区域



语法
unlq  【选项】 参数

选项
-c:进行技术
-d:仅显示重复行
-u:仅显示出现一次的行






防火墙


防火墙:
保证数据的安全性是继数据可用性之后的最为重要的一项工作

防火墙作为公网和内网之间的保护屏障

防火墙种类:
硬件防火墙:网关服务器
软件防火墙:装在操作系统中的软件

防火墙管理工具
主要功能:依据策略对穿越防火墙的自身流量进行过滤。

在centos和RHEL系统中:
firewalld:7版本以上(centos7.x,RHEL7.x)
iptables:6版本(centos6.x,RHEL6.x)


注:iptables和firewalld都不是真正的防火墙,他们都只是定义防火墙策略的防火墙管理工具而已,或者说,他们只是一种服务


firewalld和iptables的区别:
iptables服务会把配置好的防火墙策略交给内核层的
netfilter网络过滤器来处理

firewalld服务会把配置好的防火墙策略交给内核层的nftables包过滤框架来处理

firewalld和iptables的区别:
	firewalld  	iptables
配置文件	/usr/lib/firewalld/
/etc/firewalld/	/etc/sysconfig/iptables
对规则的修改	不需要全部刷新策略,不丢失现行连接	需要全部刷新策略,丢失连接
防火墙类型	动态防火墙 	静态防火墙

	

第一个防火墙管理工具——firewalld

centos1版本以上默认使用的防火墙配置管理工具

拥有基于CLI(命令行界面)和GUI(图形化用户界面)两种管理方式。


定义:基于firewalld服务的防火墙会查询每个网络数据包的头部。
依据头部中包含的信息,可以配置规则来过滤每个数据包。

通过网络发送信息的过程:
信息在通过网络发送之前,会被分解成更小的单元(称为数据包)。
数据包:数据类型、源ip地址、目标ip地址,还有源端口。

数据包通过网络到达目的地,防火墙会检查每一个数据包的头部的字段,按照已配置好的规则,去采取以下动作:
1、允许数据包进入系统
2、如果当前系统时网络间的网关或者路由器,则将数据包转发给其他系统
3、对数据包的传输速率进行限制
4、拒绝数据包,并给原始ip地址发送一条消息
5、丢弃数据包,并且不发送任何类型的信息。

以上都是有关firewalld的基本概念

相较于传统的防火墙管理工具,firewalld支持动态更新技术,并加入了区域(zone)的概念



简单来说,firewalld基于区域,区域就是firewalld预先准备了几套防火墙策略的结合(策略模板),用户可以根据生产环境场景的不同选择合适的策略集合




常见区域:
drop(丢弃)	任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接
block(限制)	任何接收的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohited信息所拒绝
public(公共)	在公共区域内使用,不能相信网络的其他计算机不会对宁的计算机造成危害,只能接收经过选取的连接
external(外部)	特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信他们不会对您的计算机造成危害,只能接收经过选择的连接
dmz(非军事区)	用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接
work(工作)	用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收过选择的连接
home(家庭)	用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接
internal(内部)	用于内部网络。您可以基本上信任网络内的其他计算机。仅仅接收经过限制的连接
trusted(信任)	可接收所有的网络连接

激活一个区域的条件:至少有一个关联接口或者ip地址



firewalld默认区域是public区域


firewall-cmd --get-zones   列出所有fiewalld区域

trusted  home  internal  work  public  external  dmz  block  drop    9大区域

firewall-cmd --get-default   查看fiewalld当前默认区域


注:firewall-cmd  是firewalld防火墙配置管理工具CLI版本使用的命令
interfaces(接口)网卡	与区域相关的网络接口
sources(源地址)	与区域相关的源ip地址
services(服务)	允许通过区域的入战服务
ports(端口)	允许通过区域的目标端口
protocols(协议)	目标端口的协议,tcp、udp
masquerade(伪装)	指定是否启用源网络地址转换(NAT)
forward-ports(转发端口)	端口转发规则(将发送给本地端口的流量映射到同一台或另一台主机上的其他端口上)
source-ports(源端口)	
icmp-blocks(ICMP堵塞)	用于堵塞ICMP信息
rich rules(福规则)	写高级的防火墙规则


常见区域元素:

注:如果使用多个区域的话,必须有关联源地址或接口


firewalld拥有两种配置模式:
1、运行时配置(runtime)  当前生效模式,重启会生效
2、永久配置模式(permanent) 不会立即生效,只会重新启动或者重加载才会生效。


firewalld配置方法:
1、firewall-cmd  命令行,终端管理工具
2、firewall-config  图形化界面工具
3、/etc/firewalld中的配置文件
/etc/firewalld:用户自定义配置文件存放目录,可以在、/usr/lib/firewalld中拷贝模板,优先读取

/usr/bil/firewalld:默认配置文件








firewalld操作

查看:
firewall-cmd --get-区域元素名    查看指定的元素有哪些
firewall-cmd --get-default-zone    查看firewall默认区域

firewall-cmd --set-default-zone=区域名    设置firewalld默认区域

永久生效:
firewall-cmd --set-default-zone=区域名 --permanent


firewall-cmd --get-active-zone   查看当前正在运行的区域


网卡
firewall-cmd --zone=work --add-interface=网卡名称  添加一块网卡到指定区域中

firewall-cmd --get-zone-of-interfce=网卡名称查看指定网卡所在区域


firewall-cmd --zone=work --change-interface=网卡名称  为指定区域更改网卡


firewall-cmd --zone=work --remove-interface=网卡名称为指定区域删除某块网卡


firewall-cmd --zone=区域名 --query-unterface=网卡名称判断指定区域中有没有该网卡

firewall-cmd --list-all-zones  查看所有区域里面的详细信息

firewall-cmd --zone=区域 --list-all   查看指定区域的详细信息

firewall-cmd --list-all   当没有 --zone的选项,查看的是默认区域中详细信息

源ip地址:
firewall-cmd --zone=work --add-source=源ip地址为指定区域添加源ip地址
firewall-cmd --zone=work --remove-source=源ip地址为指定区域删除ip地址





--add添加
--remove  删除
--query   判断有没有这个
--list    查看
服务操作

端口协议

端口转发

富规则

iptables

在同一台服务器中端口转发:
firewall-cmd --add=foreward-port=port=源端口:proto=协议:toport=目的端口

192.168.80.101:8000相当于访问192.168.80.101.80

在不同服务器上端口转发:
firewall-cmd --add=foreward-port=port=源端口:proto=协议:toport=目的端口:toaddr=目标服务器ip地址


例子
192.168.80.101
firewall-cmd --add=foreward-port=port=8000:proto=tcp:toport=80:toaddr=192.168.80.100

访问192.168.80.101:8000相当于192.168.80.100:80



直接规则:
就是使用iptables防火墙管理工具语句去设置firwalld策略
firewall-cmd --direct --add-rule ipv4 filter  IN_work_allow 0 -p tcp --dport 9000 -j ACCEPT

source   源地址
destination   目标地址

区域元素:
service    服务
port    端口
protocol   协议
icmp-block    icmp阻塞
masquerade    ip伪装
forward-port   端口转发

操作:
ACCEPT:允许
reject:拒绝
drop:丢弃

拒绝来自某个ip地址或者网段的所有流量
firewall-cmd  --permanent --zone=work --add-rich-rule='rule family=ipv4  source address=源ip地址/网段  reject'

允许来自192.168.1.0/24网段的流量访问tcp的8000到9000端口
firewall-cmd  --permanent --zone=work  --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24  port  port=8000-9000 protocol=tcp accept'

只要是icmp协议的流量都丢弃
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'

允许192.168.8.1主机访问HTTP服务,记录日志,日志标记NEW HTTP
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.8.1/32 service name="http" log level=notice prefix="NEW HTTP " limit value="3/s" accept'


针对端口转发:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.80.0/24  forward-port  port=8000 protocol=tcp to-port=80 ' 

firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.80.0/24  forward-port  port=8000 protocol=tcp to-port=80 to-addr=192.168.80.103' 



LAMP
LNMP
tomcat
mysql
mangodb
orcacle
集群:lvs、keepalived、nginxn
缓存:memcache、redis、squid、varnish、nginx
分布式:rsync、MFS、GFS、ELK
百万PV、千万PV
自动化运维:puppet、ansible、saltstack
虚拟化:kvm、exsi、xen
docker容器
监控:cacti(仙人掌),Nagios(难搞死),zabbix
openstack
Hbase
Hdoop



以上是老师的





source   源地址
destination   目标地址

区域元素:
service    服务
port    端口
protocol   协议
icmp-block    icmp阻塞
masquerade    ip伪装
forward-port   端口转发

操作:
ACCEPT:允许
reject:拒绝
drop:丢弃

拒绝来自某个ip地址或者网段的所有流量
firewall-cmd  --permanent --zone=work --add-rich-rule='rule family=ipv4  source address=源ip地址/网段  reject'

允许来自192.168.1.0/24网段的流量访问tcp的8000到9000端口
firewall-cmd  --permanent --zone=work  --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24  port  port=8000-9000 protocol=tcp accept'

只要是icmp协议的流量都丢弃
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'

允许192.168.8.1主机访问HTTP服务,记录日志,日志标记NEW HTTP
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.8.1/32 service name="http" log level=notice prefix="NEW HTTP " limit value="3/s" accept'


针对端口转发:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.80.0/24  forward-port  port=8000 protocol=tcp to-port=80 ' 

firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.80.0/24  forward-port  port=8000 protocol=tcp to-port=80 to-addr=192.168.80.103' 


显示internal区域内允许访问的所有服务
Firewall-cmd --zone=internal --list-services
为public区域设置允许防卫SMTP服务
Firewall-cmd --zone=public --add-service=smtp
删除internal区域中的SSH服务
Firewall-cmd --zone=internal --remove-service=ssh
查询internal区域中是否启用了SSH服务
Firewall-cmd --zone=internal --query-service=ssh

[--zone=<zone>] --list-services	显示指定区域内允许访问的所有服务
[--zone=<zone>] --add-service=<service>	为指定区域设置允许访问的某项服务
[--zone=<zone>] --remove-service=<service>	删除指定区域已设置的允许访问的某项服务
[--zone=<zone>] --query-service=<service>	查询指定区域中是否启用了某项服务

显示internal区域内允许访问的所有端口号
Firewall-cmd --zone=internal --list-ports
启用interna区域22端口的tcp协议组合
Firewall-cmd --zone=internal --add-port=22/tcp --timeout=5m
禁用internal区域22端口的tcp协议组合
Firewall-cmd --zone=internal --remove-port=22/tcp
查询internal区域中是否启用了22端口和tcp协议组合
Firewall-cmd --zone=internal --query-port=22/tcp

显示work区域内阻塞的所有ICMP类型
Firewall-cmd --zone=work --list-icmp-blocks
为wokr区域设置阻塞echo-reply类型的ICMP
Firewall-cmd --zone=work --add-icmp-block=echo-reply
删除work区域已阻塞的echo-reply类型的ICMP
Firewall-cmd --zone=work --remove-icmp-block=echo-reply
查询work区域的echo-request类型的ICMP是否阻塞
Firewall-cmd --zone=work --query-icmp-block=echo-request



[--zone=<zone>] --list-icmp-blocks	显示指定区域内阻塞的所有ICMP类型
[--zone=<zone>]	--add-icmp-block=<icmptype>	为指定区域设置阻塞的某项ICMP类型
[--zone=<zone>] --remove-icmp-block=<icmptype>		删除指定区域已阻塞的某项ICMP类型
[--zone=<zone>] --query-icmp-block=<icmptype> 	查询指定区域的ICMP阻塞功能

配置ICMP阻塞
Firewall-cmd --permanent --zone=work --list-icmp-blocks
Firewall-cmd --permanent --zone=work --add-icmp-block=ehco-request
Firewall-cmd --permanent --zone=work --list-icmp-blocks
绑定区域
Firewall-cmd --get-active-zone
Firewall-cmd --permanent --zone=work --add-source=192.168.8.130
Firewall-cmd --permanent --zone=internal --add-source=192.168.80.150
Firewall-cmd --reload
Firewall-cmd --get-active-zone

firewalld支持两种类型的网络地址转换
·IP地址伪装(masquerade)
·可以实现局域网多个地址共享单一公网地址上网
·IP地址伪装仅支持IPv4,不支持IPv6
·默认external区域启用地址伪装
·端口转发(forward-port)
·也称为目的地址转换或端口映射
·通过端口转发,指定IP地址及端口的流量将转发到相同计算机上的不同端口,或者转发到不同计算机上的端口
地址伪装配置
·为指定区域增加地址伪装功能
Firewall-cmd[--permanent][--zone=zone]--add-masquerade[--timeout=seconds]  		
·timeout=seconds:在一段时间后自动删除该功能
·为指定区域删除地址伪装功能
Firewall-cmd [--permanent][--zone=zone] --remove-masquerade
·查询指定区域是否开启地址伪装功能
Firewall-cmd [--permanent] [--zone=zone] --query-masquerade
端口转发配置
·列出端口转发配置
Firewall-cmd [--permanent][--zone=zone] --list-forward-ports
·添加端口转发规则
firewall-cmd[-permanent][-zone=zone]-add-forward-port-port=portid-portid]:proto=procol:toportportid-porid]l:toaddr=address[/mask][-timeout=seconds]
·删除端口转发规则
firewall-cmd[-permanent[-zone=zone]-remove-forward-port-port-portid[-portid]:proto=protocol[:toport=portid-portid]][:toaddr-address[/maskil
·查询端口转发规则
firewall-cmd[-permanent][-zone=zone]-query-foward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]

在同一台服务器中端口转发:
Firewall-cmd --add-forward-port=port=源端口:proto=协议:toport=目的端口
192.168.80.101:8000相当于访问192.168.80.101:80
在不同服务器上端口转发:
Firewall-cmd --add-forward-port=port=源端口:proto=协议:toport =目的端口:toaddr=目标服务器IP地址

192.168.80.101
Firewall-cmd --add-forward-port=port=8000:proto=tcp:toport=目的端口:toaddr=192.168.80.100

直接规则(direct interface)
·允许管理员手动编写的iptables、ip6tables和ebtables规则插入到firewalld管理的区域中
·通过firewall-cmd命令中的--direct选项实现
·除显示插入方式之外,优先匹配直接规则
自定义规则链
·firewalld自动为配置了规则的区域创建自定义规则链
·IN_区域名_deny:存放拒绝语句,优先于“IN_区域名_allow”的规则
·IN_区域名_allow:存放允许语句
·允许TCP/9000端口的入站流量
Firewall-cmd --direct --add-rule ipv5 filter IN_work_allow 0 -p tcp --dport 9000 -j ACCEPT
·IN_work_allow:匹配work区域的规则链
·0:代表规则优先级最高,放置在规则组前面
·可以增加——permanent选项表示永久配置
·查询所有的直接规则
Firewall-cmd --direct --get-all-rules
Ipv4 filter IN_work_allow 0 -p tcp --adport 9000 -j ACCEPT
·可以增加——permanent选项表示查看永久配置

例子:
192.168.80.101
Fiewall-cmd --add-forward-port=port=8000:proto=tcp:toport=80;toaddr=192.168.80.100
访问192.168.80.101:8000相当于192.168.80.100:80

直接规则:
就是使用iptables防火墙管理工具语句去设置firwalld策略
Firewall-cmd --direct --add-rule ipv4 filter 
IN_work_allow 0 -p tcp --dport 9000 -j ACCEPT

富语言(rich language)
·表达性配置语言,无需了解iptables语法
·用于表达基本的允许/拒绝规则、配置记录(面向syslog和auditd)

理解富语言规则命令
·firewall-cmd处理富语言规则的常用选项
-add-rich-rule = ‘RULE’ 向指定区域中添加RULE,如果没有指定区域,则为默认区域
--romove-rich-rule=’RULE’ 从指定区域中删除RULE,如果没有指定区域,则为默认区域
--query-rich-rule=’RULE’  查询RULE是否已添加到指定区域,如果未指定区域,则为默认区域,规则存在,则返回0,否则返回1
--list-rich-rules		输出指定区域的所有富规则,如果未指定区域,则为默认区域

已配置富语言规则显示方式
·firewall-cmd --list-all
·firewall-cmd --list-all-zones
·--list-rich-rules
富语言规则具体语法
·source、destination、element、service、port、protocol、icmp-block、masquerade、forward-port、log、audit、accept|reject|drop

















防火墙的分类
硬件防火墙,如思科的ASA防火墙,H3C的Secpath防火墙等软件防火增,如大名跟鼎的iptables等
#网络中的防火墙,是一种将内部网和外部网络分开的方法,是一种隔离技术
防火墙在内网与外网通信时进行访问控制,依据所设置的规则对数据包作出判断,最大限度地阻止网络中的黑客破坏企业网络,从而加强了企业网络安全


                    防火墙的概念与作用
防火墙有以下作用
通过设定的规则,保障企业网络安全,使得企业数据不受到破坏,保护企业利益在单台主机上设置防火墙,保护主机数据安全
在企业网关上设置防火墙,加固企业网络安全


                     Linux包过滤防火墙概述

Linux操作系统中默认内置一个软件防火墙,即iptables防火墙出
 netfilter位于Linux内核中的包过滤功能体系称为Linux防火墙的“内核态”
iptables位于/sbin/iptables,用来管理防火墙规则的工具称为Linux防火墙的“用户态”
包过滤的工作层次
主要是网络层,针对IP数据包体现在对包内的IP地址、端口等信息的处理上





                    iptables规则链
规则链
规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机

默认包括5种规则链
INPUT:处理入站数据包
VOUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包



ptables规则链
出默认包括5种规则链
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包



                     ptables规则表
规则表
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
默认包括4个规则表
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)









                          iptables四规则表
规则表之间的顺序
raw>mangle->nat->filter
规则链之间的顺序
入站:PREROUTING>INPUT
出站:OUTPUT->POSTROUTING
转发:
PREROUING>FORWARD>POSTROUTING
规则链内的匹配顺序
按顺序依次检查,匹配即停止(LOG策略例外)若找不到相匹配规则,按该链的默认策略处理




                                iptables命令语法
语法构成
iptables[-t表名]选项[链名][条件][-j控制类型]
几个注意事项
不指定表名时,默认指filter表不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
      选项、链名、控制类型使用大写字母,其余均为小写
数据包的常见控制类型
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续
匹配
[root@localhost ~]#iptables -t filter -I NPUT -p icmp -j REJECT



iptables的规则操作

出添加新的规则
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序号)插入一条规则
[root@localhost~]#iptables -t filter -A INPUT -ptcp -j ACCEPT
[root@localhost~]#iptables -1 INPUT -p udp -j ACCEPT
[root@localhost ~]#iptables -1 INPUT 2 -p icmp -j ACCEPT


查看规则列表
-L:列出所有的规则条目
-n:以数字形式显示地址、端口等信息
-V:以更详细的方式显示规则信息
--line-numbers:查看规则时,显示规则的序号

[ root@ localhost ~]# iptables -n -L INPUT Chain INPUT (policy ACCEPT)
target      prot opt source    destination 
ACCEPT   udp--0.0.0.0/0     0.0.0.0/0
ACCEPT    icmp--0.0.0.0/0    0.0.0.0/0


删除、清空规则
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则
[root@localhost ~]#iptables -D INPUT3
[root@localhost ~]#iptables -n -L INPUT
[root@localhost ~]#iptables -t nat -F
[root@localhost ~]#iptables -t mangle -F


设置默认策略
-P:为指定的链设置默认规则
[root@localhost ~]#iptables -t filter -P FORWARD DROP
[root@localhost ~]#iptables -P OUTPUT ACCEPT

         
                规则的四匹配
iptables规则的匹配类型有三类
通用匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址、网络接口等条件
隐含匹配
要求以特定的协议匹配作为前提
包括端口、TCP标记、ICMP类型等条件
显式匹配
要求以“-m扩展模块”的形式明确指出类型
包括多端口、MAC地址、IP范围、数据包状态等条件


                   通用匹配
常见的通用匹配条件
协议匹配:-p协议名
地址匹配:-s源地址、-d目的地址
接口匹配:-i入站网卡、-o出站网卡
[root@localhost ~]# iptables -I INPUT -p icmp -j DROP
[root@localhost ~]# iptables -A FORWARD ! -p icmp -j ACCEPT
[root@localhost~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
[root@localhost~]# iptables -I INPUT -s 10.20.30.0/24 -j DROP
[root@localhost~]# iptables -A INPUT -i eth1-s 192.168.0.0/16 -j DROP
[root@localhost~]# iptables -A INPUT -i eth1-s 10.0.0.0/8 -j DROP
[root@localhost~]# iptables -A INPUT -i eth1-s 172.16.0.0/12 -j DROP



隐含匹配
常用的隐含匹配条件
端口匹配:spot源端口、-dport目的端口       
# 允许为网段192.168.4.0/24转发DNS查询包
[root@localhost-]#iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
[root@localhost~]#iptables -A FORWARD -d 192.168.4.0/24 -p udp --sport 53 -j ACCEPT

#构建vsftpd时,开放20、21端口,以及用于被动模式的端口范围为24500~24600
troot@localhost-~]#iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost-]#iptables -A INPUT -p tcp --dport 24500:24600 -j ACCEPT


TCP标记匹配:--tcp-flags 检查范围被设置的标记
[root@localhost~]#iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP
[root@localhost~]#iptables -I INPUT-ieth1-p tcp!--tcp-flags SYN,RST,ACK SYN -j ACCEPT
#丢弃SYN请求包,放行其他包


ICMP类型匹配:--icmp-type ICMP类型
[root@localhost~]f#iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@localhost~]#iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@localhost~]f#iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
[root@localhost~]f#iptables -A INPUT -p icmp -j DROP
#帮助:iptables-picmp-h


常用的显式匹配条件
多端口匹配:-m multiport --sports 源端口列表
            -m multiport --dports 目的端口列表
IP范围匹配:-m iprange --src-range IP范围
MAC地址匹配:-m mac --mac-source MAC地址
状态匹配:-m state --state 连接状态


多端口匹配:-m multiport --sports 源端口列表
-m multiport --dports 目的端口列表
[root@localhost~]#iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143-jACCEPT


IP范围匹配:-m iprange --src-range IP范围
[root@localhost~]#iptables -A FORWARD -p tcp -m iprange --src- range 192.168.4.21-192.168.4.28 -j ACCEPT


MAC地址匹配:-m mac --mac-source MAC地址
[root@localhost~]#iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROPA


状态匹配:-m state --state连接状态
常见的连接状态包括:
NEW:与任何连接无关的
ESTABLISHED:响应请求或已建立连接的
RELATED:与已有连接有相关性的,如FTP数据连接
[root@localhost~]#iptables -P INPUT DROP
[root@localhost]#iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
[root@localhost]#iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
#只开放本机的Web服务,但对发给本机的TCP应答报文予以放行,其他入站报文均丢弃





通用匹配	协议匹配	-p协议名
	地址匹配	-s源地址、-d目的地址
	接口匹配	-i入站网卡、-o出站网卡

隐含匹配	端口匹配     	--sport源端口、--dport目的端口
	TCP标记匹配  	--tcp-flags检查范围被设置的标记
	ICMP类型匹配	-- i cmp- type ICMP类型


显式匹配	多端口匹配    	-m mul tiport --sports | --dports 端口列表
	IP范围匹配   	-m iprange --src- range IP范围显式匹配
	MAC地址匹配	-m mac -- mac- source MAC地址
	状态匹配     	-m state --state连接状态


IPtables中规则、规则链、规则表的关系
多条规则组成规则链,规则链在规则表中,规则链中设置默认策略










iptables-从入门到OK (1)




iptables -L 

iptables -L INPUT 

iptables -n --line -L

iptables -D INPUT 3

iptables -F

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

--------以下是主机型防火墙的典型配置-----

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

iptables -P INPUT DROP   ACCEPT

iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT

iptables -P OUTPUT DROP

---------以上是允许SSH远程管理的------

iptables -I INPUT -p icmp --icmp-type 8 -j DROP

iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT

iptables -I INPUT -p icmp --icmp-type 3 -j ACCEPT

iptables -I OUTPUT -p icmp --icmp-type 8 -j ACCEPT

---------以上是允许服务器ping其它主机,但是其它主机不能PING通过服务器--


iptables -I INPUT -p tcp --dport 21 -j ACCEPT

iptables -I OUTPUT -p tcp --sport 21 -j ACCEPT

iptables -I OUTPUT -p tcp --sport 20 -j ACCEPT
iptables -I INPUT -p tcp --dport 20 -j ACCEPT

------以上是ftp服务主动模式下iptables的配置-----

iptables -I INPUT -p tcp --dport 25100:25600 -j ACCEPT

iptables -I OUTPUT -p tcp --sport 25100:25600 -j ACCEPT

-----以上是被动模式------

 iptables -A FORWARD -s 192.168.80.188 -d 192.168.90.181 -p tcp --dport 21 -j DROP 
 

iptables -A FORWARD -s 192.168.80.0/24 -d 192.168.90.181 -p tcp --dport 21 -j DROP 
 

iptables -A FORWARD -s 192.168.80.0/24 -d 192.168.90.0/24 -p tcp --dport 21 -j DROP


iptables -A FORWARD -s 192.168.80.0/24  -p tcp --dport 21 -j DROP


------------以上是做上网行为控制-------

前提是:
       局域网各主机正确设置IP地址/子网掩码
       局域网各主机正确设置默认网关地址
       Linux有路由转发功能

iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens37 -j SNAT --to-source 192.168.90.182
注:
-s 192.168.80.0/24 办公室或IDC内网网段。
-o ens37 为网关的外网卡接口。
-j SNAT --to-source 192.168.90.182 是网关外网卡IP地址。

适合于有固定外网地址的

--------------以上是源NAT转换,用来使私网主机可以上网------

适合变化外网地址(ADSL):

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE 



iptables -t nat -A PREROUTING -i ens33 -d 192.168.80.182 -p tcp --dport 80 -j DNAT --to 192.168.90.181


映射端口192.168.80.182的80映射到192.168.90.181

微软上查看活动连接状态:netstat -a -n -p tcp

----------------以上是目标NAT---------------

方法一:
iptables-save > /opt/ip.txt

vi /etc/profile

iptables-restore < /opt/ip.txt


方法二:
/etc/init.d/iptables save
      
写入配置件/etc/sysconfig/iptables

并重启服务 /etc/init.d/iptables reload

-------------以上是保存防火墙的配置------------

systemctl enable iptables

——————————转发功能————
方法一:
echo 1 > /proc/sys/net/ipv4/ip_forward
方法二:
vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

sysctl -p //生效






地址转发




vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

sysctl -p //生效

1、让内网通过外网卡上网
方法一:
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens37 -j SNAT --to 192.168.90.100
方法二:
iptables -t nat -A POSTROUTING -s 192.168.80.100 -o ens37 -j SNAT --to 192.168.90.100

注:192.168.80.100是内网卡ip地址
    192.168.90.100是外网卡ip地址
客户端和内网服务器必须都要指定网关,否则无效


2、当外部客户端访问外部地址(90.100)时,服务器将请求转发给内网服务器(80.102)
iptables -t nat -A PREROUTING -i ens33 -d 192.168.90.100 -p tcp --dport 80 -j DNAT --to 192.168.80.102

注:同样客户端和内网服务器都需要网关






	







第四本书




LAMP

LAMP架构:
L——Linux系统
A——Apache服务
M——MySQL(数据库)
P——php、python、perl等编程语言

安装LAMP有两种方法:
方法一:yum去安装
方法二:源码编译去安装



yum安装的Apache的配置文件路径:
/etc/httpd/conf/httpd.conf


yum安装的Apache网页根目录:/var/www/html


源码编译的Apache配置文件路径:
/usr/local/httpd/conf/httpd.conf
源码编译的Apache网页根目录:
/usr/local/httpd/htdoce






yum安装LAMP



centos中安装Apache、Mysql、Php,安装全程选择的用户为root。

1、准备工作:
虚拟机要能上网
systemctl  stop  firewalld
seteforce 0

安装wget
yum install -y  wget

2、部署apache:
yum install -y httpd

systemctl start httpd
systemctl enable httpd

查看apache版本:
httpd -v

防火墙策略:
开启80端口
firewall-cmd --add-port=80/tcp --permanent

systemctl  restart firewalld

3、部署mysql(mariadb)
获取rpm软件包:
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

安装rpm包
rpm -ivh mysql-community-release-el7-5.noarch.rpm

安装mysql 
yum install -y mysql-community-server

启动 
systemctl start mysql
systemctl enable mysql

修改root密码并设置允许远程连接
进入mysql  
mysql -uroot

设置root密码为123456
set password for 'root'@'localhost' =password('123456');

设置允许用root账户进行远程连接,并设置其密码为123456
grant all privileges on *.* to root@'%'identified by '123456';

修改的配置立即生效
flush privileges;

退出:
exit

查看mysql版本
mysql -V

5、部署php
yum install -y php

安装组件是php支持mysql 
yum install -y \
php-mysql \
php-gd \
libjpeg* \
php-ldap \
php-odbc \
php-pear \
php-xml \
php-xmlrpc \
php-mbstring \
php-bcmath \
php-mhash

查看php版本 
php --version

vi /etc/httpd/conf/httpd.conf
ServerName www.aa.com
DirectoryIndex index.html index.php

vi /etc/php.ini
date.timezone = PRC    日期时区=×××



查看详细信息
vi /var/www/html/index.php 
验证Apache支持php语言

<?php
phpinfo();
?>

浏览器输入:http://192.168.80.100


测试数据库工作是否正常-----
<?php
$link=mysql_connect('192.168.80.100','mail','123456');
if($link) echo "Success!!";
else echo "Fail!!";
mysql_close();
?>


mysql_secure_installation
y-n-y-y

systemctl restart mysql

刷新网页即可








LAMP-7.4

http://httpd.apache.org/download.cgi
http://apr.apache.org/download.cgi
http://mirrors.sohu.com/mysql/
http://www.php.net/downloads.php
https://www.phpmyadmin.net/
http://www.awstats.org/#DOWNLOAD

-----------使用MD5校验文件完整性-------
1、下载文件如httpd-2.4.29.tar.bz2
2、将网站上该文件的MD5值复制到文件 httpd-2.4.29.tar.bz2.md5 中
3、使用 md5sum  -c  httpd-2.4.29.tar.bz2.md5 校验,如果OK就没有问题。


------------安装Apache----下面两个插件是httpd2.4以后的版本所需要-----
tar xf apr-1.6.2.tar.gz
tar xf apr-util-1.6.0.tar.gz
tar xf httpd-2.4.28.tar.gz
mv apr-1.6.2 httpd-2.4.28/srclib/apr
mv apr-util-1.6.0 httpd-2.4.28/srclib/apr-util

yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl

cd httpd-2.4.28

./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi

make && make install

cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
vi /etc/init.d/httpd

# chkconfig: 35 85 21  //35级别自动运行  第85个启动 第21个关闭
# description: Apache is a World Wide Web server

chkconfig --add httpd //将httpd加入到service管理器

vi /usr/local/httpd/conf/httpd.conf
ServerName 

ln -s /usr/local/httpd/conf/httpd.conf /etc/
ln -s /usr/local/httpd/bin/* /usr/local/bin/

systemctl stop firewalld.service
setenforce 0

service httpd start
netstat -anpt | grep 80

---------------以下安装mysql------------------------
yum -y install \
ncurses \
ncurses-devel \
bison \
cmake

useradd -s /sbin/nologin  mysql

tar xf mysql-boost-5.7.20.tar.gz
cd mysql-5.7.20/

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost -DWITH_SYSTEMD=1

注:
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \           mysql安装的根目录
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \      设置mysql.sock路径,必须是绝对路径,默认是/tmp/mysql.sock
-DSYSCONFDIR=/etc \          mysql配置文件所在目录
-DSYSTEMD_PID_DIR=/usr/local/mysql \          //pid文件路径
-DDEFAULT_CHARSET=utf8  \            设置mysql的默认字符集为utf-8
-DDEFAULT_COLLATION=utf8_general_ci \       设置默认字符集校对规则
-DWITH_INNOBASE_STORAGE_ENGINE=1 \           //以下为优化参数,存储引擎选项,静态编译一个存储引擎到服务器,1为开启,添加INNOBASE引擎支持不加建表时报错
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \             添加ARCHIVE引擎支持,不加建表时报错
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \          添加BLACKHOLE引擎支持 ,不加建表时报错
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \          添加PERFSCHEMA引擎支持,不加建表时报错
-DMYSQL_DATADIR=/usr/local/mysql/data \       mysql数据库文件存放目录
-DWITH_BOOST=boost \            指向boost库所在目录                        
-DWITH_SYSTEMD=1
        可以使用systemd控制mysql服务

-DWITH_PARTITION_STORAGE_ENGINE=1 安装支持数据库分区
方式一:
make && make install

方式二: 
make -j4(真机几核的双倍)
make install

chown -R mysql:mysql /usr/local/mysql/


-----
vi /etc/my.cnf      MySQL默认主配置文件
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock  设置sock文件位置

[mysql]
port = 3306
default-character-set=utf8  设置mysql客户端默认字符集
socket = /usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir = /usr/local/mysql   设置mysql的安装目录
datadir = /usr/local/mysql/data   设置mysql数据库的数据的存放目录
port = 3306   设置3306端口
character_set_server=utf8    创建新表时将使用的默认存储引擎
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock  
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

----
数据库模式,固定格式

chown mysql:mysql /etc/my.cnf

echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile    方便Linux系统识别
echo 'export PATH' >> /etc/profile
source /etc/profile

cd /usr/local/mysql/     在安装目录中进行初始化

bin/mysqld \      初始化数据库
--initialize-insecure \
--user=mysql \    用户
--basedir=/usr/local/mysql \   基础目录
--datadir=/usr/local/mysql/data   工作目录

cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/    添加到system管理器

systemctl daemon-reload     加载
systemctl start mysqld
netstat -anpt | grep 3306

systemctl enable mysqld

mysqladmin -u root -p password "abc123" //给root账号设置密码为abc123 ,提示输入的是初始密码时,直接回车

mysql -u root -p  设置有密码的情况下,要加-p

-----------------以下安装PHP-----------

yum -y install \         PHP配置插件
libjpeg \
libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 \
libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel


----------------以下两行可能用不到,如果报错有perl的,使用以下两行
vi /usr/local/httpd/bin/apxs     
#!/usr/bin/perl -w                ----


tar xjvf php-7.1.10.tar.bz2
cd php-7.1.10
./configure \
--prefix=/usr/local/php \               //定制
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql-sock=/usr/local/mysql/mysql.sock \     PHP的Unix socket通信文件
--with-mysqli \
--with-zlib \    
--with-curl \    允许curl扩展
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-mbstring \
--enable-xml \
--enable-session \    允许php会话session
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip



make && make install

cp php.ini-development /usr/local/php/lib/php.ini
vi /usr/local/php/lib/php.ini

mysqli.default_socket = /usr/local/mysql/mysql.sock   指定sock文件位置
date.timezone = Asia/Shanghai   更改时区

/usr/local/php/bin/php -m //验证安装的模块

vi /etc/httpd.conf //在合适位置新增,相近原则

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

DirectoryIndex index.php index.html

rm -f /usr/local/httpd/htdocs/index.html

vi /usr/local/httpd/htdocs/index.php

<?php
phpinfo();
?>

http://192.168.80.182/


--------下面测试数据库工作是否正常-----
mysql -u root -p

CREATE DATABASE myadm;   创建新的数据库mydam
GRANT all ON myadm.* TO 'myadm'@'%' IDENTIFIED BY 'admin123';   允许用户mydam在任何地方通过admin123登录
GRANT all ON myadm.* TO 'myadm'@'localhost' IDENTIFIED BY 'admin123';  最大化权限
flush privileges;

vi /usr/local/httpd/htdocs/index.php

<?php
$link=mysqli_connect('192.168.80.182','myadm','admin123');
if($link) echo "Success!!";
else echo "Fail!!";
?>



---以下安装phpMyadmin------

unzip phpMyAdmin-4.7.6-all-languages.zip -d /opt/
mv phpMyAdmin-4.7.6-all-languages /usr/local/httpd/htdocs/myadm
cd /usr/local/httpd/htdocs/myadm
cp config.sample.inc.php config.inc.php

vi config.inc.php

$cfg['Servers'][$i]['host'] = '127.0.0.1'; //把localhost 改成IP 31行

http://192.168.80.182/myadm

管理数据库:使用root以及前面为root配置的密码登录管理系统


mv htcos/* ./







                       apache优化








1、更改apache的默认用户
通过更改apache的默认用户,可以提升apache的安全性。这样,即使apache服务被攻破,黑客拿到apache普通用户也不会对系统和其他应用造成破坏。这里创建的apache用户,将用于对子进程和线程的控制。

 useradd -M -s /sbin/nologin apache 创建apache用户

编辑apache配置文件,修改默认的用户。

vim /usr/local/apache/conf/httpd.conf

User apache #更改默认的daemon用户为apache用户

Group apache #更改默认的daemon用户为apache用户



2、Apache连接保持(keepalive)
在Apache的httpd.conf中,KeepAlive指的是保持连接活跃,类似于Mysql的永久连接。换一句话说,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。
 KeepAlive的连接活跃时间当然是受KeepAliveTimeOut限制的。如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会中断,再新建第二个连接。   

所以,一般情况下,图片较多的网站应该把KeepAlive设为On。但是KeepAliveTimeOut应该设置为多少秒就是一个值得讨论的问题了。   

如果KeepAliveTimeOut设置的时间过短,例如设置为1秒,那么APACHE就会频繁的建立新连接,当然会耗费不少的资源;反过来,如果KeepAliveTimeOut设置的时间过长,例如设置为300秒,那么APACHE中肯定有很多无用的连接会占用服务器的资源,也不是一件好事。  

所以,到底要把KeepAliveTimeOut设置为多少,要看网站的流量、服务器的配置而定。

如何去设置开启关闭连接保持?操作如下:
vi /usr/local/httpd/conf/extra/httpd-default.conf
KeepAlive On    //打开连接保持功能
MaxKeepAliveRequests 100  //一次连接最多请求100个文件
KeepAliveTimeout 5   //单位是秒

3、配置访问控制


vi /usr/local/httpd/conf/httpd.conf    //对htdocs目录设置控制,直接新增两行。
找到/usr/local/httpd/htdocs
Order deny,allow    //黑名单,先拒绝后允许

Deny from 192.168.80.0/24
拒绝192.168.80.1,允许其它所有

Require  all  granted    允许所有来源访问
Require  all  deny         拒绝所有来源访问

Require   local    仅本机访问

基于IP地址的访问控制
Require ip 10 172.20 192.168.2    
允许特定IP或IP段,多个IP或IP段间使用空格分隔

基于主机名的访问控制
Require host example.org
Require host .net example.edu





4、配置认证访问:
 vi conf.d/vdir.conf
AuthName "kgc.cn" 
AuthType Basic
AuthUserFile /usr/local/httpd/user
require valid-user

________________________________________________
注:
 AuthName:定义提示信息,用户访问时提示信息会出现在认证的对话框中
AuthType:定义认证类型,basic 基本认证
AuthUserFile:定义包含用户名和密码的文本文件,每行一对
AuthGroupFile:定义包含用户组和组成员的文本文件。组成员之间用空格分开,如:group1:user1 user2
require命令:定义哪些用户或组才能被授权访问
  require user user1 user2 (只有用户user1和user2可以访问)
  requires groups group1 (只有group1中的成员可以访问)  
    require valid-user (在AuthUserFile指定的文件中的所有用户都可以访问
________________________________________________


apachectl -t

htpasswd -c /usr/local/httpd/user test 
//新建数据文件/usr/local/httpd/user,其中包含一个名为test的用户信息
第一次添加用户时member.txt文件不在,需要用-c选项创建文件

htpasswd /usr/local/httpd/.user jack
//向/usr/local/httpd/user数据文件中添加一个新用户jack

cat /usr/local/httpd/.user   //确认用户数据文件

service httpd restart

此时,访问需要用户名和密码了,输入我们设置的用户和密码即可进入




5、配置日志分割
 编辑Apache的主配置文件httpd.conf,更改内容如下:
注释掉如下两行
ErrorLog logs/error_log
CustomLog logs/access_log common
然后添加如下两行
ErrorLog "|/usr/local/apache/bin/rotatelogs  -l /usr/local/apache/logs/errorlog.%Y-%m-%d-%H_%M_%S.log 86400"
CustomLog "|/usr/local/httpd/bin/rotatelogs -l logs/accesslog.%Y-%m-%d-%H_%M_%S.log 86400" common
//通过管道把日志交给rotatelogs工具 -l指使用本地时间 86400表示日志分隔的间隔为1天,单位是秒。

或者:
ErrorLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/errorlog.%Y-%m-%d-%H_%M_%S 2M +480"
CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/accesslog.%Y-%m-%d-%H:%M:%S 2M +480" common

保存退出
[root@lamp logs]# apachectl -t

注:
errorlog.%Y-%m-%d-%H_%M_%S为生成日志的格式,类似于这样:errorlog.2018-10-11-17_00_00 ,以年月日时分秒为单位的
 2M 为日志的大小,即为日志达到多大后生成新的日志文件,支持的单位为K,M,G,本处为2M。
+480 为时差,文件的时间为英国时间,中国的时差要比英国多8个小时也就是480分钟,所以要加上480分钟。


rotatelogs语法说明:
rotatelogs   [-l]   日志文件名(绝对路径)     日志偏移量(时间)  或者  大小

-l:使用本地时间代替GMT时间作为时间基准
GMT时间就是格林威治时间(世界时),是指格林尼治所在地的标准时间,英国伦敦
例子:
 每天生成一个错误日志文件
ErrorLog "|bin/rotatelogs -l logs/error-%Y-%m-%d.log 86400"

CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
此配置会建立文件"/var/logs/logfile.nnnn",其中的nnnn是名义上的日志启动时的系统时间(此时间总是滚动时间的倍数,可以用于cron脚本的同步)。在滚动时间到达时(在此例中是24小时以后),会产生一个新的日志。

CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
此配置会在日志文件大小增长到5兆字节时滚动该日志。
ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
此配置会在错误日志大小增长到5兆字节时滚动该日志,日志文件名后缀会按照如下格式创建:errorlog.YYYY-mm-dd-HH_MM_SS 。


-----以下使用cronolog进行日志分隔--------
tar xzvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure && make && make install

which cronolog

LogFormat "%h %l %u %t \"%r\" %>s %b" common //定义日志的格式

-----------只要把工具的路径替换就行了----------------
ErrorLog "|/usr/local/sbin/cronolog -l logs/www.bc.com-error_%Y%m%d.log 86400"

CustomLog "|/usr/local/sbin/cronolog -l logs/www.bc.com_access_%Y%m%d.log 86400" common

apachectl -t

例子:
按天轮询(生产环境常见用法,推荐使用):

CustomLog "|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d.log" combined

按小时轮询(生产环境较常见用法):
CustomLog "|/usr/local/sbin/cronolog /app/logs /access_www_ %Y%m%d%H.log" combined




6、AWstats日志分析系统
 apachectl -D DUMP_MODULES | grep cgi   //确认是否加载了cgi模块
ls /usr/local/httpd/modules/ | grep cgi    ////确认是否编译过cgi模块

vi /usr/local/httpd/conf/httpd.conf
LoadModule cgid_module modules/mod_cgid.so
LoadModule cgi_module modules/mod_cgi.so

 tar xzvf awstats-7.6.tar.gz -C /opt/
mv /opt/awstats-7.6 /usr/local/awstats

-------AWstats可以同时分析多个站点的数据---
vi /etc/hosts
192.168.80.100  www.aa.com 

vi /etc/httpd.conf
ServerName www.aa.com    //定义主机名
cd /usr/local/awstats/tools/
./awstats_configure.pl






http://localhost/awstats/awstats.pl?config=www.helo.com
----访问日志的网址-----

http://IP/awstats/awstats.pl?config=www.aa.com //先记录下来,可以通过IP访问

service httpd restart //重启让日志格式生效

vi /etc/awstats/awstats.www.aa.com.conf //修改程序的主配置文件

LogFile="/usr/local/httpd/logs/access_log" //修改日志文件位置,第50行

DirData="/var/lib/awstats" //220行 手动建立每次抓取的数据存放位置

mkdir /var/lib/awstats

----如果之前修改过日志格式需要清空一下------
cd /usr/local/httpd/logs/
rm -f *log
service httpd restart //重新生成日志文件

cd /usr/local/awstats/tools/
chmod +x awstats_updateall.pl
./awstats_updateall.pl  now //手动采集一次数据

crontab -e

*/5 * * * *  /usr/local/awstats/tools/awstats_updateall.pl now

crontab -l
service crond status
systemctl enable crond
systemctl list-unit-files | grep crond

------注意---需要检查以下虚拟目录授权----
vi /etc/httpd.conf

<Directory "/usr/local/awstats/wwwroot">
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
	AuthName "kgc.cn"
	AuthType Basic
	AuthUserFile /usr/local/httpd/user
	require valid-user
	#Require all granted
</Directory>

service httpd restart

http://192.168.80.100/awstats/awstats.pl?config=www.aa.com  //访问测试日志系统工作情况

通过配置页面自动跳转优化统计页面访问
 cd /usr/local/httpd/htdocs/
 vi index.html
<html>
<head>
<meta http-equiv=refresh content="0;url=http://192.168.80.130/awstats/awstats.pl?co
nfig=www.lq.com">   //跳转,当访问192.168.80.130时,跳转到分析系统中
</head>
<body></body>
</html>
注意:如果服务器没有做DNS服务的话,需在测试客户端上设置hosts文件才可使用域名访问 vi /etc/hosts文件


7、配置网页压缩
网站随着用户访问量的增加和内容量的增加,网站的带宽会不断的增加,随之就是网站成本的增加。并且当内容量增大的时候,客户端如果带宽小,就会影响用户的体验。因此从这两方面考虑,网站的某些内容必须经过压缩之后再传给用户,然后在用户客户端进行解压,来实现双方共赢的效果。

apache 的压缩要用到mod_deflate模块,该模块提供了DEFLATE输出过滤器,允许服务器在将输出内容发送到客户端以前进行压缩,以节约带宽。它的核心思想就是把文件先在服务器进行压缩,然后再进行传输,这样可以显著减少文件传输的大小。当传输完毕后,客户端游览器会重新对压缩过的内容进行解压缩。如果没特殊情况的话,所以的文本内容都应该能被gzip压缩,例如:html(php),js,css,xml,txt等。特殊情况就是像一些首页上有很多广告投放的js代码,由于需要每次加载进而进行来访信息统计,所以这些广告代码拥有者网站的js不会经过gzip压缩

首先,mod_deflate模块检查及安装
/usr/local/httpd/bin/apachectl -M | grep deflate
如果出现以下结果:
deflate_module (static)    #此种结果为编译安装时装的
deflate_module (shared) #此种结果为DSO方式安装的

安装方法:
编译时安装方法
DSO方式安装

a、DSO方式安装

cd /opt/httpd-2.4.29/modules/filters/ #切到apache源码包mod_deflate所在的目录下
/usr/local/httpd/bin/apxs -c -i -a mod_deflate.c #以dso的方式编译安装到apache中
ll /usr/local/httpd/modules/mod_deflate.so #检查mod_deflate是否安装,成功安装这里会显示出该文件

扩展:使用DSO方式安装,apxs后跟的参数详解

1.-c 此选项表明需要执行编译操作。它首先会编译c源程序(.c)files为对应的目标代码文件(.c),然后连接这些目标代码和files中其余的目标代码文件(.c和.a),以生成动态共享对象dsofile。如果没有指定-s选项,则此输出文件名由files中的第一个文件名推测得出,也就是默认 mod_name.so。

2.-i 此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录。

3.-a 此选项自动增加一个LoadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之。


b、编译安装
 cd /opt/httpd-2.4.29/
./configure \   定制压缩模块
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi \
--enable-cgid \
--enable-deflate  ///增加压缩模块

make && make install
vi /etc/httpd.conf
LoadModule deflate_module modules/mod_deflate.so

apachectl -t
service httpd restart
apachectl -D DUMP_MODULES | grep deflate

 vi /etc/httpd.conf
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript image/png image/jpeg application/x-httpd-php application/x-javascript
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
第一行代表对什么样类型的内容启用gzip压缩
第二行代表压缩级别
第三行代表启用deflate模块对本站点的输出进行gzip压缩

apachectl -t
cd /usr/local/httpd/htdocs/

-----测试页----
vi index.html
<html>
<head>
<title>--压缩测试页--</title>
</head>
<body>这是一个测试网页内容压缩的页面!!This is test Page!!
<img src=b.jpg / >
</body>
</html>

-------如果网页出现中文乱码问题,解决方法如下-----
vi /etc/httpd.conf

AddDefaultCharset utf-8 

然后访问网页抓包查看,


8、配置网页缓存
apachectl -D DUMP_MODULES | grep expires
 
 service httpd stop
cd /opt/httpd-2.4.29/
[root@www httpd-2.4.29]# ./configure \
> --prefix=/usr/local/httpd \
> --enable-so \
> --enable-rewrite \
> --enable-charset-lite \
> --enable-cgi \
> --enable-cgid \
> --enable-deflate \
> --enable-expires    //增加缓存模块
[root@www httpd-2.4.29]# make && make install
[root@www httpd-2.4.29]# vi /etc/httpd.conf
LoadModule expires_module modules/mod_expires.so

 
[root@www httpd-2.4.29]# apachectl -t

缓存的用法有3种,分别问对全局,对目录,对虚拟主机

对全局:
对全局的配置就是在apache主配置文件httpd.conf的末尾加入如下参数即可
[root@www httpd-2.4.29]# vi /etc/httpd.conf
<IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault "access plus 60 seconds"
</IfModule>
//开启expires模块,并且对于http协议下任意格式的文档(html,css,js,图片等都是60秒后过期)

也可以指定格式类型的文件
ExpiresByType text/html "access plus 12 months"
ExpiresByType text/css "access plus 12 months"
ExpiresByType image/gif "access plus 12 months"
ExpiresByType image/jpeg "access plus12 12 months"
ExpiresByType image/jpg "access plus 12 months"
ExpiresByType image/png "access plus 12 months"
EXpiresByType application/x-shockwave-flash "access plus 12 months"
EXpiresByType application/x-javascript "access plus 12 months"
ExpiresByType video/x-flv "access plus 12 months"

b)对目录

对目录的配置就是在apache主配置文件中标签内加入如下参数即可
<Directory *****>
。。。
Require all granted
ExpiresActive on
ExpiresDefault "access plus 12 month"
ExpiresByType text/html "access plus 12 months"
</Directory >

c)对虚拟主机
对虚拟主机的配置就是在apache的虚拟主机配置文件httpd-vhost.conf中添加



 
[root@www httpd-2.4.29]# apachectl -t
[root@www httpd-2.4.29]# apachectl -D DUMP_MODULES | grep expires

 
[root@www httpd-2.4.29]# service httpd restart
 
抓包测试:

 
 9、配置防盗链

<html>
<title>I AM OK!</title>
<body>
 Test Page! 
<img src="b.jpg">
</body>
</html>
-------以上是在合法服务器上配置--------------

<html>
<title>i am heihei!</title>
<body>
 hei! 
<img src="http://www.aa.com/b.jpg">
</body>
</html>

------注意:在实验环境中要使盗链服务器能够解析合法服务器的域名,测试客户端也要能解析合法服务器的域名----
vi /etc/hosts
192.68.80.130 www.aa.com


------以上在非法盗链服务器上配置------------
---------以下是在合法服务器上配置防盗链----------
./bin/apachectl -D DUMP_MODULES | grep rewrite

vi /etc/httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so


------针对目录做防盗链处理------------在htdocs目录属性最后位置新增---
vi /etc/httpd.conf
        RewriteEngine On
	RewriteCond %{HTTP_REFERER} !^http://192.168.80.181/*    //使真机可以访问
        RewriteCond %{HTTP_REFERER} !^http://aa.com/.*$ [NC]
        RewriteCond %{HTTP_REFERER} !^http://aa.com$ [NC]
        RewriteCond %{HTTP_REFERER} !^http://www.aa.com/.*$ [NC]
        RewriteCond %{HTTP_REFERER} !^http://www.aa.com$ [NC]       -----以上都是只允许自己或者使用IP地址访问
        RewriteRule .*\.(gif|jpg|swf|png)$ http://www.aa.com/doc/error.jpg [R,NC] //需要重定向到一个盗链主机可以访问的位置,否则看不出效果来。

apachectl -t    //检查语法错误

vi /etc/httpd.conf   //设置重定向盗链主机可以访问的虚拟目录

Alias /doc/ "/opt/doc/"
<Directory "/opt/doc">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Require all granted
</Directory>

mkdir /opt/doc
放一张名称为error.jpg的图片

service httpd restart


10、配置服务器版本信息隐藏
vi /etc/httpd.conf
Include conf/extra/httpd-default.conf //去掉注释

cd /usr/local/httpd/conf/
vi extra/httpd-default.conf

ServerTokens Prod     控制服务器回应给客户端的“Server:”应答头是否包含关于服务器操作系统类型和编译进的模块描述信息。
Serversignature Off     关闭提供服务器版本和正在提供服务

------------扩展知识-------
下面是ServerTokens的一些可能的赋值:(即显示版本信息多少)

ServerTokens Prod 显示“Server: Apache”

ServerTokens Major 显示 “Server: Apache/2″

ServerTokens Minor 显示“Server: Apache/2.2″

ServerTokens Min 显示“Server: Apache/2.2.17″

ServerTokens OS 显示 “Server: Apache/2.2.17 (Unix)”

ServerTokens Full 显示 “Server: Apache/2.2.17 (Unix) PHP/5.3.5″




-----------彻底隐藏并修改版本信息---在源码目录下操作------(修改版本信息起诱导作用)
cd /opt/httpd-2.4.29/

vi ./include/ap_release.h

#define AP_SERVER_BASEPRODUCT "Apache"  //修改引号中的内容为想要的内容
注:
#define AP_SERVER_BASEVENDOR "Apache Software Foundation" #服务的供应商名称
#define AP_SERVER_BASEPROJECT "Apache HTTP Server" #服务的项目名称
#define AP_SERVER_BASEPRODUCT "Apache" #服务的产品名
#define AP_SERVER_MAJORVERSION_NUMBER 2 #主要版本号
#define AP_SERVER_MINORVERSION_NUMBER 4 #小版本号
#define AP_SERVER_PATCHLEVEL_NUMBER 6 #补丁级别



vi ./os/unix/os.h

#define PLATFORM "Unix"

然后重新编译安装apache

make  && make  install








11、压力测试

ab -n5000 -c900 192.168.80.181/index.html   //需要指定网页或者在域名IP后面加上/  以900为并发数,5000为总请求数,查看测试结果

---------MPM多进程处理模块配置-----
./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi \
--enable-cgid \
--enable-deflate \
--enable-expires \
--enable-mpms-shared=all //同时支持prefork|worker|event 三种模式

--with-mpm=prefork|worker|event //指定默认的工作模式
--enable-mpms-shared=all


lsof -i :80 //查看备用监听的进程数
httpd -V //查看服务器默认的工作模式


----------------配置文件中加载相应的模块-------
vi /usr/local/httpd/conf/httpd.conf

#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so

vi /etc/httpd.conf

Include conf/extra/httpd-mpm.conf //打开配置项

vi conf/extra/httpd-mpm.conf

<IfModule mpm_prefork_module>  
    ServerLimit		   1000  //大于MaxRequestWorkers
    StartServers             5  //服务启动时默认产生的子进程数量
    MinSpareServers          5  //空闲的最小子进程数
    MaxSpareServers         10  //空闲的最大子进程数
    MaxRequestWorkers      250  //可以同时处理的请求数,内存(MB)/2
    MaxConnectionsPerChild   10000  //每个子进程可处理的请求数
</IfModule>

service httpd restart
lsof -i :80 | grep daemon | wc -l


<IfModule mpm_worker_module>
    ThreadLimit 	64	//每个进程可以启动的线程数量上限值
    StartServers             3 //服务启动时默认产生的子进程数量
    MinSpareThreads         75  //空闲的最小线程数
    MaxSpareThreads        250
    ThreadsPerChild         25  //每个子进程可以启动的线程数
    MaxRequestWorkers      400  //线程数量最大值
    MaxConnectionsPerChild   0  //每个子进程可处理的请求数
</IfModule>

<IfModule mpm_event_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>

例子:
 针对512M内存服务器的配置如下:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 100
针对1GB内存服务器的设置如下:
StartServers 10
MinSpareServers 10
MaxSpareServers 25
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 1000//或者设置为0,即不限制



12、错误页面优雅显示
为了提升网站的用户体验,避免404,403之类的丑陋的默认错误提示出现,我们需要对错误页面进行优化,让他们变的漂亮一点。错误页面不仅在于告诉用户访问出现了问题,而且需要引导用户到正确的页面。

错误页面优雅化显示的实现方式主要有两种,下面我们主要以404错误为例:

第一种:在apache的主配置文件httpd.conf中的标签内添加ErrorDocument配置。

[root@jincon /]# vi /usr/local/httpd/conf/httpd.conf

<Directory "/www/html">
AllowOverride None
Options None
Require all granted
ErrorDocument 404 /404.html #将404错误跳转到/www/html下的404.html页面上
</Directory>

第二种方法:在apache的虚拟主机配置文件httpd-vhost.conf中的中添加ErrorDocument配置。

<VirtualHost *:80>
ServerAdmin 934272570@qq.com
DocumentRoot "/www/html"
ServerName www.jincon.com
ServerAlias jincon.com
CustomLog "|/usr/local/sbin/cronolog /app/logs/www_access_%Y%m%d.log" combined
ErrorLog "|/usr/local/sbin/cronolog /app/logs/www_error_%Y%m%d.log"
ErrorDocument 404 http://www.jincon.com ; #将404错误跳转到http://www.jincon.com 页面上
</VirtualHost>


从上面的两种解决方案,我们可以看出ErrorDocument的命令格式如下

ErrorDocument 错误代码 跳转到的页面或文件

另外这里需要注意,你若设置跳转到文件,必须要有这个文件才行。另外文件必须在站点目录内,不然会报错。


13、禁止目录浏览
由于开启目录浏览会让我们整个目录下的内容全部都暴露到外面,因此我们必须要禁止目录浏览功能。当然一些目录开放给客户做下载的,可以忽略此项优化
通过修改apache主配置文件httpd.conf中的标签内的Options选项参数来实现禁用目录浏览。

AllowOverride None
Options FollowSymLinks #不填写Indexes项,默认即为关闭。
Options -Indexes #通过在Indexes前面加-来禁用此功能
Options None #禁用所有选项

14、禁用AllowOverride选项,关闭.htaccess文件使用
首先是性能考虑,如果AllowOverride启用了.htaccess文件,则apache需要在每个目录中查找.htaccess文件。因此,无论是否真正用到,启用.htaccess都会导致服务器性能的下降。另外,对于每一个请求,都需要读取一次.htaccess文件。

其次是安全考虑,这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。

AllowOverride None #禁止该选项,防止用户重复载入
通过该设置加快了服务器响应速度,因为它不再让每个请求去寻求每个目录的访问控制文件(.htaccess)

15、关闭自带CGI功能

生产环境中,一般我们不使用apache自带的cgi的功能,如果使用的话,可以用mod_perl模块来替代。因此我们这里需要将apache主配置文件httpd.conf中有关cgi的内容删除掉。

删除部分:

ScriptAlias /cgi-bin/ "/usr/local/apache2.4.6/cgi-bin/"
<Directory "/usr/local/apache2.4.6/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>