基本操作系统学习笔记

发布时间 2023-09-05 14:40:37作者: gcc_com

1、Vmware、OS简述

1、虚拟机定义

虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离的环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。基本上可以像使用实体机一样对虚拟机进行操作。(通过虚拟机模拟其他操作系统)(寄生在物理机上)(虚拟机其实就是逻辑上模拟的一台计算机)

  • 运行内存:越大,可以同时运行的进程就越多

  • 磁盘:越大,能够存储的数据越多

主流的虚拟软件:VMware(收费) VirtualBox(免费)

为什么要使用虚拟机?
①安全测试
②需要使用到多种操作系统
③解决硬件资源过剩。例:云服务的虚拟资源技术
④虚拟化技术(分块,逻辑上分开)
虚拟机的特点
分区:在单一物理服务器上同时运行多个虚拟机
隔离:同一服务器上的虚拟机之间互相隔离
封装:整个虚拟机都保存在文件当中,可以通过移动文件的方式进行虚拟机的迁移
相对于硬件独立:无需修改即可在任何服务器上运行虚拟机

2、VMware的三种联网方式

一、桥接(Bridge)

网关:真实的设备网关

相当于连接着交换机上,与物理机平等关系

两局域网在链路层上进行连接。
需要注意的点:
	1.设置桥接的时候,应保持VM于pc处于同网段
	2.避免IP冲突
二、NAT模式

(源NAT-->源NAT转换,目的SNAT-->目的NAT转换)

网络地址转化
实现内网能访问外网但是外网不能访问内网
三、仅主机模式
只能跟物理机(路由器)通信,虚拟机连接在路由器上。
仅能让主机与虚机之间实现网络共享

虚拟内存:真实内存+磁盘空间

3、快照

类似于游戏存档,记录虚拟机当前时刻,恢复快照也就相当于读档

4、克隆

①链接克隆

类似于快捷方式,如果原虚拟机损毁,丢失,移动,链接克隆出来的虚拟机也将无法使用
类似于快捷方式,母体奔溃,链接克隆也奔溃,但是操作互不干涉

②完整克隆

类似于复制粘贴,如果原虚拟机损毁,丢失,移动,完整克隆出来的虚拟机不受任何影响,独立的一个个体
完完全全的克隆,母体奔溃不会影响克隆体

5、主流的操作系统

  1. Windows :用户基数大,适合个人使用 XP win7 win8 win10 win11
  2. Linux :适合服务器使用,稳定,开源的操作系统 CentOS Ubuntu redhat kali
  3. Mac OS :适合开发使用,很少受到电脑病毒的袭击。
  • 概念:
管理计算机硬件与软件资源的计算机程序。
提供一个让用户与系统交互的操作界面。
====>操作系统(operating system,简称OS)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。操作系统也是软件的一部分,它是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁。操作系统会控制其他程序运行,管理系统资源,提供最基本的计算功能,如管理及配置内存、决定系统资源供需的优先次序等,同时还提供一些基本的服务程序,如:
1、文件系统(计算机存储信息的结构,信息存储在文件中,文件主要存储在计算机的内部硬盘里)
2、设备驱动程序(提供连接计算机的每个硬件设备的接口)
3、用户接口(操作系统为用户提供一种运行程序和访问文件系统的方法)
4、系统服务程序(当计算机启动时,会自启动许多系统服务程序,执行安装文件系统、启动网络服务、运行预定任务等操作)
一些历程:

xp-- > win 7 NT 6.1

win7 提升启动速度
多了一个“库”功能:可以把位于不同位置的文件夹合并到一起
磁盘碎片整理

win7 --> win10 NT10.0

登录面板:
win10参照现代移动设备,增加了时间锁屏界面
登录方式:
win10加入了生物特征识别的功能WindowsHello
开始菜单的进化,附带平板功能
搜索菜单:
加入Cortana,最明显的变化就是支持语音搜索
其他
dos:命令行
MS-DOS:单用户单任务操作系统 
NT:单用户多任务操作系统

2、Windows基础命令

1、DOS命令行窗口

1.什么是命令行?

命令行就是在Windows操作系统中打开DOS窗口,以字符串的形式执行Windows管理程序。

2.什么是DOS?

DOS(Disk Operation System磁盘操作系统),DOS系统目前已经没有什么人使用了,但是dos命令却依然存在于我们使用的windows系统之中。大部分的DOS命令都已经在Windows里变成了可视化的界面,但是有一些高级的DOS命令还是要在DOS环境下来执行。所以学习命令行对于我们熟练操作Windows系统是很有必要的。

3.如何进入命令行窗口(DOS)-->见下文

4.符号约定

5.内部命令与外部命令

内部命令:内部命令已集成在系统中,无需另外命令可执行文件支持,如DIR、TIME、CLS、CD、RD等命令都属内部命令。使用 help 命令进行查看。

外部命令(后期添加的一个程序):外部命令实际上是一个DOS应用程序,通过执行存储于外部(盘)的程序完成其功能,能够使用户的操作更加方便和深入。这些外部命令都是以文件的形式存在,Windows系统的DOS外部命令保存在Windows主目录下的 "Command"目录中。通俗来讲就是安装的软件。

2、什么是shell

shell是一个环境,我们可以运行我们的命令,程序和shell脚本。shell有不同的风格,就像有不同风格的操作系统。每个的shelI的风格,有它自己的—套识别的命令和功能。Shell是一个环境,我们可以运行我们的命令,程序和shell脚本。壳有不同的风格,就像有不同风格的操作系统.每个的Sheli的风格,有它自己的-套识别的命令和功能。

Windows当中不区分大小写;linux当中区分大小写。

3、Windows的构架

第一层:基础硬件(内核圈)

第二层:操作系统

第三层:shell环境(执行环境--操作系统的最外一层--作用是:通过shell环境与操作系统进行交互)

第四层:应用程序(进程)

第五层:用户

①如果在物理机上未更改网卡vmnat8时虚拟机还能有网络的原因是?
1.我们用户使用的是DHCP模式
2.VMware这个网卡就会通过DHCP自动的分配到IP地址

②为什么虚拟机的网卡要和物理机上的vmnet8的网段一样?
当虚拟机的网络模式选择vmnet8(NAT模式)时,虚拟机的网络/流量就会全部通过物理机上的vmnet8这个网卡进行转换,就是将物理机上的vmnet8这个网卡当作虚拟机的边界网关,通过边界网关(边界路由)转换成公网IP与公网进行联系----**NAT技术**。当两者的网段相同时这两种就组成了一个内网,就实现了网卡之间的通信,两者互通之后在可以进行IP地址的转换,边界的转换。

4、Windows的基础命令

1.如何进入命令行窗口(DOS)

1、win+r 键入 cmd --弊端:权限不够

2、win+q(win7打不开) 搜索 cmd或者命令提示符,通过右键选择管理员模式打开 --缺点:麻烦

3、通过文件系统打开 ---使用此方法的原因是:有些指令需要在某个目录下才可执行(没有使用管理员身份)//也可以切换路径--麻烦

  • cmd是应该存放在C盘里的可执行文件

  • win+q可以检索电脑里面存在的可执行文件/程序、文件夹等

2.查看当计算机版本/主机名

ver/hostname/whoami(这个是windows和Linux通用的目录--可以爆出计算机名、主机名、账户名)

3.ipconfig --调试计算机网络的常用命令

eg:ipconfig /all --一般用来查看当前PC的物理地址

描述:ipconfig是调试计算机网络的常用命令,通常大家使用它显示计算机中网络适配器的IP地址、子网掩码及默认网关。

  • 命令 / ? //这个问号表示可以查看当前命令下的所有可加参数
4.netstat

Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

​ 常用命令:netstat -ano

  • PID(进程控制符)英文全称为Process Identifier。PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。进程中止后PID被系统回收,可能会被继续分配给新运行的程序。PID这一列代表了各进程的进程ID,也就是说,PID就是各进程的身份标识。

  • 进程:正在进行的一个过程或者说一个任务。而负责执行任务则是CPU。进程指的是程序的运行过程(是程序运行的一部分)

  • 所谓套接字(Socket)【其实就是----IP地址:端口号】,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。

  • 监听:接收数据的状态(在win7中显示为LISTENGING)

5.Windows基础命令

services.msc:服务

lusrmgr.msc:本地用户和组

gpedit.msc:本地组策略编辑器

secpol.msc:本地安全策略

  • 在DOS当中不常用,因为在Windows已经有完整的图形化界面
  • 命令行中输入net localgroup即可查看本地用户组(在命令行当中)
6.regedit--注册表

注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。

在文件系统与系统目录中详细讲解。

7.ping命令

PING (Packet InterNet Groper,因特网包探索器),是一个用于测试网络连接量的程序 。该命令通过向特定的目标主机发送 ICMP(Internet Control Message Protocol ,因特网报文控制协议)echo请求报文,测试目标是否可达及了解其有关状态 。TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL是IPv4报头的一个8 bit字段。最大值255。

eg: ping 192.168.126.2 -t --持续ping测试,用来测试当对设备进行某一更改时还能不能进行联通。

8.cd命令

描述:cd命令可以进入指定文件夹

常用的 cd 命令(在能用在当前盘符)有:
1、cd .. 跳转到上一级目录
2、cd / 跳转到根目录 (注:加上 /d 才能改变盘符)【C:\Program Files> cd /D D:\boot4 (参数/D--切换盘符(跳转磁盘))】 (在Linux当中所有的文件都在根目录下,所有不需要跳转磁盘)
3、cd + path 跳转到path目录
4、cd /? 查看cd命令的详细信息

  • cd 目录 (必须目录在当前文件夹下)
  • d: --进入D盘

cd ./xxx //相对路径 (一个点代表当前路径;整个表示当前路径下的某个文件)

cd D:/xx //绝对路径

绝对路径:
路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。

相对路径:
路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd ../man 这就是相对路径的写法。
9.dir命令

描述:dir(directory)命令基本上会列出目录中的文件及子目录的名称,也可以列出其文件大小,创建时间等相关信息,并且列出所在的磁盘、可用空间等信息。dir命令也可以寻找其文件名称符合特定条件的文件。

eg:dir /A/s --查看所有文件,包括隐藏文件

10.mkdir或md (make directory)

描述: mkdir命令的功能是创建新的子目录。

Windows当中已有图形化界面。

11.rmdir或rd (remove directory)

描述:删除一个目录。(不能删除带文件内容的目录)

语法: rmdir [/s] [/qa] [drive:]path

参数:/S除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。(/Q强制删除)

Windows当中已有图形化界面。

12.type命令

描述:命令用来查看指定目录下文件的内容,如果一个文件内容比较少,那用type来查看非常方便,如果内容很大,用type阅读就不是方便了。

参数:type [drive:] [path] filename

13.move命令

描述:将一个或多个文件从一个目录移动到另一个目录。
语法:move [/y | /-y] [] []
参数:
     /y:     不提示确认是否要覆盖现有目标文件。
     /-y:    确认是否要覆盖现有目标文件。(默认值)
     : 指定要移动的文件的路径和名称。 如果要移动或重命名目录,Source应该是当前目录路径和名称。
     :   指定要将文件移动到的路径和名称。 如果要移动或重命名目录,Target应该是所需的目录路径和名称。

  • move 既可以移动文件,也可以重命名文件。
14.copy命令

描述:将一份或多份文件复制到另一个位置。

  • 说明: COPY命令只能复制文件,不能复制文件夹。

语法:copy [参数] [源路径] [目标路径]

可不指定参数;不写目标路径则为当前路径。

15.del命令

描述:删除一个或多个文件。

说明:还可以使用通配符(* 和?)一次删除多个文件。但是,在使用 del 命令时要慎重地使用通配符,以避免无意中删除文件。

16.tasklist命令

描述:显示在本地或远程机器上当前运行的进程列表。

说明:利用 /fi 参数筛选结果,获取指定进程的相关信息。

常用用法:
tasklist --显示本地计算机或远程计算机上当前正在运行的进程列表。
tasklist /svc --查看每个进程中主持的服务。(/svc=/s+/v+/c)(重点)
tasklist /fi "pid eq 10528" --显示pid为10528的进程信息。
tasklist /fo csv > tasklist.csv

通过映像名称寻找pid:tasklist /fi "pid" eq 2616 //(课上的例子)

通过pid寻找映像名称:tasklist /fi "imagename eq cmd.exe" //(课上的例子)

17.taskkill命令

描述:使用该工具按照进程 ID (PID) 或映像名称终止任务。

说明:配合tasklist使用,先使用tasklist查找相关进程信息,在终止对应进程。

​ 常用命令:
​ taskkill /im firefox.exe --杀死火狐的进程
​ taskkill /pid 10520 /t /f --杀死pid为10520的进程
​ taskkill /fi “imagename eq firef*” -通过映像名称搜索来杀死名称为firef的进程

18.比较符

eq: equal (相等)

ne: no equal (不相等)

gt: greater than (大于)

lt: less than (小于)

ge: greater equal (大于等于)

le: less equal (小于等于)

19.net user命令

net user 用户名密码ladd建立用户

net user guest /active:yes 激活guest用户

net user 查看有哪些用户/帐户名查看帐户的属性

net localgroup administrators 用户名ladd 把“用户"添加到管理员中使其具有管理员权限,注意:administrator后加s用复数

net start 查看开启了哪些服务

net start 服务名开启服务(如:net start telnet,net start schedule)net stop服务名停止某服务

(此命令在用户和组当中讲解)

3、文件系统与系统目录

文件系统相当于仓库管理员,可以有规律的摆放文件。

文件系统包括有:NTFS、FAT16、FAT32、EXFAT

日志文件系统: 
NTFS : windows特有(主流文件系统)
FAT16 : 只支持2GB以下的文件(少)
FAT32 : 支持4GB以下的文件(少)
EXFAT :专门为闪存设备设计,Windows、Linux、Mac均可适用
  • 闪存设备:移动磁盘、优盘等

  • 文件系统的载体:磁盘

1、磁盘

硬盘

磁头和盘片组成机械硬盘(磁头和盘片是有很多层堆叠在一起)

每一个盘片都有两个盘面(Side),装上磁头,就可以有效存储数据,称为有效盘片,顺序重上至下,从“0”开始编号,盘面号又叫磁头号

磁道(Track):

磁盘在格式化的时候被分成很多个同心圆。同心圆轨迹叫做磁道。磁道从外向内自0开始编号。每一个盘面300~1024个磁道。信息是以脉冲串的形式记录在这些轨迹当中。同心圆记录的数据并不是完整的,而是被分成一段一段的圆弧,每一段圆弧就叫做一个扇区
  • 信息以脉冲串的形式记录在磁道(轨道)上

  • 一个盘面差不多有300到1024个磁道

柱面(Cylinder):

所有盘面上同一磁道构成了一个圆柱,通常称作柱面,磁头在读写数据的时候,首先在同一柱面内从0磁头开始操作,数据读写是按照柱面进行

扇区

柱面与磁道组成的夹角称为扇区

操作系统是以扇区的形式将信息存储在硬盘上
扇区从“1”开始编号,每个扇区包括512字节的数据和一些其他信息。
扇区有两个主要部分:数据存储地点标识符,存储数据的数据段
  • Windows操作系统当中使用的文件系统FAT,NTFS,该文件系统数据存储单元叫---簇(每个簇4KB)。簇的大小会影响到整个空间的占用以及读写效率。

  • Linux操作系统使用的文件系统数据存储单元叫---块

MBR

MBR:主引导记录区

主引导记录区,位于整个磁盘的0磁道0柱面1扇区,在总共512字节大小的主引导扇区中,MBR应到程序占用其中前446字节,随后64个字节DPT(Disk Partition Table 硬盘分区表),最后两个字节"55AA" 是分区的有效结束标志。
辨别MBR有效结束标志是55AA(查看16进制)。
MBR所在的范围:从文件开头到55AA结束。

动态磁盘与静态磁盘的区别

动态磁盘和基本磁盘最本质的区别在于动态磁盘可以将多个物理磁盘组合成一个大的卷集,而基本磁盘只能在一个物理磁盘上创建分区。基本磁盘受分区表的限制,最多只能建立4个磁盘分区。动态磁盘可以容纳4个以上的卷,卷的相关信息不存在放在分区表中,而是在卷之间进行复制,因此提高了容错能力。

2、文件系统

实现的功能:

1、文件类型:可以从不同的角度来规定文件的类型,如源文件、目标文件及执行文件等。

2、文件长度:文件长度指文件的当前长度。长度的单位可以是字节或块,也可能是最大允许的长度。

3、文件的物理位置:该项属性通常是用于指示文件在哪一个设备上及在该设备的哪个位置的指针。(哪个扇区)

4、文件的时间:创建时间、最后一次修改、最后一次访问时间。

文件系统分类

①按用途分类:

1、系统文件:这是指有系统软件构成的文件。大多数的系统文件只允许用户去调用,但不允许用户去读,更不允许修改;有的系统文件不直接对用户开放。

2、用户文件:指由用户的源代码、目标文件、可执行文件或数据等所构成的文件。用户将这些文件委托给系统保管。

3、库文件:这是由标准子例程及常用的例程等所构成的文件。这类文件允许用户调用,但不允许修改。

②按数据形式分类:

1、源文件:由程序和数据构成的文件。通常由终端或输入设备输入的源程序和数据所形成的文件都属于源文件。通常是由ASCII码或汉字所组成的。

2、目标文件:指把源程序经过相应语言的编译程序编译过,但尚未经过链接程序的目标代码所构成的文件。属于二进制文件。目标文件所使用的后缀名是".obj"。

3、可执行文件:这是指把编译后所产生的目标代码再经过销接程序髓接后所形成的文件。

③按存储控制属性分类

1、只执行文件:这类文件只允许被核准的用户调用执行,既不允许读,更不允许写。

2、只读文件:这类文件只允许文件主及被核准的用户去读,但不允许写。

3、读写文件:这是指允许文件主和被核准的用户去读或写的文件。

④按组织和处理分类(了解)

1、普通文件:由ASCII码或二进制码组成的字符文件。一般用户建立的源程序文件、数据文件、目标代码文件及操作系统自身代码文件、库文件、实用程序文性等。通常存储在外存储设备上。

2、目录文件:由文件目录组A的,用来管理和实现文件系统功能的系统文件。目录文件也是由字符序列构成,因此刘其可进行与背通文件一样的文件操作。

3、特殊文件:特指系统中的各类IO没备

常见文件系统

FAT

FAT(File Allocation Table-文件分配表)文件系统用"簇"作为数据单元。

●一个“簇”由一连串的扇区组成,簇所含的扇区数必须是2的整数次幂。簇的最大值是64个扇区,32kb。

●所有簇从2开始进行编号,每个簇都有一个自己的编号。

●用户文件和目录都存储在簇中。

●文件系统分配磁盘按照簇进行分配

●FAT文件系统是Windows操作系统所使用的一种文件系统。发展过程经历了FAT12,FAT 16.,FAT32,exFAT(FAT64)四个阶段。

FAT32对FAT16的改进

​ 1、更大的分区和容量

​ 2、更小的簇

​ 3、不易崩溃

exFAT

exFAT (Extended_File A1location Table FileSystem,扩展FAT,即扩展文件分配表)

●为了解决FAT32等不支持4G及其更大的文件而推出。是微为了解决FAT 32等不支持4G及其更大的文件而推出。是微软专门为闪存设备设计的文件系统,windows XPSP2、windows Vista SP 1及以上系统都支持,分区最大容量大到16MB。

●64ZB,文件体积最大16EB。簇尺寸可以达到

●exFAT别名为FAT64,适用范围为大于32GB的U盘、SD卡。设计的自的是在FAT3平与NTFS乏间取得一个折中,有FAT32的轻便、不需要耗损太多的效能及记忆体来处理文件运作,又有NTFS的AA存取控制机制。

●三大主流操作系统(Linux、 Mac、 windows)都支持exFAT格式。

NTFS

特点:

1、支持大分区

2、可以恢复文件系统

3、支持对分区、文件夹和文件的压缩

4、采用更小的簇

5、可以为共享资源、文件夹以及文件设置访问许可权限

6、可以进行磁盘配额管理

7、变更日志

3、实现共享文件夹

1、查看虚拟机的IP地址

2、在物理机上测试ping通

3、在虚拟机上建立一个文件夹,右键选择属性-->共享

  • 点击共享(s)...-->点击单项箭头查找用户-->选择要添加的用户-->最后点击共享(H)
  • 点击高级共享-->将共享此文件夹(S)打勾-->选择应用并确定

4、在物理机的此电脑的地址栏上输入\\虚拟机的IP地址(如:\\192.168.126.128),即可实现物理机与虚拟机文件共享。

共享与高级共享的区别:当选择高级共享之后,就可以在物理机输入IP地址后的最上层文件夹查看到该高级共享的文件夹;而选择共享则只有最基础的Users文件夹。

4、访问控制的原理

文件目录访问控制是指用户和用户组被赋予一定的权限,在权限的规则控制许可下,哪些用户和用户组可以访问哪些目录、子目录、文件和其他资源,哪些用户可以对其中的哪些文件、目录、子目录、设备等能够执行何种操作。

权限对象

1、文件:读取,运行,新建,修改,完全控制等等。

2、文件夹:读取,运行,列出文件夹内容,新建,修改,完全控制等等

3、共事文件夹:读取,修改,完全控制。

4、打印机,打印,管理文档,管理打印机。

NTFS安全权限的基本特性

权限继承:对于某一个文件分配权限的时候,在默认情况下,此权限会被完全的传递到文件夹中所有的子文件夹的权限中。如果不希望某一个子文件夹继承父文件夹权限,只需要去除继承复选框。

权限累加:某一个用户对某一个文件或文件夹的权限是该用户的权限和所属组的权限之和。

拒绝优先:当某一个用户和组对某一个对象的权限发生冲突的时候,权限是拒绝优先。

设置/修改文件权限的方法

图形化界面操作:选择文件夹-->右键属性-->选择安全-->进行勾选等操作

命令行操作:以管理员模式打开cmd-->使用命令cacls(相当于Windows当中的ACL)-->cacls /? --查看设置文件权限用法

5、系统目录-ProgramData

系统目录-ProgramData-->操作系统当中应用系统所存储的数据目录

  • ProgramData文件夹(是一个隐藏目录)是Vista引入的一个系统文件夹,从它的名称可以看出,它保存了应用程序所需的数据,比如一些自定义的设置,或者缓存文件,都可能会存放在这里。(这是个隐藏的文件夹)
打开隐藏目录过程

打开计算机-->选择左上角的组织-->选择文件夹和搜索选项-->点击查找,往下拉找到显示隐藏的文件、文件夹和驱动器-->选择应用、确定即可。

6、系统目录-Program Files

C: \Program Files文件夹是32位Windows操作系统安装应用程序的默认文件夹,进入64位操作系统时代后,C: \Program Files成为64位应用程序默认安装文件夹,而32位应用程序的默认安装文件夹则被改为C: \Program Files(x86),这两个文件很重要,不可删除。

X86和X64的区别:
  • X64有向下兼容的特性,可以运行X86的应用。

  • X86无法向上兼容X64的应用。

7、SAM文件

  • SAM文件存放Windows当中用户信息

1、SAM文件是什么首先说明,SAM这个文件,是没有扩展名的。

2、安全账号管理器对账号的管理是通过安全标识进行的,安全标识在账号创建时就同时创建,一旦账号被删除,安全标识也同时被删除。

3、安全标识是唯一的,即使是相同的用户名,在每次创建时获得的安全标识都时完全不同的。因此,—旦某个账号被删除,它的安全标识就不再存在了,即使用相同的用户名重建账号,也会被疵予不同的安全标识,不会保留原来的权限。

4、SAM文件是windows的用户账户数据库,所有用户的登录名及口令等相关信息都会保存在这个文件中。SAM文件可以认为类似于unix系统中的passwd文件,不过没有unix的passwd文件那么直观,当我们忘记密码的时候,就可以通过制除(删除)SAM文件,快速地进入系统。

找到SAM文件/相应的进程的过程

打开windows7的C盘-->C:\Windows\System32\config选择管理员模式打开-->可以看到一份被锁上(无法修改)的大小为256KB的SAM文件。

在Windows7上右键任务栏-->选择任务管理器(K)-->点击进程-->点击显示所有用户的进程(S)-->找到winlogon.exe和lsass.exe这两份文件。

注册表当中:计算机->HKEY_LOCAL_MACHINE->SAM->SAM

Windows本地认证的过程
  • 通过winlogon.exe和lsass.exe(SAM文件)这两个进程完成。

当我们用户输入完用户名和密码时(就是winlogon.exe这个进程),就会跳转到lsass.exe这个进程进行验证,用户输入的账号密码信息十是否正确。lsass.exe这个进程就是SAM文件(换句话说调用SAM文件就是通过lsass.exe这个进程执行)。

  • 正常情况下是无法直接查看/修改SAM文件的原因是被lsass.exe这个进程调用了。

8、系统文件-hosts

hosts---本地域名解析文件

位置:win+r键-->输入drivers-->打开etc-->hosts (C:\Windows\System32\drivers)

操作规程:打开之后发现整份文件都是注释,相当于什么都没有。拉到最下面有一个示例,我们在没有注释的地方进行添加127.0.0.1 www.baidu.com(如果是在保存文件时提示无法保存在当前路径下的话,则右键属性选择安全,对文件权限进行修改)--------在浏览器上再次搜索百度的网址的话则无法连接;现在将刚刚修改过后的删除,则就可以恢复(这个过程需要重启浏览器,原因是有这个”浏览器缓存的解析优先级 > 本地域名解析文件的解析优先级 > 网络中的DNS“)

定义

hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联的“数据库”。当用户在浏览器中输入网址时,系统会首先自动从hosts文件中寻找对应IP地址,如果没有找到,则会将网址提交DNS域名解析服务器进行IP地址解析。

作用

1、加快域名解析,构建映射关系,局域网没有DNS服务器,通过hosts建立给服务器建立IP映射。

2、屏蔽垃圾网站,IP映射到本机或、0.0.0.0。

修改hosts方法

位置:C:\Windows\System32\drivers\etc (示例:202.108.22.5 www.baidu.com)
#将本机对www.baidu.com的访问映射到202.108.22.5上

9、注册表

打开方法:win+r输入regedit

定义

注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。

设置/作用

Start的值设置为0,则驱动由启动引导器加载,应该与“随着开机,最先启动”是同一回事;

Start的值设置为1,则驱动由操作系统的I/0子系统加载,即在系统内核初始化时加载;

Start的值设置为2,则驱动/服务在启动后自动加载;

Start的值设置为3,则驱动/服务就是按需手动加载;

Start的值设置为4,驱动/服务就是被禁用的状态。

注册表五个根键及作用:
HKEY_CLASSES_ROOT:用来管理文件系统
HKEY_CURRENT_USER:仅对当前用户生效
HKEY_LOCAL_MACHINE:对当前计算机生效
HKEY_USERS:远程连接
HKEY_CURRENT_CONFIG:保存系统配置信息
注册表-实现脚本开启自启动

暂无

10、脚本

脚本:一段指令集

cmd--一次只能执行一条命令

通过脚本--一次执行多条命令

常见脚本:.bat(windows创建脚本后缀) .vbs .php .sh .jsp

脚本的创建

将写好的脚本(.bat)点击右键-->选择WinRAR通过添加到压缩文件(A)-->勾选创建自解压格式压缩文件(x)-->点击高级打开直接压选项,这里可以设置解压的路径(也可以作为隐藏路径)-->选择设置-程序程序-将解压路径贴过来再跟上脚本名称-->选择模式-全部隐藏-->点击更新选择解压并更新文件(U)和覆盖所有文件(L)-->点击文本和图标,选择从文件加载自解压文件图标(I)-->最后确定即可。

批处理脚本

.bat文件的条件:

①:里面必须是可执行的指令

②:文件为可执行文件

4、Windows用户和组、域

Windows用户

1、内置用户

内置用户:系统运行必须用到的服务。是默认的、自带的,且不可删除。(分类如下)

①Administrator:管理员账户(主人)

②Guest:来宾账户,权限非常小,连下载的文件保存不了。(客人)

在客户端上,这两个账户是默认禁用;在服务器版本上,管理员是默认禁用,guest是默认启用(可以手动解禁)。

2、系统用户

计算机服务组件相关的系统账号:(这个并不是真正账户/服务--判断方法:可否登录)(分类如下)

①system:系统账户(权限非常高)

②local services:本地服务账户(权限等于普通用户)

③network services:网络服务账户(权限等于普通用户)

services.msc:打开的窗口就是服务窗口,每一个服务都需要一个账户来管理。

3、创建用户

法一:图形化操作

​ 使用lusrmgr.msc命令-->点击用户,并在空白地方右键新建用户(需设置成强密码)

法二:命令行操作

​ 以管理员模式打开CMD(服务器版本可直接打开使用)-->如下

c:\windows\system32>net user Lin Aa123789/add		模板:net user 账户名密码/add		//添加账户
命令成功完成。
c:\windows\system32>net user Lin / del				模板:net user账户名/del		//删除账户
命令成功完成。

为什么会出现组这个概念:相同权限的用户都拉进个组里面,简化权限的赋予。实现多个不同类型的组实现分权,符合计算机的安全策略。

Windows系统为了给不同的用户赋予不同的权限,所以就内置了许多本地用户组,这些用户组本身都已经被赋予一些权限(permissions),它们具有管理本地计算机或访问本地资源的权限。只要用户账户加入到这些本地组内,这回用户账户也将具备该组所拥有的权限。

默认情况下,系统为用户分了7个组,并给每个组赋予不同的操作权限,管理员组(Administrators)、高权限用户组(Power Users)、普通用户组(Users)、备份操作组(Backup Operators)、文件复制组(Replicator)、来宾用户组(Guests),身份验证用户组(Authenticated users)。其中备份操作组和文件复制组为维护系统而设置,平时不会被使用。

打开组进行管理的图形化界面:输入命令lusrmgr.msc

1、基本用户组

(内置普通组)

①Administrators
属于该administrators本地组内的用户,都具备系统管理员的权限,它们拥有对这台计算机最大的控制权限【理论上最高权限是system这个账户,但是理论的,实际不可登入;则实际最高级别的账户就是Administrator】,可以执行整台计算机的管理任务。内置的系统管理员账号Administrator就是本地组的成员,而且无法将它从该组删除。如果这台计算机已加入域,则域的Domain Admins会自动地加入到该计算机的Administrators组内。也就是说,域上的系统管理员在这台计算机上也具备着系统管理员的权限。

②Backup Operators
在该组内的成员,不论它们是否有权访问这台计算机中的文件夹或文件,都可以通过“开始”-“所有程序”-“附件”-“系统工具”-“备份”的途径,备份与还原这些文件夹与文件。

③Guests
该组是提供没有用户帐户,但是需要访问本地计算机内资源的用户使用,该组的成员无法永久地改变其桌面的工作环境。该组最常见的默认成员为用户帐号Guest。

④Network Configuration Operators
该组内的用户可以在客户端执行一般的网络设置任务,例如更改IP地址,但是不可以安装/删除驱动程序与服务,也不可以执行与网络服务器设置有关的任务,例如DNS服务器、DHCP服务器的设置。

⑤Power Users
该组内的用户具备比Users组更多的权利,但是比Administrators组拥有的权利更少一些,例如,可以:创建、删除、更改本地用户帐户;创建、删除、管理本地计算机内的共享文件夹与共享打印机;自定义系统设置,例如更改计算机时间、关闭计算机等。但是不可以更改Administrators与Backup Operators、无法夺取文件的所有权、无法备份与还原文件、无法安装删除与删除设备驱动程序、无法管理安全与审核日志。

⑥Remote Desktop Users
该组的成员可以通过远程计算机登录,例如,利用终端服务器从远程计算机登录。

⑦Users
该组员只拥有一些基本的权利,例如运行应用程序,但是他们不能修改操作系统的设置、不能更改其它用户的数据、不能关闭服务器级的计算机。所有添加的本地用户帐户者自动属于该组。如果这台计算机已经加入域,则域的Domain Users会自动地被加入到该计算机的Users组中。

2、内置特殊组

①Everyone
任何一个用户都属于这个组。注意,如果Guest帐号被启用时,则给Everyone这个组指派权限时必须小心,因为当一个没有帐户的用户连接计算机时,他被允许自动利用Guest帐户连接,但是因为Guest也是属于Everyone组,所以他将具备Everyone所拥有的权限。

②Authenticated Users
任何一个利用有效的用户帐户连接的用户都属于这个组。建议在设置权限时,尽量针对Authenticated Users组进行设置,而不要针对Everyone进行设置。

③Interactive
任何在本地登录的用户都属于这个组。

④Network
任何通过网络连接此计算机的用户都属于这个组。

⑤Creator Owner
文件夹、文件或打印文件等资源的创建者,就是该资源的Creator Owner(创建所有者)。不过,如果创建者是属于Administrators组内的成员,则其Creator Owner为Administrators组。

⑥Anonymous Logon
任何未利用有效的Windows Server 2003帐户连接的用户,都属于这个组。注意,在windows 2003内,Everone 组内并不包含“Anonymous Logon”组。

3、备注

用户名 LOCAL SERVICE 、 NETWORK SERVICE 、SYSTEM是系统用户,是系统自带的而不是病毒或入侵,都是正常的用户。注册表中的 BUILTIN 是 built in 的意思,表示内建帐户,属正常。

4、组的作用

组的作用是简化权限的赋予。

赋权限的方式:
		用户-->组-->赋权限
		用户-->赋枫限

内网的环境/基础

1、工作组(work gorup)

在工作组模式的网络中,各服务器都是独立的,而且各服务器中的帐户和资源也是各自进行管理的。所以,管理员需要为每台服务器建立帐户,在管理时也需要分别登录各服务器完成管理工作。授权用户访问不同的服务器时,也需要分别登录。

2、域(Domain)

在域模式的网络中,服务器集中进行管理域中的帐户和资源也是集中管理的。所以,管理员登录到服务器后就可以管理整个域并可以访问所有共享资源在域模式的网络中,需要一个对帐户和资源进行统一管理的机制,这个机制就是活动目录(Active Directory)。域中所有的帐户和共享资源都需要在活动目录中进行登记(所以可以在活动目录当中看共享资源),用户可以利用活动目录查找和使用这些资源。基于域模式的网络可大大减轻管理的复杂度和工作量,通常用于结构较复杂的网络。

3、域与工作组的关系

在工作组上你一切的设置在本机上进行包括各种策略,用户登录也是登录在本机的,密码是放在本机的数据库来验证的。而如果你的计算机加入域的话,各种策略是域控制器统一设定,用户名和密码也是放到域控制器去验证,也就是说你的账号密码可以在同一域的任何一台计算机登录。登陆到域中的时候,身份验证是采用Kerberos协议在域控制器上进行的,登陆到此计算机则是通过SAM来进行NTLM验证的。一台电脑要么属于工作组要么属于域,两者对立存在。

4、域控制器

域控制器(Domain Controller,简写为DC)

是一台安装并运行Active Directory的服务器,它管理用户和域交互之间的所有安全相关方面,集中安全性和管理。一个域可以有一个或多个域控制器,各域控制器间地位平等,管理员可以在任一台域控制器上更新域中的信息,更新的信息会自动传递到网络中的其他域控制器中。(老大-不止一个)

域控的部署---->实验当中有(完整)

5、活动目录

活动目录AD(Active Directory)

域内所有的计算机共享一个集中式的目录数据库(又称为活动目录数据库),它包含着整个域内的对象(用户账户、计算机账户、打印机、共享文件等)和安全信息等等,而活动目录负责目录数据库的添加,修改,更新和删除。所以我们要在Windows Server 2003上实现域环境,其实就是要安装活动目录。活动目录为我们实现了目录服务,提供对企业网络环境的集中式管理。(管理)

6、其他概念(考)

域能实现文件的共享,集中统一,便于管理。

域是windows网络中独立运行的基本单位,域之间相互访问则需要建立信任关系,域有安全边界的作用。

域既是windows网络操作系统的逻辑组织单元,也是Internet的逻辑组织单元,在window操作系统中,域是安全边界。

域是共享用户账号,计算机账号和安全策略的计算机集合。

7、域/域树/域林/林根域

(1)域是一种管理单元,也是一个管理边界在同一个域内共享某些功能和参数;一个域可以有多台域控制器如domain1.com/A.domain1.com/domain2.com分别代表三个独立的域。

(2)域树是指基于在DNS命名空间,如果一个域是另一个域的子域,那么这两个域可以组成一个域树,例如domain1.com/A.domain1.com组成一个域树,domain2.com/A.domain2.com组成—个域树。

(3)域林是指一个或多个不连续DNS名的域(树)的集合;例如上图中的domain1.com/domain2.com/domain3.com组成一个域林。

(4)域林中的第一个被创建的域,称之为林根域。

8、DNS与域的关系

DNS服务器对域来说不可或缺。域中的计算机使用DNS域名,DNS需费为域中的计算机提供域名解服务。

域中的计算机需要利用DNS提供的SRV记录来定位域控制器。

9、DNS对AD域的作用

名称解析:1.DNS将计算机名称转换为IP地址2.计算机使用DNS在网络上相互定位

Windows 2000/2003/2008域的名称:Windows 2000/2003/2008使用DNS命名标准。DNS域和活动自录的域使用共同的名称层析结构。

定位活动目录的物理组件:DNS使用域控制器提供的服务。域中计算机使用DNS来定位域控制器和全局编录。

10、AD域与工作组的区别

管理模式:工作组实现的是分散的管理模式,每一台计算机都是独自自主的;域实现的是主/从管理模式,通过一台域控制器集中管理域内用户帐导和权限。

资源访问:在“域”模式下,资源的访问有较严格的管理,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作。

管理模式:域控制器中包含了由这个域的账户、密码、属于这个域的计算机等信息构成的数据库。工作组只是进行本地电脑的信息与安全的认证。

11、域的信任关系

由于域控制器的作用,域内的用户是不能够跨段进行访问的,如果一定要进行跨段访问,则需要在两个域之间建立信任关系。域与域之间具有一定的信任关系,域信任关系使得一个域中的用户可由另一域中的域控制器进行验证,才能使一个域中的用户访问另一个域中的资源。

域的信任关系---->信任关系域---->被信任关系域

信任关系域的作用:允许一个域内的用户能够访问。

12、组策略

意义:方便管理AD中用户和计算机的工作环境

1.用户桌面环境

2.计算机启动/关机与用户登录/注销时所执行的脚本文件

3.软件分发

4.安全设置

组策略的作用:组策略不适用于早期的Windows操作系统,如Windows 9x/NT,那时使用的是“系统策略”。组策略是系统策略的更高级扩展,它是由Windows 9x/NT的“系统策略”发展而来的,具有更多的管理模板、更灵活的设置对象及更多的功能。

13、域账号登录成员机的过程

使用域账号进行登录---->成员机检查本地没有这个账号,如果没有则成员机向DNS服务器解析DC的IP---->向DC汇报有人想要进行登录,将账号密码发送给DC---->DC在AD里面找有没有这个账号,有就返回可以登录的指示Access Key,这时候成员机接到Access Key就会让它登录并且在C:\user里面为a账号创建家目录和配置文件---->登陆成功后成员机会问DC还有什么要求,DC查询AD将组策略发给成员机---->成员机按照组策略来加载一些特定要求,例如:强制成员机有特定桌面壁纸,不能更改等。

14、域控配置

服务器:

 1,安装AD域服务
 2.设置静态IP地址,并将DNS指向域控
 3.添加域内用户

客户端:

 1,设置静态IP地址,并将DNS指向域控
 2.把用户加入域

5、Windows端口服务

端口

1、”端口“是英文port的意译,可以认为是设备与外界通讯交流的出口。

2、端口可分为虚拟端口和物理端口。

  • 其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。物理端口又称为接口,是可见端口。

3、如果把IP地址比作一间房子,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536(即:2^16)个。端口是通过端口号来标记的,端口号只有整数,范围是从0到65535 (2^16-1)。每一个IP地址上都有65536个端口。

端口分类

按端口号可分为3大类

(1)公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。

(2)注册端口(动态端口)(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。

(3)动态和/或私有端口(Dynamic and/or Private Ports) (一般不会去关注,上面的端口够用了):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。

按照协议类型分类

端口被分为TCP端口和UDP端口两类,虽然他们都用正整数标识,但这并不会引起歧义,比如TCP的80端口和UDP的80端口,因为数据报在标明端口的同时,还将标明端口的类型。

端口详解

端口其实就是队,操作系统为各个进程分配了不同的队,数据包按照目的端口被推入相应的队中,等待被进程取用,在极特殊的情况下,这个队也是有可能溢出的,不过操作系统允许各进程指定和调整自己的队的大小。

运输层为相互通信的应用进程提供了逻辑通信。

常见端口服务

1、TCP80端口-HTTP

HTTP协议简介

HTTP协议的TCP端口默认为80端口

超文本传输协议(英文:Hyper Text Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

HTTP是基于TCP协议之上的。在TCP/IP协议参考模型的各层对应的协议如下文讲解,其中HTTP是应用层的协议。

HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。

TCP/IP协议参考模型/协议
TCP/IP各层对应的协议:
1.FTP (File Transfer Protocol):文件传输协议
2.HTTP Hyper Text Transfer Protocol):超文本传输协议
3.SMTP (Simple Mail Transter Protocol):简单邮件传输协议
4.POP3 (Post Office Ptotocol) :邮局协议
5.DNS (Domain Name System) :域名系统
6.TCP ( Transmission Control Potocol):传输控制协议
7.UDP (User Data Potocol) :用户数据协议
8.IP (Internet Protocol):网络协议络层
9.ARP (Address Resolution Protocol):地址解析协议
10.ICMP ( InternetControl Message Protocol):因特网控制消息协议
11.HDLC (High Data Link Control):高级数据链路控制
12.SLIP(串行线路IP),PPP:点到点协议
13.放大或再生弱的信号,在两个电缆段之间复制每一个比特
1-5为应用层;6-7为传输层;8-11为互联网层;12为数据链路层;13为物理层
TCP/IP协议参考模型:
①TCP/IP 4层模型:
应用层
传输层
互联网层
网络接口层

②TCP/IP 5层模型:
应用层
传输层
互联网层
数据链路层
物理层

③OSI 7层模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
URL

URL:HTTP使用统一资源标识符( Uniform Resource Identifier, URI)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息URL,全称是Uniform Resource Locator,中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。

定位:URL-->是特殊类型的URI-->相当于:全球定位系统
记录:URI-->可以认为只是一个数据库的索引
①例子:  https://www.huya.com/
https://----代表:资源使用的协议
www.huya.com/----代表:域名  (其中域名与IP地址一一对应---写IP地址也行)

②例:  http://www.example.org/index.html#date
http://www.example.org/index.html----URL
//www.example.org/index.html----URN
http://www.example.org/index.html#date----URI
HTTP工作原理

不够安全(无法确认对方的身份)--->只能说连接是可靠的,不能说对方是可靠的。

HTTP请求过程中,客户端与服务器之间没有任何身份确认的过程,数据全部明文传输,相当于“裸奔"在互联网上,所以很容易遭到黑客的攻击。

一次HTTP操作称为一个事务,其工作整个过程如下:
1、地址解析
     如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm
     从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
     协议名:http
     主机名:localhost.com
     端口:8080
     对象路径:/index.htm
     在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。
2、封装HTTP请求数据包
     把以上部分结合本机自己的信息,封装成一个HTTP请求数据包。
3、封装成TCP包,建立TCP连接(TCP的三次握手)
     在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口。
4、客户机发送请求命令
     建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URI)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。
5、服务器响应
     服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
6、服务器关闭TCP连接
	 一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码Connection:keep-alive。TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

2、TCP443端口-HTTPS

HTTPS协议简介

HTTPS协议(Hyper Text Transfer Protocol over Secure Socket Layer,安全套接字层上的超文本传输协议) :可以理解为HTTP+SSL/TLS,即 HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL,用于安全的HTTP数据传输。

SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。

TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。

HTTP:HTTP ---> TCP ---> IP
HTTPS :SSL or TLS ---> TCP ---> IP
HTTP通信的问题及解决办法

问题:

①通信双方使用明文,内容可能被窃听:由于HTTP本身不具备加密的功能,所以也无法做到对通信整体进行加密。

②不验证通信方的身份,因此有可能遭遇伪装:HTTP协议的实现本身非常简单,不论是谁发送过来的请求都会返回响应,因此不确认通信方,会存在各种隐患。比如目标的Web服务器有可能是已伪装的Web服务器。

③无法证明报文的完整性,所以可能遭篡改。

解决办法:

HTTPS协议保证安全基本依赖于TLS/SSL协议,TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 、对称加密和非对称加密。

流程:其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

①解决内容可能被窃听的问题——加密

②解决报文可能遭篡改问题——数字签名

③解决通信方身份可能被伪装的问题—数字证书

数字证书和CA
数字证书与CA的关系

数字证书(Digital Certificate)是用来证明公钥(非对称密钥算法中用于加密的密钥)所有者身份的。

1、数字证书是CA对公钥签名:数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的一个数字文件。

2、数字证书公开的:CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和下载,因此数字证书和公钥一样是公开的。实际上,数字证书就是经过CA认证过的公钥。

3、如何认证公钥可靠:我们人人都可以自己生成一个公钥,但是这个公钥是否能代表是你的,这个认证的过程需要一个权威机构执行,这个机构就是证书授权中心。证书授权中心(Certificate Authority)负责证书颁发。CA 是行业内信得过的组织机构,它具有权威性,由它颁发的证书大家都相信是可靠的。

一般我们自己也生成HTTPS证书,但是自己生成的HTTPS证书却是不能用的。因为浏览器只会承认受信任CA所签发出来的证书,其他个人自签的HTTPS证书浏览器是不会承认的,一律会显示“此网站不安全”的安全提示。所以不要尝试自己去生成HTTPS证书,需要HTTPS证书我们就去找受信任的CA机构进行申请。

CA认证流程(SSL双向认证步骤)

1、服务端申请证书:HTTPS通信双方的服务器端向CA机构申请证书,CA机构是可信的第三方机构,它可以是一个公认的权威的企业,也可以是企业自身。企业内部系统一般都使用企业自身的认证系统。CA机构下发根证书、服务端证书及私钥给申请者;

2、HTTPS通信双方的客户端向CA机构申请证书,CA机构下发根证书、客户端证书及私钥个申请者;

3、客户端向服务器端发起请求,服务端下发服务端证书给客户端。客户端接收到证书后,通过私钥解密证书,并利用服务器端证书中的公钥认证证书信息比较证书里的消息,例如域名和公钥与服务器刚刚发送的相关消息是否一致,如果一致,则客户端认为这个服务器的合法身份;

4、客户端发送客户端证书给服务器端,服务端接收到证书后,通过私钥解密证书,获得客户端的证书公钥,并用该公钥认证证书信息,确认客户端是否合法;

5、客户端通过随机秘钥加密信息,并发送加密后的信息给服务端。服务器端和客户端协商好加密方案后,客户端会产生一个随机的秘钥,客户端通过协商好的加密方案,加密该随机秘钥,并发送该随机秘钥到服务器端。服务器端接收这个秘钥后,双方通信的所有内容都都通过该随机秘钥加密;

图片解读:(空)

【prepare.1:生成公私钥S.pub,S.pri。S.pri自己保存,S.pub发送给CA】

【prepare.2:CA生成公私钥C.pub.C.pri使用C.pri对服务器发的S.pub签名生成CA证书】

【prepare.3:CA将生成的CA证书交给服务器】

【prepare.4:浏览器(客户端)内置CA根证书CA公钥C.pub】

1.发起链接(TCP三次握手)

2.将CA证书返回给客户端,证书包含S.pub,颁发机构,有效期等(sayHello---helloDone)

3.客户端,通过浏览器内置根证书的C.pub验证CA证书的合法性

4.生成陆机对称密钥

5.将客户端生成的对称密钥,通过S.pub加密发给服务器

6.双方通过客户端生成的随机密钥进行http通信

注:服务器罐并没有验证客户端的合法性。因为不必要只有类似银行U盾之类才有必要验证

加密算法
对称加密

有流式、分组两种,加密和解密都是使用的同一个密钥。例如:DES、AES-GCM、ChaCha20-Poly1305等。

这种方式加密和解密同用一个密钥。加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了。以对称加密方式加密时必须将密钥也发给对方。

这种方式的缺点:可究竟怎样才能安全地转交?在互联网上转发密钥时,如果通信被监听那么密钥就可会落人攻击者之手,同时也就失去了加密的意义。另外还得设法安全地保管接收到的密钥。

非对称加密

加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥的算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。例如:RSA、DSA、ECDSA、DH、ECDHE。 (公钥加密,私钥解密)(SSH协议采用这个方式)

非对称加密使用一对密钥:一把叫做私钥,另一把叫做公钥。顾名思义,私钥不能让其他任何人知道,而公钥则可以随意发布,任何人都可以获得。使用非对称加密方式,发送密文的一方使用对方的公钥进行加密处理,对方收到被加密的信息后,再使用自己的私钥进行解密。利用这种方式,不需要发送用来解密的私钥,也不必担心密钥被攻击者窃听而盗走。非对称加密的特点是信息传输一对多,服务器只需要维持一个私钥就能够和多个客户端进行加密通信。

这种方式有以下缺点:①公钥是公开的,所以针对私钥加密的信息,黑客截获后可以使用公钥进行解密,获取其中的内容。②公钥并不包含服务器的信息,使用非对称加密算法无法确保服务器身份的合法性,存在中间人攻击的风险,服务器发送给客户端的公钥可能在传送过程中被中间人截获并篡改。③使用非对称加密在数据加密解密过程需要消耗一定时间,降低了数据传输效率。

哈希算法(散列函数)

将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且早期认为算法不可逆。例如:MD5、SHA-1、SHA-2等。Hash算法的碰撞称为撞库。

Hash值又称为指纹或者摘要,具有以下特点:①正向快速:给定明文和Hash算法,在有限时间和有限资源内能计算得到Hash值。②逆向困难:给定Hash值,在有限时间内很难逆推出明文。③输入敏感:原始输入信息发生任何变化,新的Hash值都应该出现很大变化。④冲突避免:很难找到两段内容不同的明文,使得它们的Hash值一致。

对称加密+非对称加密

(HTTPS采用这种方式)

用对称密钥的好处是解密的效率比较快,使用非对称密钥的好处是可以使得传输的内容不能被破解,因为就算你拦截到了数据,但是没有对应的私钥,也是不能破解内容的。就比如说你抢到了一个保险柜,但是没有保险柜的钥匙也不能打开保险柜。那我们就将对称加密与非对称加密结合起来,充分利用两者各自的优势,在交换密钥环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式。具体做法是:发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥”,这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信。所以,HTTPS采用对称加密和非对称加密两者并用的混合加密机制。

HTTPS工作原理

1、客户端发起HTTPS请求

2、服务端配置

3、传送证书

4、客户端解析证书

5、传送加密信息

6、服务端解密信息

7、传输加密后的信息

8、客户端解密信息

HTTPS工作流程(重点)

1、浏览器发起一个HTTPS(例如https://www.baidu.com/)的请求。

2、服务器端把事先配置好的公钥证书返回给客户端。

3、浏览器验证公钥证书:比如是否在有效期内,证书的用途是不是匹配客户端请求的站点,如果验证通过则继续,不通过则显示警告信息。

4、浏览器使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给服务器。

5、服务器使用自己的私钥解密这个消息,得到对称密钥。至此,Client和Server双方都持有了相同的对称密钥。

6、服务器使用对称密钥对浏览器第一次请求URL对应的响应进行加密,发送给浏览器。

7、此后浏览器和服务器都使用这个对称密钥进行通信。

HTTP和HTTPS的区别

连接/端口号:HTTP和HTTPS使用的是完全不停的连接方式,端口也不一样,前者是80,后者是443。

协议:HTTP是超文本传输协议,信息明文传输;HTTPS是具有安全性的SSL/TLS加密传输协议。

HTTPS-CA:HTTPS需要申请CA证书。

安全:HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建,可进行加密传输、身份认证的网络协议,比HTTP协议安全。

https通信的优点

1)客户端产生的密钥只有客户端和服务器端能得到。

2)加密的数据只有客户端和服务器端才能得到明文。

3)客户端到服务端的通信是安全的。

3、UDP53端口-DNS

简述

DNS简介:DNS叫做域名系统(Domain Name System),这是互联网的一项服务,DNS就是为了方便用户记忆,访问服务器,不用记忆冗余、复杂的IP地址。说白了,访问域名就是访问IP地址。

域名,从右往左数,右边是左边的父域名,越往左的范围越小。

域名等级图略。

顶级域名:.com

DNS有两个检索方式:迭代查询、递归查询。

解析过程

1、客户端在浏览器输入网址后,对于这个域名,首先查看浏览器的缓存,若没有记录,查看本地的hosts文件,去本地DNS服务器;这个过程属于递归查询。本地的hosts文件路径:file:///C:/Windows/System32/drivers/etc/hosts

2、本地DNS服务器拿到这个域名后,先去找13台根服务器,然后就存在两种方式:迭代查询、递归查询。

DNS递归解析流程

1)、客户端向本机配置的本地名称服务器(在此仅以首选DNS服务器为例进行介绍,所配置其它备用DNS服务器的解析流程完全一样)发出DNS域名查询请求。

2)、本地名称服务器收到请求后,先查询本地的缓存,如果有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端;如果本地缓存中没有该域名的记录,则本地名称服务器再以DNS客户端的角色发送与前面一样的DNS域名查询请求发给根名称服务器

3)、根名称服务器收到DNS请求后,把所查询得到的所请求的DNS域名中顶级域名所对应的顶级名称服务器地址返回给本地名称服务器。

4)、本地名称服务器根据根名称服务器所返回的顶级名称服务器地址,向对应的顶级名称服务器发送与前面一样的DNS域名查询请求。

5)、对应的顶级名称服务器在收到DNS查询请求后,也是先查询自己的缓存,如果有所请求的DNS域名的记录项,则相接把对应的记录项返回给本地名称服务器,然后再由本地名称服务器返回给DNS客户端,否则向本地名称服务器返回所请求的DNS域名中的二级域名所对应的二级名称服务器地址。然后本地名称服务器继续按照前面介绍的方法一次次地向三级、四级名称服务器查询,直到最终的对应域名所在区域的权威名称服务器返回到最终的记录给本地名称服务器。然后再由本地名称服务器返回给DNS客户,同时本地名称服务器会缓存本次查询得到的记录项。

递归查询和迭代查询的区别

①DNS客户端和本地名称服务器是递归,而本地名称服务器和其他名称服务器之间是迭代。

②DNS递归名称解析:在DNS递归名称解析中,当所配置的本地名称服务器解析不了时,后面的查询工作是由本地名称服务器替代DNS客户端进行的(以本地名称服务器为中心),只需要本地名称服务器向DNS客户端返回最终的查询结果即可。

③DNS迭代名称解析:(或者叫迭代查询)的所有查询工作全部是DNS客户端自己进行(以DNS客户端自己为中心)。在条件之一满足时就会采用迭代名称解析方式:

  • 在查询本地名称服务器时,如果客户端的请求报文中没有申请使用递归查询,即在DNS请求报头部的RD字段没有置1。相当于说”你都没有主动要求我为你进行递归查询,我当然不会为你工作了”。
  • 客户端在DNS请求报文中申请使用的是递归查询(也就是RD字段置1了),但在所配置的本地名称服务器上是禁用递归查询(DNS服务器一般默认支持递归查询的),即在应答DNS报文头部的RA字段置0。

递归与迭代图

DNS的两个问题
DNS污染

网域服务器缓存污染(DNS cache pollution)(缓存出错-不是人为),又称域名服务器缓存投毒(DNS cache poisoning),是指一些刻意制造或无意中制造出来的域名服务器数据包,把域名指往不正确的IP地址。一般来说,在互联网上都有可信赖的网域服务器,但为减低网络上的流量压力,一般的域名服务器都会把从上游的域名服务器获得的解析记录暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一旦有关网域的局域域名服务器的缓存受到污染,就会把网域内的计算机导引往错误的服务器或服务器的网址。

DNS劫持

域名劫持(DNS劫持)(人为)是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的IP地址从而实现用户无法访问目标网站的目的或者蓄意或恶意要求用户访问指定IP地址(网站)的目的。

4、UDP67端口,UDP68端口-DHCP

DHCP (Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得P地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。

DHCP用的端号是UDP67和UDP68,这两个端口是正常的DHCP服务端口,可以理解为一个发送,一专个接收。客户端属向68端口(bootps)广播请求配置,服务器向67端口(bootpc)广播回应请求。

DHCP交互过程

1、发现阶段:DHCP客户机寻找DHCP服务器的阶段。

2、提供阶段:DHCP服务器提供IP地址的阶段。

3、请求选择阶段:DHCP客户机广播DHCP请求信息,选择某台DHCP所提供的IP地址。

4、确认阶段:DHCP服务器确认所提供的IP地址的阶段。

5、*重新登陆

6、*更新租约

5、TCP3389端口-RDP

RDP,Remote Desktop Protocol,远程桌面协议,是一个多通道( mutil-channel)的协议,让用户(客户端或称“本地电脑")连上提供微软终端机服务的电脑(服务器端或称“远程电脑")。大部分的Windows、Linux、FreeBSD、Mac OS X都有相应的客户端。服务端听取送到TCP3389端口的数据。

重点!!远程端口3389----是高危端口

GUI

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。(桌面)

修改RDP默认端口

方法一:直接开启远程桌面服务(选用默认端口时)

方法二:注册表当中端口号修改+关闭防火墙策略实现远程桌面服务

方法三:注册表当中端口号修改+添加防火墙策略实现远程桌面服务

(详解见:实验部分)

6、域环境策略配置、远程登入、用户实验

1、域环境策略配置

1、域环境搭建

第一步:域控的搭建(将服务器升级为域控时,管理员自动升级为域管理员)。

​ ①服务器IP地址的配置(静态配置IP),并使DNS指向自己:IP:192.168.10.10,子网掩码:255.255.255.0,网关:192.168.10.254,首选DNS:192.168.10.10。

​ ②添加角色:打开”服务管理器“-->选择”角色“-->选择”添加角色“-->选择服务器角色为“Active Directory域服务”-->随后按照添加角色的向导进行操作。

​ ③按照向导升级为域控:安装好域服务后点击''Active Directory域服务“-->点击”运行Active Directory 域发安装向导(dcprono.exe)“-->不用选择高级模式,直接点击安装-->选择”在林中新建域“-->目录林根域名设为”mao.com“-->一直选择下一步-->设置密码为xzm@021968-->继续下一步并选择完成后重启(重启后发现当前计算机已经成功成为域服务器)。

​ ④添加组织单位和账户:点击”开始“-->点击”管理工具“-->点击”Active Directory 用户和计算机“-->右键mao.com,选择新建组织单位,取名为mao-->“此视图中没有可显示的项目。”中右键新建-创建两个用户(dada、xiao)(设置好密码;并选择用户不能更改密码、密码永不过期),一个加入组;一个不加入组-->在刚才的视图当中右击创建一个组,名为123-->将用户dada拉进123这个组当中-->可以选择查看隶属单位(右键属性)。

2、加入域

第二步:域用户(windows 7)加入域。

​ ①Windows 7设置静态IP并修改本地的DNS使之指向域控:IP:192.168.10.20,子网掩码:255.255.255.0,网关:192.168.10.254,首选DNS服务器:192.168.10.10。

​ ②加入域:右键计算机选择“管理”-->点击”更改设置“-->点击”更改“-->选择隶属于”mao.com“-->输入账户名和密码:dada、xzm@021968(这里的计算机用户是在域中新建的用户(dada、xiao))。

​ ③设置用户交互式登入:打开”本地安全策略“-->选择“安全设置”-->选择”本地策略“-->选择”安全选项“-->找到”交互式登入:不显示最后的用户名“,选择启用。

​ ④设置完成后点击”随后关闭应用点击重启“-->关闭相关程序窗口(程序自动进入重启状态)-->重启完成后选择切换用户登入(账户名和密码为dada、xzm@021968)-->此时Windows 7的dada这个用户已经成功加入域当中(其实xiao也加入了域当中)。

3、创建共享文件夹

第三步:创建共享文件夹。在服务器上开启共享文件夹,通过网络路径进行组策略的配置,效果更好。

​ 在服务器上创建一个文件夹,“名为11”-->将一张图片名为“1.jpg”的图片放入该文件夹下-->右键该文件夹选择”属性“-->①选择“共享”-->添加用户(这里需要查找),选择名称为Domain Users-->点击确认-->②选择”高级共享“-->勾选”共享此文件夹“-->在权限当中添加对象名称为Domain Users-->点击确认-->最后在客户端上的此电脑当中使用网络地址搜索【\\192.168.10.10】,也就可以看见共享文件夹11当中的一张图片。

4、组策略配置

第四步:对用户登入到域环境上所需要进行的基本操作。(用户无法修改)

​ 在”开始“当中搜索”组策略管理“-->点击”组策略管理“-->点击”林:mao.com“-->点击”域“-->点击”mao.com“-->点击”mao“-->在mao中右键选择在整个域中创建GPO-->在新建GPO当中命名为:111-->有右击创建好的GPO111,并右键选择编辑-->点击 ”用户配置“-->点击”策略“-->点击”管理模板“-->①点击”桌面“当中进行第一个策略配置-->点击”从桌面删除回收站“-->点击”已启用“并应用、确定-->②点击"Active Desktop"-->点击”桌面墙纸“-->点击已启用并将墙纸名称设为“\\192.168.10.10\11\1.jpg”-->选择“应用”并确定。

5、客户端策略测试

第五步:客户端测试。

在客户端上测试(将整个Windows 7客户端关闭,再重新开机,如果桌面出现黑色的话可以选择重启客户端,或者更新下组策略,或者重新加载桌面进程)-->可以发现两个用户的组策略均生效。

2、远程登入

(物理机远程上虚拟机192.168.126.128)

方法一:直接开启远程桌面服务。

​ ①实现两者的通信(ping通测试)

​ ②在虚拟机上开启远程操作:右键“计算机”,选择“属性”-->选择“远程设置”-->选择“远程”-->选择“允许运行任意版本远程桌面的计算机连接(较不安全)”-->点击“应用”并确定。

​ ③连接:在物理机上按“win+R”输入“mstsc”-->输入计算机:192.168.126.128:3389(默认的远程端口为3389,如果没有对端口进行改动的话可以默认不带端口号)-->输入虚拟机的登入密码056435(登入密码一定要设置,否则登入不上)-->点击"是"-->物理机上远程登入虚拟机成功。

方法二:注册表修改+防火墙策略实现远程桌面服务。

​ ①实现两者的通信(ping通测试)

​ ②win+R,输入regedit打开注册表-->查找路径:【HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp】-->下拉找到PortNumber右键选择“修改”-->选择“修改十进制“数值为这个【1024到49151】区间内的。原来是3389这里改为9999,并确定。

​ ③关闭防火墙:点击”控制面板“(然后关闭Windows7上的防火墙策略)-->选择”系统和安全“-->选择”Windows防火墙“-->选择”更改通知设置“-->关闭”Windows防火墙“(家庭或工作、公网网络)-->这时,重启Windows7虚拟机,让防火墙策略生效。

​ ④连接:在物理机上按“win+R”输入“mstsc”-->输入计算机:192.168.126.128:9999-->输入虚拟机的登入密码056435(登入密码一定要设置,否则登入不上)-->点击"是"-->物理机上远程登入虚拟机成功。

3、用户实验

缺陷:该实验操作必须是要使用管理员权限才可以操作。

目的:学会越权

Windows当中查看用户的四种方法

①DOS界面

win+r 输入CMD(管理员权限也行)--->输入net user查看用户

②GUI界面

打开开始菜单栏--->点击用户图标,可以看到用户的GUI界面--->点击“管理其他账户”。

(如果里面有”标准用户“,那么就是自己创建的用户,在windows当中标准用户就是普通的user组成员。)
(自己创建的用户自动会加入本地管理员组,就是个管理员,就可以查看其他用户。)

缺点:容易被人隐藏,而导致失效。

③本地用户和组

输入lusrmgr.msc打开本地用户和组--->点击用户即可通过GUI界面可视化的查询

缺点:如果在其中的某个步骤被人屏蔽了,那么这个方法就会失效。

④注册表----这是最彻底的方式

输入regedit打开注册表--->点击这个HKEY_LOCAL_MACHINE--->点击SAM文件下的SAM文件--->然后右键将Administrators这个组赋予权限并应用--->查找路径为:“计算机->HKEY_LOCAL_MACHINE->SAM->SAM->Domains->Account->Users->Names”。其中Users放的是各账户所对应的密码(身份令牌);Names存放的是各账户名。(需要查看Name所对应的类型值,因为有可能并不是一一对应的)

SAM文件在Windows当中属于身份认证的文件,文件路径为C:\Windows\System32\config

打开交互式登入

过程:搜索”本地安全策略“或者输入secpol.msc进入本地安全策略--->点击本地策略--->安全选项--->找到”交互式登入:不显示最后的用户名“,并将其启用。

用处:增加Windows的安全性。此后所有登入该电脑时就不单单只是输入密码了,还需要输入账户和密码两者信息。

实验一:隐藏用户

做隐藏用户的目的:骗过系统(DOS界面)

命令:net user h$ 123 /add (在DOS界面输入该命令),其中加$符只能骗过CMD,但在其他地方(如:注册表、本地用户和组、GUI界面)还都可以查得到。

缺点:只能隐藏DOS界面查找,其余界面均能被查得到。没什么用,而且创建的账户权限很低。

实验二:假死用户

首先现在注册表当中找到需要假死的用户,右键导出账户和身份令牌放在桌面上--->通过管理员权限的DOS界面删除该账户和身份令牌。(此时该账户在本机的所有信息均删除,仅一处保存至桌面)--->现在在双击在桌面的账户信息和身份令牌,系统则会自动的将里面对应的内容添加的注册表所对应的地方上--->此时现在就只有注册表一处可查该账户信息,其余地方不可查--->切换账户登入即可。

使用交互式模式登入,输入账号/密码为h\(/123,页面显示”正在准备桌面“。说明系统认可了`h\)`这个用户,我们假死替身的用户被系统认可了,还给我们创建了相应的系统进程空间让我们进入了计算机。但是在进入系统之后权限非常低,无法用管理员模式打开CMD。

目的:账户的信息仅在注册表可查,在DOS界面、本地用户和组、GUI界面查不到。

缺点:但创建的账户权限很低。且稍微懂点操作系统的人都会查得到。

实验三:影子用户/克隆管理员用户

先创建账户名为jj,密码为123的账户--->在注册表当中将这两个身份信息导出到桌面,并且再导出管理员的身份令牌--->将管理员的身份令牌当中的”F“值复制进jj的身份令牌“F“值上--->再DOS当中输入net user jj active:yes将管理员账户解禁,这里相当于将管理员身份活跃起来(由于我们将管理员的”F”值替换进jj的SID当中,所以此时jj就是管理员身份),记得在本地用户和组当中刷新一下--->然后再将账户为jj的两个身份信息双击导入到注册表当中--->最后切换jj这个用户导入即可。

重点:盗取别人的身份令牌(SID),SID是系统用来识别账户(权限)。

思路:盗取别人的身份令牌来用,使普通用户成为管理员的过程。账号克隆就是复制管理员的注册表信息到需要的账户上。

  • 快速找到影子用户的办法:从注册表当中查找。如果注册表中SAM文件当中没有,则系统是不认可这个账户的。

  • 偷盗别人身份,并不是真正的共存。克隆用户时两个账户可以同时查找;影子用户只能说管理员和用户存在一个,不能共存。

7、Windows应急响应

一、概述

近年来,随着互联网的发展网络安全攻击事件也是大幅度增多,如何在第一时间发现攻击事件,并实施应急处置,能够有效的将损失降到最低。在实施应急响应的过程中,需要从多方面进行联动工作,具体的流程和依据可以参考《GB∕T 38645-2020 信息安全技术 网络安全事件应急演练指南》,本篇主要以Windows7下应急响应的基础技术手段进行介绍。

当企业发生黑客入侵、系统崩溃或其他影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,①进一步查找入侵来源(人为、非人为),②还原入侵事故过程(通过日志来还原)(日志相当于系统监控摄像头,但需要一定的能力才能看懂),③同时给出解决方案(解决掉)与防范措施(安全加固),为企业挽回或减少经济损失。

  • 通过排查事件是否为应急响应事件,如果是的话则说明可能出现安全问题。

常见应急响应事件分类:

web入侵(web渗透):网页挂马、主页篡改、Webshell (通过浏览器登入(门户网站--对外开发的网站),入侵到内网)

系统入侵(内网渗透;当你入侵进内网环境时可以做些什么):病毒木马、勒索软件、远控后门 (在内网内部搞破坏 )

网络攻击(可以通过大量肉鸡进行攻击):DDOS攻击、DNS劫持、ARP欺骗 (不做技术要求,通过疯狂发包、疯狂发业务来来将你的内存缓存打满,导致系统宕机。 )

应急响应流程:检查系统账号安全---->检查异常端口、进程---->检查启动项、计划任务、服务---->检查系统相关信息---->自动化查杀---->日志分析(各种系统都通用这个流程)

二、技术分析

1、准备工作

在正式实施应急响应之前,需要先进行以下工作:

第一、信息收集,先对安全事件进行详细的了解,包括系统、服务以及业务类型。

第二、思路梳理,通过以上信息收集初步梳理自己的分析思路。

第三、工具准备,提前准备好需要用到的工具脚本等资料。

第四、数据备份,所有涉及到分析以及证据的材料都需要提前进行备份,这样也方便之后还有分析人员或者防止数据被篡改或者覆盖。

第五、时间校准,查看系统时间和北京时间是否同步准确,如果不准确那么系统日志等信息的事件可能会存在误差,所以必须提前校准时间。

2、账号分析

查看系统所有的账户,是否存在恶意新增账户,进行远程控制等问题,具体方式如下:

1)查看服务器是否由弱口令组成【弱口令检测工具——John the Ripper】,远程管理端口是否对公网开放【检查远程主机端口是否开启】。据实际情况咨询相关服务器管理员。

2)cmd命令行输入net user查看用户账户,该方法有一个弊端就是无法查看系统建立的隐藏账户。

3)计算机管理->系统工具->本地用户和组->用户(或者lusrmgr.msc),可以查看系统现有账户,其中账户后面带$的则为隐藏账户。

4)控制面板->用户账户和家庭安全->用户账户->管理其他账户,也可以查看所有系统账户。

5)Win+R输入regedit.exe进入注册表编辑器,在下面注册表HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names中也可以查看系统现有账户(或者D盾查杀)。

6) 在cmd命令行中利用net user administrator可以查看administrator该账户的详细信息。

7)在cmd命令行中利用query user可以查看目前登录的账户。

3、最近打开过的文件分析

1)键盘输入win+R打开运行窗口输入recent,直接打开C:\Administrtor\Recent(win10),可以查看最近打开过的所有文件。

2)设置最新使用的项目查看最近打开的文件。开始菜单右键->属性->开始菜单(自定义)->勾选最近使用的项目。

3)键盘输入win+e,点击组织->文件夹和搜索选项->将导航窗口全选上。

4)回收站查看最近删除文件。回收站中可能会存在一些攻击者删除的最近打开编辑后的文件资料等痕迹,可以选择还原所以项目,也是需要注意的。

4、日志分析

日志分析包括操作系统的日志记录以及web应用的日志记录,一般来说操作系统的日志主要记录针对该系统的操作行为事件,但是web应用日志则会记录web程序访问该应用程序的时候的操作行为和事件,一般针对日志分析时候也是需要从操作系统和web应用日志两块结合分析。

1)操作系统日志

1)运行键入eventvwr.msc,打开事件查看器。导出应用程序日志、安全日志、系统日志,利用Log Parser进行分析。

前提:开启审核策略,若日后系统出现故障、安全事故则可以查看系统的日志文件,排除故障,追查入侵者的信息等。

操作系统日志存放着计算机关于系统、应用程序的告警信息以及安全日志等信息,一般存放C:\Windows\System32\winevt\Logs,可以通过事件查看器进行查看。

系统日志中存放了Windows操作系统产生的信息、警告或错误。通过查看这些信息、警告或错误,用户不但可以了解到某项功能配置或运行成功的信息,还可了解到系统的某些功能运行失败,或变得不稳定的原因。打开事件查看器->Windows日志->系统。

应用程序日志中存放应用程序产生的信息、警告或错误。通过查看这些信息、警告或错误,用户可以了解到哪些应用程序成功运行,产生了哪些错误或者潜在错误。程序开发人员可以利用这些资源来改善应用程序。打开事件查看器->Windows日志->应用程序。

安全日志(重点)中存放了审核事件是否成功的信息。通过查看这些信息,用户可以了解到这些安全审核结果为成功还是失败。同时安全日志会存放攻击者远程登陆后或者通过提权等方法拿到权限后的一些操作行为,更有助于定位攻击者对操作系统的攻击行为。打开事件查看器(eventvwr.msc)->Windows日志->安全【导出windows日志-安全,利用Log Parser进行分析】。(一般在操作系统日志分析过程中更关注安全日志的分析)

Windows事件日志通过不同的EVENT ID代表了不同的意义,针对常用的**安全事件**的事件ID还是需要熟练掌握。 其中:
4624:代表成功的登录;
4625:代表失败的尝试;
4672:代表授予特殊权限;
4720:代表添加用户;
4726:代表删除用户;
4634:代表成功的注销;
4672:代表超级用户登录。
因此想要查看账户登录事件,筛选日志中事件ID填入4624则可以筛选登录成功事件,4625则可以筛选登录失败事件。

当有人使用mstsc远程登录某个主机时,使用的帐户是管理员帐户的话,成功的情况下会有事件ID为4776、4648、4624、4672的事件产生。

安全日志中除了会记录改事件的成功失败以外还会记录该事件的IP地址和端口,因此如果发现某个远程登陆时,通过查看详细信息便可以分析出远程登陆的IP地址和他机器的端口。

2)Web应用日志

1)找到中间件的web日志,打包到本地方便进行分析。

推荐工具:Windows下,推荐使用EmEditor进行日志分析,支持大文本,搜索效率还不错。Linux下,使用Shell命令组合查看分析。

5、进程、网络连接分析

一般检查进程和网络连接是同步进行的,相互结合着进行分析是否有异常程序进行远程连接。

1)网络连接

windows中的网络连接可以通过netstat命令进行定位,查看正则监听以及连接的网络连接。netstat结合findstr可以查看不同端口的网络连接信息。如:c:\Windows\system32>netstat -ano l findstr 138

2)进程检查

①在msinfo32中查看现有进程(开始->运行->输入msinfo32->软件环境->正在允许任务)。比如进程路径、进程ID、文件创建日期、启动时间等。

②打开windows任务管理器,可以点击启动任务管理器查看系统进程。

③cmd命令行输入tasklist查看进程。tasklist 结合findstr可以查看不同pid对应的程序。c:\Windows\system32>tasklist | findstr 269

④打开D盾_web查杀工具,进程查看,关注没有签名信息的进程。

⑤通过微软官方提供的Process Explorer等工具进行排查。

⑥查看可疑的进程及子进程。可以通过观察以下内容:没有签名验证信息的进程、没有描述信息的进程、进程的属主、进程的路径是否合法、CPU或内存资源占用长时间过高的进程。

3)检查端口连接

是否有远程连接、可疑连接。

①netstat -ano查看目前的网络连接,定位可疑的ESTABLISHED(已建立连接状态)

②根据netstat定位出的pid,再通过tasklist命令进行进程定位tasklist /fi"PID eq 12852"

4)小技巧(重点)

a、查看端口对应的PID:netstat -ano | findstr “port”

b、查看PID对应的进程:tasklist /fi “PID eq pid”

c、查看进程对应的程序位置:任务管理器-->选择对应进程-->右键打开文件位置运行键入wmic,输入命令process

d、tasklist /svc进程-->PID-->服务

e、查看Windows服务所对应的端口:运行键入drivers-->进入etc文件-->打开services文件

6、计划任务分析

windows的计划任务是方便运维人员在不同时间段对系统进行一些操作的功能,但是在恶意攻击中被黑客用来做为恶意程序的启动等手段,也是windows应急响应中必须分析的功能。

windows的计划任务一般存放在C:\Windows\System32\Tasks\或者C:\Windows\SysWOW64\Tasks\以及C:\Windows\tasks\等目录下。一般利用图形化界面可以打开,运行->taskschd.msc,打开任务计划程序。

1)win+q搜索任务计划程序或右键此电脑-->管理,查看计划任务属性,便可以发现木马文件的路径。

2)cmd中输入命令at检查计算机与网络上的其他计算机之间的会话或计划任务,如有则确认是否为正常连接。

7、自启动分析

自启动功能表示每次系统开机启动后程序也跟着启动,也是很多恶意程序最喜欢的功能,如果被加到自启动项的程序便会出现在该项目下。

①运行->msconfig打开系统配置可以查看;

②运行->msinfo32打开系统信息,在软件环境下的启动程序也可以查看。

③运行键入services.msc,注意服务状态和启动类型,检查是否有异常服务。

④登录服务器,任务管理器-->启动

⑤运行键入msconfig-->启动

⑥运行键入regedit打开注册表,查看开机启动项是否正常,特别注意如下三个注册表项:

​ HKEY_CURRENT_USERISoftwarelMicrosoftWindows\CurrentVersion\Run

​ HKEY_LOCAL_MACHINE\SOFTWARE\MicrosoftWindows\CurrentVersion\Run

​ HKEY_LOCAL_MACHINE\SOFTWARE\MicrosoftWindows\CurrentVersionRunOnce

⑦利用安全软件查看启动项、开机时间管理等

⑧组策略,运行gpedit.msc

8、自动化查杀

①病毒查杀

下载安全软件,更新最新病毒库,进行全盘扫描。

②webshell查杀

选择具体站点路径进行webshell查杀,建议使用两款webshell查杀工具同时查杀,可相互补充规则库的不足。

9、host文件分析

host文件是windows下用来构建映射关系的文件,局域网没有DNS服务器,通过hosts建立给服务器建立IP映射,通过分析可以查看是否存在本地DNS篡改,该文件在C:\Windows\System32\drivers\etc目录下,打开后可以查看详细对应关系。

10、webshell查杀分析

通过上述一系列的分析完成之后,如果在数据文件备份均以完成,且客户可分析允许的情况下,可以对系统进行病毒的扫描,以及web服务下的webshell扫描,扫描可以用的D盾等一系列webshell查杀工具。

三、工具使用

1、病毒分析

PCHunter(已经收费): http://www.xuetr.com/

火绒剑: https://www.huorong.cn/

Process Explorer: https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer

processhacker: https://processhacker.sourceforge.io/downloads.php

autoruns: https://docs.microsoft.com/zh-cn/sysinternals/downloads/autoruns

2、病毒查杀

卡巴斯基: http://devbuilds.kaspersky-labs.com/devbuilds/kvrt/latest/full/kvrt.exe(推荐理由:绿色版、最新病毒库)

大蜘蛛: https://free.drweb.ru/download+cureit+free(推荐理由:扫描快、一次下载只能用1周,更新病毒库)

火绒安全软件:https://www.huorong.cn

360杀毒:http://sd.360.cn/download_center.html

3、病毒动态

CVERC-国家计算机病毒应急处理中心:https://www.cverc.org.cn/

微步在线X情报社区:https://x.threatbook.cn/

火绒安全论坛:https://bbs.huorong.cn/

爱毒霸社区:http://bbs.duba.net

腾讯电脑管家:http://bbs.guanjia.qq.com/

4、在线病毒扫描网站

virscan:http://www.virscan.org

腾讯哈勃分析系统:https://habo.qq.com

jotti恶意软件扫描系统:https://virusscan.jotti.org

针对计算机病毒、手机病毒、可疑文件等进行检测分析:http://www.scanvir.com

5、webshell查杀

D盾_Web查杀:http://www.d99net.net

河马webshell查杀(有可能查不到):http://www.shellpub.com

深信服Webshell网站后面检测工具:http://edr.sangfor.com.cn/backdoor_detection.html

Safe3:http://www.uusec.com/webshell.zip

6、后门查杀

1、文件md5校验

2、工具查杀

7、日志分析工具

Log Parser Lizard

对于GUI环境的Log Parser Lizard,其特点是比较易于使用,甚至不需要记忆繁琐的命令,只需要做好设置,写好基本的SQL语句,就可以直观的得到结果。下载地址:http://www.lizard-labs.com/log_parser_lizard.aspx。依赖包:Microsoft .NET Framework 4.5,下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=30653

Event Log Explorer

Event Log Explorer是一款非常好用的Windows日志分析工具。可用于查看、监视和分析跟事件记录,包括安全,系统,应用程序和其他微软Windows的记录被记载的事件,其强大的过滤功能可以快速的过滤出有价值的信息。下载地址:https://event-log-explorer.en.softonic.com/

8、勒索自救指南

勒索病毒搜索引擎

在勒索病毒搜索引擎输入病毒名、勒索邮箱、被加密后文件的后缀名,或直接被上传被加密的文件、勒索提示信息,即可快速查找到病毒详情和解密工具。

【360】勒索病毒搜索引擎,支持检索超过800中常见勒索病毒 http://lesuobingdu.360.cn

【腾讯】勒索病毒搜索引擎,支持检索超过300中常见勒索病毒 https://guanjia.qq.com/pr/ls/

【启明】VenusEye勒索病毒搜索引擎,超300中勒索病毒家族 https://lesuo.venuseye.com.cn/

【奇安信】勒索病毒搜索引擎 https://lesuobingdu.qianxin.com/

勒索软件解密工具集

很多安全公司都提供了免费的勒索病毒解密工具下载,收集和整理相关下载地址,可以帮助我们了解和获取最新的勒索病毒解密工具。

【Github项目】勒索病毒解密工具收集汇总 https://github.com/jiansiting/Decryption-Tools

【卡巴斯基】免费勒索解密器 https://noransom.kaspersky.com/

【火绒】安全工具下载 https://bbs.huorong.cn/forum-55-1.html

【腾讯哈勃】勒索软件专杀工具 https://habo.qq.com/tool/index

应急响应实操案例

四、入侵排查方法(精简版)

1、检查系统账号安全

①查看服务器是否由弱口令,远程管理端口是否对公网开放。

​ #检查方法:据实际情况咨询相关服务器管理员。

②查看服务器是否存在可疑账号、新增账号。

​ #检查方法:打开本地用户和组(lusrmgr.msc),查看是否有新增/可疑的账号。

③查看服务器是否存在隐藏账户、克隆/影子账号。

​ #检查方法:a、打开注册表,查看管理员对应键值 b、使用工具,D盾查杀

④结合日志,查看管理员登录时间、用户名是否存在异常。

​ #检查方法:a、打开事件查看器(eventvwr.msc) b、导出Windows日志-安全,利用Log Parser进行分析。

2、检查异常端口、进程

①检查端口连接情况,是否有远程连接、可疑连接。

​ #检查方法:

a、netstat -ano查看目前的网络连接,定位可疑的ESTABLISHED(已建立连接)

b、根据netstat定位出的pid,再通过tasklist命令进行进程定位tasklist /fi"PID eq 12852"

②进程

​ #检查方法:

a、开始-->运行-->键入msinfo32,依次点击“软件环境-->正在运行任务"就可以查看到进程的详细信息,比如进程路径、进程ID、文件创建日期、启动时间等。

b、打开D盾_web查杀工具,进程查看,关注没有签名信息的进程。

c、通过微软官方提供的 Process Explorer等工具进行排查。

d、查看可疑的进程及子进程。可以通过观察以下内容:没有签名验证信息的进程、没有描述信息的进程、进程的属主、进程的路径是否合法、CPU或内存资源占用长时间过高的进程。

③小技巧:

a、查看端口对应的PID:netstat -ano | findstr “port”

b、查看PID对应的进程:tasklist /fi “PID eq pid”

c、查看进程对应的程序位置:任务管理器-->选择对应进程-->右键打开文件位置运行键入wmic,输入命令process

d、tasklist /svc进程-->PID-->服务

e、查看Windows服务所对应的端口:运行键入drivers-->进入etc文件-->打开services文件

3、检查启动项、计划任务、服务

①检查服务器是否有异常的启动项。

​ #检查方法:

a、登录服务器,任务管理器-->启动

b、运行键入msconfig-->启动

c、运行键入regedit打开注册表,查看开机启动项是否正常,特别注意如下三个注册表项:

​ HKEY_CURRENT_USERISoftwarelMicrosoftWindows\CurrentVersion\Run

​ HKEY_LOCAL_MACHINE\SOFTWARE\MicrosoftWindows\CurrentVersion\Run

​ HKEY_LOCAL_MACHINE\SOFTWARE\MicrosoftWindows\CurrentVersionRunOnce

d、利用安全软件查看启动项、开机时间管理等

e、组策略,运行gpedit.msc

②检查计划任务

​ #检查方法:

a、win+q搜索任务计划程序或右键此电脑-->管理,查看计划任务属性,便可以发现木马文件的路径。

b、cmd中输入命令at检查计算机与网络上的其他计算机之间的会话或计划任务,如有则确认是否为正常连接。

③服务自启动

​ #检查方法:

运行键入services.msc,注意服务状态和启动类型,检查是否有异常服务。

4、自动化查杀

①病毒查杀

​ #检查方法:下载安全软件,更新最新病毒库,进行全盘扫描。

②webshell查杀

​ #检查方法:选择具体站点路径进行webshell查杀,建议使用两款webshell查杀工具同时查杀,可相互补充规则库的不足。

5、日志分析

①系统日志

​ #分析方法:

a、前提:开启审核策略,若日后系统出现故障、安全事故则可以查看系统的日志文件,排除故障,追查入侵者的信息等。

b、运行键入eventvwr.msc,打开事件查看器。

c、导出应用程序日志、安全日志、系统日志,利用Log Parser进行分析。

②WEB访问日志

​ #分析方法:

a、找到中间件的web日志,打包到本地方便进行分析。

b、推荐工具:Windows下,推荐使用EmEditor进行日志分析,支持大文本,搜索效率还不错。Linux下,使用Shell命令组合查看分析。

事件日志分析

对于Windows事件日志分析,不同的EVENT ID代表不同的意义,摘录一些常见的安全事件的说明:

事件ID 说明
4624 登入成功
4625 登入失败
4634 注销成功
4647 用户启动的注销
4672 使用超级用户(如管理员)进行登入
4720 创建用户

每个成功登录的事件都会标记一个登录类型,不同登录类型代表不同的方式:

登录类型 描述 说明
2 c (Interactive) 用户在本地进行登录。
3 网络(Network) 最常见的情况就是连接到共享文件夹或共享打印机时。
4 批处理(Batch) 通常表明某计划任务启动。
5 服务(Service) 每种服务都被配置在某个特定的用户账号下运行。
7 解锁(Unlock) 屏保解锁。
8 网络明文(NetworkCleartext) 登录的密码在网络上是通过明文传输的,如FTP。
9 新凭证(NewCredentials) 使用带/Netonly参数的RUNAS命令运行一个程序。
10 远程交互(RemoteInteractive) 通过终端服务、远程桌面或远程协助访问计算机。
11 缓存交互(Cachedlnteractive) 以一个域用户登录而

8、Windows安全加固

1、账户

账户-默认账户安全

①禁用Guest账户(禁用默认账户)。

②禁用或删除其他账户(建议先禁用账户—段时间,待确认没有问题后删除)。

③设定不同的用户和用户组。例如,管理员用户、数据库用户、审计用户、来宾用户等。

说明:

1.管理员用户:能够维护正常应用进程的管理员,不是超级管理员

2.数据库用户(安全管理员):身份认证

3.审计用户(审计管理员):查看日志

4.服务器里面不能存在一个多余的账户,存在有可能会被认为是一个非法账户。

5.进程/服务,身份认证,日志---->达到三权分立的状态。分权控制有利于将权限分散管理,从而降低账户风险。

账户-定期检查本地用户和组

定期删除或锁定与设备运行、维护等与工作无关的帐户。

操作步骤:打开控制面板-->管理工具-->计算机管理,在系统工具-->本地用户和组中,删除或锁定与设备运行、维护等与工作无关的帐户。

账户-不显示最后的用户名

不显示最后的用户名也就是配置登录登出后,不显示用户名称(进行交互式登入),可以减少账户被爆破的风险。

操作步骤:打开控制面板-->管理工具-->本地安全策略,在本地策略-->安全选项中,双击交互式登录:不显示最后的用户名,选择已启用并单击确定。

2、口令

口令-密码复杂度

密码复杂度要求必须满足以下策略:

①最短密码长度要求8个字符。

②启用本机组策略中密码必须符合复杂性要求的策略。即密码至少包含以下四种类别的字符中的三种:

​ 1、英语大写字母A,B,C,...Z

​ 2、英语小写字母a, b, c,... z

​ 3、西方阿拉伯数字0,1,2,...9

​ 4、非字母数字字符,如标点符号,@,#,$,%,&,*等

操作步骤:打开控制面板-->管理工具-->本地安全策略,在帐户策略-->密码策略中,确认密码必须符合复杂性要求策略已启用。

口令-密码最长留存期

①对于采用静态口令认证技术的设备,帐户口令的留存期不应长于90天。1、密码最短使用期限为1天,密码最长使用期限为90天。

②强制密码历史修改成记住五个密码。(强制密码历史就是不能与上次设置的密码相同)

操作步骤:打开控制面板-->管理工具-->本地安全策略,在帐户策略-->密码策略中,配置密码最长使用期限不大于90天。

口令-账户锁定策略

对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过5次后,锁定该用户使用的帐户。

①账户锁定时间:15分钟

②账户锁定阈值:5次无效登入

③重置账户锁定计数器:15分钟(这个选项一般设置的与账户锁定时间一致)

操作步骤:打开控制面板-->管理工具-->本地安全策略,在帐户策略-->帐户锁定策略中,配置帐户锁定阈值不大于5次。

3、授权

在本地安全设置中,只允许授权帐号从网络访问(包括网络共享等,但不包括终端服务)此计算机。

操作步骤:打开控制面板-->管理工具-->本地安全策略,在本地策略-->用户权限分配中,配置从网络访问此计算机权限给指定授权用户。(比如在用户权限分配-->从网络访问此计算机中,将Everyone删除;必须是特定的组才可以从网络访问此计算机)---黑白名单

说明:必须具体到某个人能否访问(设置白名单)

4、日志配置

日志配置-审核

打开控制面板-->管理工具-->本地安全策略,在本地策略-->审核策略中,其中审核九条目必须全部审核。意思就是说执行这个操作无论成功还是失败全都记录下来。

审核登录

设备应配置日志功能,对用户登录进行记录。记录内容包括用户登录使用的帐户、登录是否成功、登录时间、以及远程登录时、及用户使用的IP地址。

操作步骤:打开控制面板-->管理工具-->本地安全策略,在本地策略-->审核策略中,设置审核登录事件。

审核策略

启用本地安全策略中对Windows系统的审核策略更改,成功和失败操作都需要审核。

审核对象访问

启用本地安全策略中对Windows系统的审核对象访问,成功和失败操作都需要审核。

审核过程追踪

启用本地安全策略中对Windows系统的审核进程追踪,仅失败操作需要审核。

日志配置-日志文件大小

设置应用日志文件大小至少为200M(不少于200M),可根据磁盘空间配置日志文件大小,记录的日志越多越好。并设置当达到最大的日志尺寸时,按需要轮询记录日志或者日志满时其存档,不覆盖事件(A)。

操作步骤:打开控制面板-->管理工具-->事件查看器,配置应用日志、系统日志、安全日志属性中的日志挑大小,以及设置当达到最大的日志尺寸时的相应策略。

5、IP协议安全

SYN Flood (SYN洪泛)

SYN Flood (SYN洪泛)SYN洪泛是一种阻断服务攻击。起因于攻击者传送—系列的SYN请求到目标系统,占据服务器资源。

攻击者发送许多数据包,但不向服务器发送“ACK”。因此,连接断开,吞下服务器资源。由于阻止服务攻击,合法用户尝试连接到服务器但被拒绝(导致正常用户不能正常进入连接)。

SYN洪泛需要掌握TCP三次握手

IP协议安全-启用SYN攻击保护

启用SYN攻击保护。

①指定触发SYN洪水攻击保护所必须超过的TCP连接请求数阈值为5。(不能同一个地址连续发包5次)

②指定处于SYN_RCVD状态(发送状态)的TCP连接数的阈值为500。

③指定处于至少已发送一次重传的SYN_RCVD状态(重传状态)中的TCP连接数的阈值为400。

Windows Server 2008:(注册表当中的操作)
HKEY_LOCAL_MACHINE\SYSTEMCurrentControlSet\Services\SynAttackProtect	推荐值:2
HKEY_LOCAL_MACHINE\SYSTEMICurrentControlSet\ServiceslTcpMaxPortsExhausted	推荐值:5
HKEY_LOCAL_MACHINE\SYSTEMCurrentControlSetlServiceslTcpMaxHalfOpen	推荐值:500
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSetlServicesTcpMaxHalfOpenRetried	推荐值:400

洪泛攻击的命令

hping3 -S -a 1.1.1.1 -s 445 --flood 192.168.126.128 -p 445
解读:通过445端口伪造出1.1.1.1(虚拟IP)的IP,去给192.168.126.128(真实IP)的445这个端口发TCP的数据包,从而达到需要攻击的目标资源占满。

洪泛攻击是争对端口的,只要将防火墙开启(445端口默认关闭,445端口是一个共享文件夹的端口),洪泛攻击效果就不明显了。

6、服务安全

服务安全-禁用TCP/IP上的NetBlOS

禁用TCP/IP上的NetBlOS协议(NetBIOS网络上的基础输入输出设备),可以关闭监听的UDP 137( netbios-ns)、UDP 138( netbios-dgm)以及TCP139( netbios-ssn)端口。还有个135端口。以上端口都为高危端口,都可能导致网络上主机发现/主机名发现/地址发现。

操作步骤:

①在计算机管理-->服务和应用程序-->服务中禁用TCP/IP NetBIOS Helper 服务。

②在网络连接属性中,双击 Internet协议版本4(TCP/I Pv4),单击高级,找到WINS下面的NetBIOS设置,将其禁用。

服务安全-禁用不必要的服务

服务名称 建议
DHCP Client 如果不使用动态IP地址,就禁用该服务
Background lntelligent Transfer Service 如果不启用自动更新,就禁用该服务
Computer Browser 禁用
Diagnostic Policy Service 手动
Helper 禁用。该服务用于转换IPv6 to lPv4
Print Spooler 如果不需要打印,就禁用该服务
Remote Registry 禁用。Remote Registry主要用于远程管理注册表
Server 如果不使用文件共享,就禁用该服务。禁用本服务将关闭默认共享,如ipc\(、admin\)和c$等
TCP/IP NetBIOS Helper 禁用
windows Remote Management (WS-Management) 禁用
Windows Font Cache Service 禁用
WinHTTP web Proxy Auto-Discovery Service 禁用
Windows Error Reporting service 禁用

7、安全选项

安全选项-启用安全选项

打开控制面板>管理工具>本地安全策略,在本地策略>安全选项中,进行如下设置:

安全选项 配置内存
交互式登录:试图登录的用户的消息标题 注意
交互或登录:试图登录的用户的消息文本 内部系统只能因业务需要而使用。经由管理层授权。管理层将随时监测此系统的使用。
Microsoft网络服务器:对通信进行数字签名(如果客户端允许) 启用
Microsoft网络服务器:对通信进行数字签名(始终) 启用
Microsoft网络客户端:对通信进行数字签名(如果服务器允许 启用
Mlicrosoft网络客户端:对通信进行数字签名(始终) 启用
网络安全:基于NTLM SSP的(包括安全RPC)服务器的最小会话安全 要求NTLMv2会话安全要求128位加密
网络安全:基于NTLM SSP的(包括安全RPC)客户端的最小会话安全 要求NTLMv2会话安全要求128位加密
网络安全:LAN管理器身份着证级别 仅发送NTLMv2响应\拒绝LM & NTLM
网络访问:不允许SAM帐户的匿名枚举 启用(蹴认已启用)
网络访问:不免许SAM帐户和共享的匿名枚举 启用

安全选项-禁用未登录前关机

服务器默认是禁止在未登录系统前关机的。如果启用此设置,服务器安全性将会大大降低,给远程连接的黑客造成可乘之机,强烈建议禁用未登录前关机功能。

操作步骤:打开控制面板-->管理工具-->本地安全策略,在本地策略-->安全选项中,禁用关机:允许系统在未登录前关机策略。

8、其他安全配置

防病毒管理

Windows系统需要安装防病毒软件。

操作步骤:安装企业级防病毒软件,并开启病毒库更新及实时防御功能。

限制远程登录空闲断开时间

对于远程登录的帐户,设置不活动超过时间15分钟自动断开连接。

操作步骤:打开控制面板-->管理工具-->本地安全策略,在本地策略-->安全选项中,设置Microsoft网络服务器:暂停会话前所需的空闲时间数量属性为15分钟。

操作系统补丁

及时更新操作系统补丁

9、Linux中的基础命令

1、Linux系统命令行提示符介绍

[root@Lin ~]# 
①root——用户名 (默认是登录自己创建的普通用户)
②Lin——主机名/计算机名   初始为:localhost
③~——所在位置(绝对路径为/home/lin)     ~:家目录      /:根目录(根目录是所有文件开始的地方)
④#——权限   #:root权限	 $:普通权限

=======================================================

例子(见表格详解):
[root@kangyz ~]#		// 这是超级用户root对应的命令行
[kang@kangyz ~]$		// 这是普通用户kang对应的命令行
编号 提示符信息 组成说明
# 是使用超级用户root登录后的命令行结尾提示符。
$ 是使用普通用户登录后的命令行结尾提示符。
root 代表当前登录的用户,可用whoami进行查询。root用户具有管理系统的所有权限。
kang 代表当前登录的用户,可用whoami进行查询。权限较小,只能进行基本的系统信息查看等操作,无法更改系统配置和管理服务。
@ 主要用于分割登录用户与系统主机名称信息。
kangyz 主机名称,可使用hostname命令查询。
~ 所在的位置是窗口当前用户所在的路径信息,可用pwd查询。一般显示“~”表示在当前用户家目录中。

2、用户切换

[root@localhost ~]# pwd
/root
[root@localhost ~]# su xzm
[xzm@localhost root]$ pwd
/root
[xzm@localhost root]$ su
Password: 
[root@localhost ~]# 
//xzm中的root目录 =(相当于) root中的~目录(家目录),对于root来说自己的家目录是/root。所以说切换目录时是不会改变当前路径。
①
[xzm@localhost root]$ cd /home/
[xzm@localhost home]$ ls
xzm
[xzm@localhost root]$ cd /home/xzm/
[xzm@localhost ~]$ ls
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
//这里的~表示xzm自己的家目录。
②
[root@localhost /]# ls /home/
xzm
[root@localhost /]# cd /root/
[root@localhost ~]# ls
anaconda-ks.cfg  Documents  initial-setup-ks.cfg  Pictures  Templates
Desktop          Downloads  Music                 Public    Videos
//默认情况下,所有用户的家目录都在一个叫/home的文件下的用户名里【cd xzm文件夹里】;但是root用户直接在/root下(与/home是平等级的),该用户所在等级比其他用户高一级。
[root@localhost ~]# less /etc/passwd        //拉到最下面可以查看本地创建的用户信息

3、修改网卡配置(静态网卡配置)

路径:
[root@localhost /]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-ens33



网卡配置成静态(模板):
TYPE="Ethernet"       //网络模式-以太网(引号可以删掉(要么都加,要么都不加),因为加不加引号都是以字符串形式识别)--不能删除
PROXY_METHOD="none"      //代理发送(给外网)--可以删除
BROWSER_ONLY="no"      //仅浏览器模式--可以删除
BOOTPROTO="dhcp"      //网卡模式--怎么获取IP地址--修改成静态(static)
DEFROUTE="yes"      //默认路由(如果是静态的话会自动配置IP,使用以下两个可以删除)
IPV4_FAILURE_FATAL="no"      //--可以删除//直接略过
IPV6INIT="yes"      //--可以删除
IPV6_AUTOCONF="yes"      //直接略过
IPV6_DEFROUTE="yes"      //直接略过
IPV6_FAILURE_FATAL="no"      //直接略过      //直接略过
IPV6_ADDR_GEN_MODE="stable-privacy"      //直接略过
NAME="ens33"      //网卡名称(名称可以改,但设备名称也必须同步修改,否则系统识别不了)
UUID="e378bcc1-234a-4ac9-9b95-32a9330eb8b9"      //网卡id--可以删除
DEVICE="ens33"      //设备名称(与网卡名称相同)--不能删除
ONBOOT="yes"      //是否开机自启动--不能删除

最终配置结果:
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.126.131
NETMASK=255.255.255.0
GATEWAY=192.168.126.2
DNS1=218.85.157.99
DNS2=114.114.114.114
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
在退出配置情况下,需要进行系统网卡重新启动,需要等重启之后网卡信息才会生效;假如未进行网卡重启也能ping通是因为原先的DHCP在起作用。

//重启网络命令:
[root@localhost network-scripts]# systemctl restart network
该命令生效时会有一段时间。(没有报错就说明命令正确)
//重启网卡命令:
[root@localhost network-scripts]# ifdown ifcfg-ens33 		//关闭网卡
Device 'ens33' successfully disconnected.
[root@localhost network-scripts]# ifup ifcfg-ens33 		//开启网卡
Connection successfully activated (D-Bus active path:/org/freedesktop/NetworkManager/ActiveConnection/8)
//以上重启网络命令和重启网卡命令只要完成一个就可以实现修改网卡配置文件生效。

3、远程登入

较大的镜像文件一般都可以直接远程登入,不需要进行其他配置。

CentOS7的SSH服务默认开启:
[root@localhost network-scripts]# systemctl start sshd //开始ssh服务
[root@localhost network-scripts]# systemctl status sshd //查看服务状态
[root@localhost network-scripts]# systemctl stop sshd //关闭服务
[root@localhost network-scripts]# systemctl restart sshd //重启ssh服务

主机登入到另一台主机,通过第三方工具(CRT/putty)实现。

[root@localhost ~]# cat /etc/ssh/sshd_config     //远程登入ssh服务的配置文件

远程模块不生效的情况下(有可能镜像文件太小,该模块未配置上):
修改模块一:
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
修改模块二:
PasswordAuthentication yes
//假如说远程登入CentOS不超过的话则进入远程登入ssh服务的配置文件,将1-4条的井号(注释符)删掉;将模块二修改成固定格式(如第7行所示)

4、开机自启动root用户

[root@localhost /]# vim /etc/gdm/custom.conf 		//进入开机自启动的配置文件
==========
修改后的配置信息如下:
# GDM configuration storage

[daemon]
AutomaticLoginEnable=True		//开启开机自启动/登入
AutomaticLogin=root		//自登入root用户
[security]

[xdmcp]

[chooser]

[debug]
# Uncomment the line below to turn on debugging
#Enable=true
=========
配置完成之后需要reboot重启系统才能生效。 

//在配置文件中如果有中括号括起来的话,则括起来的部分不生效,只是说明让系统检测到是什么模块,根本不起作用。

5、修改主机名

方法一:临时修改

hostname xxx	  	//临时修改主机名,重新启动操作系统则失效(需要重新启动Open Terminal界面)

方法二:永久修改主机名

[root@localhost /]# vim /etc/hostname 		//永久修改主机名(需要重新启动操作系统才生效)

6、快捷键

作用在系统上

ctrl + c		//强制终止进程
ctrl + d		//退出/退出用户(一般用户退出用户)
ctrl+shift+c/v 		//inux复制粘贴

作用在vi/vim上

vim有三种模式
①命令模式--使用快捷键--vim刚进入就是命令模式
nyy:复制n行,直接yy,复制当前行
p:粘贴
ndd:删除n行,直接dd,删除当前行
u:回到上一步(撤回)

②插入模式--编辑模式
i:从当前光标插入
o:新建一行插入
a:从下一个字符
/:检索
n:检索下一个
q:退出
复制粘贴时最好在插入模式,可以确保内容不会缺失。

③底行模式(提示行)---命令模式输入英文“:”进入底行模式
wq:保存且退出 ,等同于x
q:不保存且退出(会询问)
q!:不保存强制退出
检索功能:命令模式按“/”,输入检索字符串,回车,按“n”锁定下一个

7、文件的增删改查

【增】(参数在前在后不影响)
创建文件(①touch、②echo、③cat)(新创建的文件基本上都是644权限)
touch+文件名
	-c 不创建
	-f 等于没加参数
echo:回显--【echo 5.6161】//echo 写入文件不存在时会默认创建该文件并写入
>:重定向(覆盖)
>>:追加(不会覆盖,默认换行)
【echo+写入内容+>/>>+文件名】 

创建目录(①mkdir)(新创建的目录基本上都是655权限)
mkdir+目录名称【mkdir 1/2】
	-p  递归创建【mkdir -p 3/4(在3前面没有其他目录时会创建一个目录3,里面还有一个目录4)】
	-v 显示创建过程【mkdir -pv 5/6】



【删】(参数在前在后不影响)
删除文件/目录(①rm②rmdir)
rm+文件名		//(不加参数直接删除会有提示)
	-f:强制删除,不提示【rm 2.txt -f(文件)】
	-r:删目录(有提示)【rm -r 3(目录)】
【rm -rf 目录/文件】	//(如果在要删除的目录/文件下,则无法删除)
!!!【rm -rf /*】--------死亡命令(删除根目录下的所有文件-系统直接没------禁用禁用禁用!!!)
rmdir+空目录(只能删除空目录)


【改】(参数在前在后不影响)
mv+原路径+目标路径【mv 4.txt 1/2(将4.txt移动到路径1中的2目录下)】--移动
mv+源文件名+重命名后的文件名(正常重命名)【mv 1.txt 2.txt】
mv+原路径/文件+目标路径/重命名的名字(假如文件在其他路径下,则默认会移动到当前路径下再重命名)--不写重命名的名字的话会保留原名字,一写名字的话则会重命名。【[root@localhost Desktop]# mv 1/2/4.txt 2.txt】
cp+原路径+目标路径(与mv差不多)		(带参数-p可以将该文件/目录的权限一起拷贝过去)
cp时必须得是一个确定的目录/文件


【查】
查看文件/目录(①man、②ls、③ll、④cat、⑤help、⑥type、⑦du、⑧less、⑨more)
man :查看命令
ls:查看当前目录内容
ll=ls -l:显示当前目录具体信息
cat: 查看文件内容
help:查看内部/内置命令
type:判断内外部命令字(如果会先结果中有shell则是内部命令;如果回显一个目录的话则是外部安装的)
du:查看目录大小
more:分页查看(会回显到会话)
less :分页查看

Linux dd 命令 | 菜鸟教程 (runoob.com)

8、打包、压缩

打包
①tar
查看目录大小(ls无法查看目录大小;ll可以)[root@Lin ~]# du –sh .
对目录进行打包[root@Lin ~]# tar –cf [打包后的路径(文件名)/需要进行打包的文件名] [打包前的目录]
对打包文件进行压缩(gzip和bzip2皆可):[root@Lin ~]# gzip /TAR/1.tar
同时进行打包和压缩:[root@x ~]# tar –zcf TAR/2.tar.gz test
解压缩:[root@x ~]# tar –zxf TAR/2.tar.gz –C /
tar选项参数含义:
	-c	打包
	-x	解包
	-C	+文件存放路径
	-z	使用gzip
	-j	使用bzip2


压缩
①gzip
压缩:[root@x ~]# gzip [文件名]
解压缩:[root@x ~]# gunzip [压缩文件名]
②bzip2
相对于gzip,bzip2是一个压缩效率更高的命令,压缩后文件占据的空间更小,所以需要的压缩时间要比gzip更久,bzip2的使用方式与gzip基本相同。(可以通过观察后缀来判断该文件是以什么方式进行压缩的,再以相反方式解压缩)
压缩:[root@Lin ~]# bzip2 [文件名]
解压缩:[root@Lin ~]# bunzip2 [压缩文件名]

9、Linux目录树

/ --- 操作系统的起始路径根路径
/bin --- 普通用户和管理员都可以执行的命令字
/sbin --- 只有管理员才能执行的命令关机重启
/boot --- 引导主引导目录独立的分区启动菜单内核
/dev --- device设备设备文件存放目录
/etc --- 配置文件存放目录
/home --- 普通用户的家目录
/root --- 管理员的家目录
/media --- 光驱的挂载目录
/mnt ---- 临时设备挂载目录
/proc --- 里面的数据都在内存中,进程的所在目录
/tmp --- 临时文件存放目录
/usr --- 软件的安装目录
/var --- 常变文件存放目录日志文件邮件文件

10、查看Linux基础信息

free		//查看内存空间
free -h		//带单位的查看内存空间(比较人类化查看)
fdisk -l		//查看磁盘

//查看内存进程文件
cat /proc/meminfo 		
cat /proc /meminfoMemTota1 :总内存
MemFree :空闲内存
Buffers :给文件的缓冲大小
cached :高速缓冲存储器(缓存),使用的大小,容量小,速度比主存高很多,接近CPU速度
Vma17ocTota1:虚拟内存大小
Vma7locused:已经被使用的虚拟内存大小

//查看CPU信息
cat /proc/cpuinfo
processor :系统中逻辑处理器核心的编号,单核处理器,就可以认为CPU编号
vendor_id: CPU制造商
cpu family : CPU产品系类代号
mode7:属于该系列中的乃一代
mode7 name : CPU名字编号,标识主频
cache size : CPU缓存大小

11、链接文件

链接:是一个文件共享的方式 。
①硬链接:ln 源文件(绝对路径) 链接文件 (相当于对文件再开启一个打开方式。特点:如果将硬链接所指向的文件删除的话,那么硬链接也消失)
②软链接:ln -s 源文件(绝对路径) 链接文件(相当于指针的概念)


创建软连接:
[root@localhost ~]# echo 123456 > 1.txt		//在root用户的家目录上写一个1.txt文件
[root@localhost ~]# cat 1.txt 
123456
[root@localhost ~]# cd Desktop/
[root@localhost Desktop]# ln -s /root/1.txt 11.txt		//在桌面上创建一个软连接新的目录叫11.txt
[root@localhost Desktop]# ll
total 0
lrwxrwxrwx. 1 root root 11 Oct 27 14:30 11.txt -> /root/1.txt//发现11.txt已经变成浅蓝色(说明为一个链接文件)
[root@localhost Desktop]# cat 11.txt 
123456

Linux当中读取文件是依据元信息;文件名是给用户看的。

12、其他命令

reboot:重启
tab:补齐命令或者目录或者文件名
切换用户:su+用户名(单单su,默认切换root)
cd /home:进入 ‘/home’ 目录
cd ..:返回上一级目录
ls -a:显示隐藏文件
pwd:显示工作路径
vi/vim file:打开并浏览文件
grep:用于查找文件里符合条件的字符串。
q:退出
sudo:赋予一次root命令的权限。(暂时将该命令用root身份运行)

systemctl stop firewalld.service 	//关闭防火墙
systemctl disable firewalld.service 	//关闭自启动
systemctl restart network		//重启网络服务
systemctl restart [servers]		//重启服务

10、Linux用户和组

Windows当中guest用户为内置用户,用户组当中是否复杂。且不同的组都有不同的(独有的)权限。Linux当中用户十分纯粹。

一、基本概念

1、基本介绍

Linux作为一种多用户的操作系统(服务器系统),允许多个用户同时登陆到系统上,并响应每个用户的请求。任何需要使用操作系统的用户,都需要一个系统账号,账号分为:管理员账号与普通用户账号。在Linux中,操作系统根据UID来判断用!根据UID来判断用户!而不是用户名!只要id为0就是管理员,哪怕有多个id为0的账号;系统在新建账号时,会根据账号类型,自动分配递增账号的UID与GID(用户身份编号,组编号),也可自行分配。通常情况下,应当保证UID与GID唯一且不重复。

2、Linux的单用户任务和多用户任务

在Linux下,当你登录后,你也可以同时开启很多的服务任务和进程,而各自服务都会跑的很好却对其他任务没有任何影响,这种登录一个用户登录系统执行多个服务任务和进程的情况,就称为单用户多任务。

多用户任务——有时可能是很多用户同时用同一个系统,如公司几十个运维人员,每台机器都可以和被若干个运维人员登录部署或解决相关故障问题,但并不是所有的运维人员都要做同一件事,所以就有了多任务、多用户的情况。

注:多用户、多任务并不是大家同时挤到一起,在一台机器的键盘和显示器前来操作机器,多用户可能是通过SSH客户端工具等远程工具等远程登录服务器来进行,比如对服务器的运程控制,只要具有相关用户的权限,任何人都是可以上去操作访问服务器。

3、Linux系统用户分类

用户在系统中是分角色的,由于角色的不同,权限和所完成的任务也不同。在Linux系统中每个用户的 ID 细分为 2 种,分别是用户ID(User ID,简称 UID)和组 ID(Group ID,简称 GID),这与文件有拥有者和拥有群组两种属性相对应。值得注意的是用户的角色是通过UID和GID识别的。特别是UID,在运维工作中,一个UID是唯一标识一个系统用户的账号。

在Windows当中用户信息存放在SAM文件/目录当中;在Linux当中用户信息都存放在/etc/passwd。
//[root@x~]# cat /etc/passwd
①、root用户

root用户是UID和GID都等于0的用户,是Linux系统中的“上帝”,拥有最大的权限。如果深入了解Linux系统,会发现root用户真的拥有很多特权,比如:无视Linux对权限的设置而强行读、写、执行文件,切换其他用户登录不需要密码,可以强行切换到已经所用的用户,只有root可以直接为普通用户修改密码等等。

②、系统用户

系统用户通常用于运行服务,但是此用户无家目录,也不能用于登录系统。例如,在yum安装apache、nginx等服务后,就会自动创建apache和nginx的用户和同名用户组。在Cent OS 6系统中,系统用户的UID范围是1-499,在Cent OS 7系统中,系统用户的ID是1-999。伪用户/系统用户不是一个真是的用户,只是一个服务。

③、普通用户

普通用户只能由root用户创建,该用户拥有家目录,并且可以登录,该用户的权限由root分配。普通用户拥有指定的shell环境。在Cent OS 7系统中,普通用户的ID是1000-60000。

4、用户和用户组介绍

用户——每一个用户都有一个唯一的用户名和用户口令,在登录系统后,只有正确输入了用户名和密码,才能登录系统和相应的目录。

用户组——简单的说,linux系统中的用户组(group)就是具有相同特性的用户(user)集合;有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件或目录,如果不用用户组,这种需求在授权时就很难实现。如果使用用户组就方便多了,只需要把授权的用户都加入到同一个用户组里,然后通过修改该文件或目录的对应的用户组的权限,让用户组具有符合需求的操作权限,这样用户组下的所有用户对该文件或目录就会具有相同的权限,这就是用户组的用途。将用户分组是linux系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,在很大程度上简化了运维管理工作。

用户和用户组的对应关系有:一对一、一对多、多对一和多对多。

一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。比如,root

一对多:即一个用户可以存在多个组中,这个用户就具有这些组。

多对一:即多个用户可以存在一个组中,这些用户这些组的共同权限。

多对多:即多用户可以存在于多个组中。并且几个用户可以归属相同的组;其实多对多的关系是前面三条的扩展。

二、用户及用户组配置文件介绍

在Linux中,万物皆文件,所以用户与组也以配置文件的形式保存在系统中,以下为用户和组的主要配置文件详解:

  • /etc/passwd:用户及其属性信息(名称、 UID、主组ID等)
  • /etc/group:组及其属性信息
  • /etc/shadow:用户密码及其相关属性
  • /etc/gshadow:组密码及其相关属性(其实用户组也没有密码)

1、用户的配置文件/etc/passwd

/etc/passwd文件中每行定义(都是)一个用户账号,有多少行就表示多少个账号,在一行中可以清晰的看出,各内容之间又通过冒号“:”划分了7个字段/部分(冒号分隔),这7个字段分别定义了账号的不同属性,/etc/passwd文件实际内容如下:

[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash		【root用户,在 /etc/passwd文件的第一行】
xzm:x:1000:1000:XZM:/home/xzm:/bin/bash		【普通用户】
①字段1【root】:帐号名,这是用户登陆时使用的账户名称,在系统中是唯一的,不能重名
②字段2【x】:密码占位符x(已重置);早期的unix系统中,该字段是存放账户和密码的,由于安全原因,后来把这个密码字段内容移		到/etc/shadow中了。这里可以看到一个字母x,表示该用户的密码是/etc/shadow文件中保护的。
③字段3【UID】:UID;范围是0-65535
④字段4【GID】:GID;范围是0-65535;当添加用户时,默认情况下会同时建立一个与用户同名且UID和GID相同的组。
⑤字段5【root】:用户说明(备注):这个字段是对这个账户的说明
⑥字段6【/root】:宿主目录(家目录);用户登陆后首先进入的目录(用户登录系统后的缺省目录),一般与"/home/用户名"这样的目录
⑦字段7【/bin/bash】:登录Shell;当前用户登陆后所使用的shell执行环境(用户登录后使用的命令解释器),在centos/rhel系统中,默认的shell是bash;如果不希望用户登陆系统,可以通过usermod或者手动修改passwd设置,将该字段设置为/sbin/nologin即可。大多数内置系统账户都是 /sbin/nologin,这表示禁止登陆系统。这是出于安全考虑的。——awd攻防必须的操作!

【用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell】

passwd中有关UID的限制说明:0:当用户的UID为0时,表示这个账户为超级用户;如果要增加一个系统管理员账户的话,只需将该账户的UID改为0即可(不建议操作)。

看一下/etc/passwd的权限:
[root@localhost ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2301 Sep 28 19:56 /etc/passwd
因为每个用户登录时都需要取得UID和GID来判断权限问题,所以/etc/passwd的权限为644,这样一来就会带来安全问题,即所有的用户都可以都/etc/passwd文件,即使文件内的密码是加密的,但还是存在一定的被攻击破解的安全隐患。因此,就有了/etc/shadow文件。

2、用户的影子口令文件/etc/shadow

/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。在文件中每行定义(都是)一个用户密码,有多少行就表示多少个账号所对应的密码,在一行中可以清晰的看出,各内容之间又通过冒号“:”划分了9个字段/部分(冒号分隔),这9个字段分别定义了密码的不同属性,/etc/shadow文件实际内容如下:

[root@localhost ~]# cat /etc/shadow
root:$6$gzV7F7XygZZLiLMs$q3xIpzL6.tLwg.PkqiIynm2gtkED2pu7oRLlUvfk516Pt/nVgnmISbMW0HOeHoQbjx1bcpD/xpKaL1xwT6dnx.::0:99999:7:::
①字段1:帐号名称/用户名:同/etc/passwd文件的用户名有相同的含义。
②字段2:加密密码(通常使用sha512/md5加密):真正加密的密码。所有伪用户的密码都是"!!"或"*",代表没有密码是不能登录的。$6$:sha加密,$1$:md5加密。
③字段3:最近更改密码的时间/最后一次修改时间:Linux计算日期的时间是以1970年1月1日作为1不断累加得到的时间。
④字段4:禁止修改密码的天数/最小修改时间间隔:该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是0,则密码可以随时修改;如果是10,则代表密码修改后10天之内不能再次修改密码。
⑤字段5:用户必须更改口令的天数/密码有效期:密码的最长有效天数,该字段的默认值为99999天,也就是273年,可认为是永久生效。
⑥字段6:警告更改密码的期限/密码需要变更前的警告天数:与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 “再过 n 天你的密码就要过期了,请尽快重新设置你的密码!”。该字段的默认值是 7。
⑦字段7:不活动时间/密码过期后的宽限天数:在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。比如,此字段规定的宽限天数是 10,则代表密码过期10天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。
⑧字段8:账号失效时间:默认值为空;从1970/1/1日起,到用户被禁用的天数(账户密码失效时启用)
⑨字段9:保留字段(未使用):这个字段目前没有使用,等待新功能的加入。

【用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段】

3、用户组配置文件/etc/group

/etc/group文件是用户组的配置文件,内容包括用户与用户组,并且能显示用户归属哪个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用户组的用户之间具有相似的特性。如果某个用户下有对系统管理有最重要的内容,最好让用户拥有独立的用户组,或者是把用户下的文件的权限设置为完全私有。另外root用户组一般不要轻易把普通用户并入。

[root@localhost ~]# cat /etc/group
root:x:0:
xzm:x:1000:xzm
①字段1:组账户名称(组名)
②字段2:密码占位符x(组密码位):通常不需要设置该密码,由于安全原因,该密码被记在/etc/gshadow中,因此显示为'x'。这类似/etc/shadow。
③字段3:组账户GID号,用户组ID
④字段4:本组的成员用户列表(用户):加入这个组的所有用户账号

【组名:机密密码:GID:用户】

4、用户组的影子文件/etc/gshadow

组用户信息存储在 /etc/group 文件中,而将组用户的密码信息存储在 /etc/gshadow 文件中。

[root@localhost ~]# cat /etc/gshadow
root:::

【组名:加密密码:组管理员:组附加用户列表】

三、对用户/组进行增删改

以下命令对Linux的用户和用户组进行管理。

1、useradd添加用户

useradd命令一般用于添加用户,该命令常见操作如下:
命令:useradd [选项] [用户名]
选项:
-M 表示不创建家目录
-s [shell]:表示手工指定用户的shell环境,默认是/bin/bash
-u [UID]:表示手工指定用户的UID
-d [家目录]:手工指定用户的家目录
-c [用户说明]:手工指定的用户说明(用户备注信息)
-g [组名]:表示手工指定用户的初始组/指定用户的gid(需要指定存在的gid)
-G [组名]:表示指定用户的附属组(需要指定存在的gid)
-p 指定用户的密码(只有设置为密码才能算是创建了真正可登录的用户)(必须以密文的方式指定)
示例:
[root@localhost ~]# useradd gi
gi:x:1001:1001::/home/gi:/bin/bash——(系统默认创建同名家目录/home/gi)
useradd test4 -u 2000 -M //手工指定UID为2000,并且不创建家目录
useradd test6 -d /home/xxx //手工指定家目录位置

[root@localhost ~]# useradd -u 550 -g lamp1 -G root -d /home/lamp1 -c "test user" -s /bin/bash lamp1
#在建立用户lamp1的同时,指定了UID(550)、初始组(lamp1,已存在的)、附加组(root)、家目录(/home/lamp1/)、用户说明(test user)和用户登录Shell(/bin/bash)
/etc/passwd:lamp1:x:550:502:test user:/home/lamp1:/bin/bash

[root@localhost ~]# grep "lamp1" /etc/passwd /etc/shadow /etc/group		#同时查看三个文件

2、userdel删除用户

userdel命令可以删除用户,后面直接跟用户名可以直接删除该用户。但是,我们一般在删除用户时都会添加-r参数,表示连同该用户的家目录一起删除。

命令:userdel [参数] [用户名]
参数:-r	//删除用户的同时删除用户家目录(仅root用户可用)
注意:在删除用户的同时如果不删除用户的家目录,那么家目录就会变成没有属主和属组的目录,也就是垃圾文件。

3、usermod修改用户

这里一定要分清useradd命令和usermod命令的区别(两者命令相似),前者用于添加用户,当然,添加用户时可以对用户信息进行定制;后者针对与已存在的用户,使用该命令可以修改它们的信息。相比useradd命令,usermod命令还多出了几个选项,即 -L 和 -U,作用分别与 passwd 命令的 -l 和-u 相同。

usermod命令常用于修改用户的信息,常用参数如下:
命令:usermod [选项] [用户名]
选项:
-u [UID]:修改用户的UID号
-c [用户说明]:修改用户的说明信息
-d [家目录]:表示重新指定用户的家目录
-g [组名]:表示重新指定用户的(主)组
-G [组名]:表示给用户添加附属组
-L(Lock):表示锁定用户(临时锁定用户),被锁定用户的密码前出现“!”表示无法登录(与passwd相似)
-U(Unlock):表示解除对用户的锁定

#如果在锁定用户后使用passwd命令修改该锁定用户的口令,则该用户会被自动解锁。
#usermod命令给用户增加附属组如下所示:注意,在下述操作中,必须首先存在一个GID为1001的组。
[ root@localhost ~]#id pzz
uid=1000(pzz) gid=1000(pzz) groups=1000(pzz)
[ root@localhost ~]#usermod pzz -G 1001
[ root@localhost ~]# id pzz
uid=1000(pzz) gid=1000(pzz) groups=1000(pzz) , 1001 (linux)
[ root@localhost~]#

4、groupadd添加用户组

命令:[root@localhost ~]# groupadd [选项] [组名]
选项:
-g [GID]:指定组 ID
-r:创建系统群组

示例:创建新群组
[root@localhost ~]# groupadd group1
#添加group1组
[root@localhost ~]# grep "group1" /etc/group
/etc/group:group1:x:502:
/etc/gshadow:group1:!::

5、groupmod修改用户组

命令:[root@localhost ~]# groupmod [选项] [组名]
选项:
-g GID:修改组 ID
-n 新组名:修改组名

例子:
[root@localhost ~]# groupmod -n testgrp group1
#把组名group1修改为testgrp
[root@localhost ~]# grep "testgrp" /etc/group
testgrp:x:502:
#注意GID还是502,但是组名已经改变

6、groupdel刪除用户组

命令:[root@localhost ~]# groupdel [组名]
例子:
[root@localhost ~]#grep "group1" /etc/group /etc/gshadow
/etc/group:group1:x:505:
/etc/gshadow:group1:!::
[root@localhost ~]#groupdel group1
[root@localhost ~]#grep "group1" /etc/group /etc/gshadow
[root@localhost ~]#
//使用 groupdel 命令删除群组,其实就是删除 /etc/gourp 文件和 /etc/gshadow 文件中有关目标群组的数据信息。
//不能使用 groupdel 命令随意删除群组。此命令仅适用于删除那些 "不是任何用户初始组" 的群组。

四、其他命令

1、passwd

命令:passwd [选项] [用户名]
选项:(仅root用户可用)
	-S:查询用户密码的密码状态。仅root用户可用
	-l:暂时锁定用户(被锁定的用户不能使用密码登入--密码前加“!!”),但对root用户无效,照样可以登入。仅root用户可用
	-u:解锁用户。仅root用户可用
注意:
#普通用户只能使用passwd命令修改自己的密码,而不能修改其他用户的密码。普通用户修改自己的密码需要先输入自己的旧密码,只有旧密码输入正确才能输入新密码。不仅如此还不能输入弱密码(root用户直接无视)。
#在查询用户密码状态时,如果没有设置密码则查询时会有整个( Password locked . ),代表密码属于锁定状态。在Linux当中如果用户没有密码则就属于锁定状态。
#ctrl + d		//退出用户
#passwd----不带参数默认修改root账户的密码,而且不需要输入原密码。
#passwd命令主要由于修改密码。

2、gpasswd

为了避免系统管理员(root)太忙碌,无法及时管理群组,我们可以使用 gpasswd 命令给群组设置一个群组管理员,代替 root 完成将用户加入或移出群组的操作。

命令:gpasswd [参数] [组名]
参数:
-a:添加用户到组
-d:从组删除用户
-A:指定管理员
-M:指定组成员和-A的用途差不多
-r:删除密码
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组

3、chage

chage命令专门针对/etc/shadow文件的命令/操作。

除了 passwd -S 命令可以查看用户的密码信息外,还可以利用 chage 命令,它可以显示更加详细的用户密码信息,并且和passwd命令一样,提供了修改用户密码信息的功能。

命令:chage [选项] [用户名]
选项:
-l:列出用户的详细密码状态
-d 日期:修改/etc/shadow文件中指定用户密码信息(shadow[3]字段),也就是最后一次修改密码的日期,格式为YYYY-MM-DD;
-m 天数:修改密码最短保留的天数,也就是/etc/shadow (shadow[4]字段)
-M 天数:修改密码的有效期,也就是/etc/shadow (shadow[5]字段)
-W 天数:修改密码到期前的警告天数,也就是/etc/shadow (shadow[6]字段)
-I 天数:修改密码过期后的宽限天数,也就是/etc/shadow (shadow[7]字段)
-E 日期:修改账号失效日期,格式为YYYY-MM-DD,也就是/etc/shadow (shadow[8]字段)

//chage [用户名] -d 1000 -M 89 -W 9 -m 2 //修改密码最后一次更改日期为1000,有效期为89天,密码最小使用天数为2天,过期前9天进行提醒
//chage命令除了修改密码信息的功能外,还可以强制用户在第一次登录后,必须先修改密码,并利用新密码重新登陆系统,此用户才能正常使用。【命令:[root@localhost ~]#chage -d 0 lamp //用户登陆后就必须修改密码(root强制用户修改密码)(lamp为新用户)】

4、初始组与附属组(用户组)

用户和组存在多对多的关系,且用户必须拥有>=1的组。【用户和组存在多对多的关系,但是不能存在用户不加入组的用户。】
组(作用):实现/优化权限的赋予。
//初始组(主组):一个用户可以不存在附属组,但必须有初始组
//附属组:>=0
groupadd [组名]	//创建空组
groupdel [组名]	//删除组
usermod [组名] -G GID 		//将用户添加到附属组(必须跟上完整的id,不能有遗漏)
gpasswd -a [用户] [组名] 		//把用户添加到附属组
gpasswd -d [用户] [组名] 		//把用户从附属组中删除
//当一个用户只有一个组的话,那么这个组就是这个用户的初始组。
//附属组可以删除,即使组内有用户。
//用户主组不能删除,一般删除用户会同时删除用户主组。
主组:
也叫初始组,是用户登录系统时的组,规则如下:
创建新用户时,若未明确指定该用户所属的主组,会默认创建一个与用户名相同的组,作为该用户的主组
用户创建文件时,文件的所属权限组就是当前用户的主组
使用useradd命令时用-g参数可以指定主组,则不会默认创建同名的主组
用户有且只能所属一个主组
用户的主组不能被删除
用户不能直接被移出主组,但可以更换主组
用户被删除时它的主组若没有其他所属用户,则会自动删除该主组

附加组/附属组:
登录后可切换的其他组,规则如下:
使用useradd命令时用-G参数可以指定附加组
用户可以所属零个或多个附加组
用户的附加组和主组可相同
附加组可以直接被删除而无需关心是否所属于用户
附加组可以新增和移除任意个所属用户
用户被删除时所属附属组不会受影响

5、id

Linux id命令用于显示用户的ID,以及所属群组的ID。id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。

id [参数] [用户名]
参数:(不带参数也行)
-g或--group  显示用户所属群组的ID。
-G或--groups  显示用户所属附加群组的ID。
-n或--name  显示用户,所属群组或附加群组的名称。
-r或--real  显示实际ID。
-u或--user  显示用户ID。
-help  显示帮助。
-version  显示版本信息。
示例:
[root@localhost ~]# usermod -G root lamp
#把用户lamp加入root组
[root@localhost ~]# id lamp
uid=501(lamp) gid=501(lamp) groups=501(lamp),0(root)
#大家发现root组中加入了lamp用户的附加组信息

6、su

Linux su(英文全拼:switch user)命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。使用权限:所有使用者。

su [选项] [用户名]
选项:
- 只使用‘-’代表连用户的环境变量一起切换
-c 仅执行一次命令,而不切换用户身份
//切换不同用户,会加载不同用户的shell

su 和 su - 的区别

-选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。我们知道,环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行。即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。

7、whoami与who am i

whoami 命令和 who am i 命令是不同的 2 个命令,前者用来打印当前执行操作的用户名,后者则用来打印登陆当前Linux系统的用户名。

示例:
[Cyuyan@localhost ~]$ whoami
Cyuyan
[Cyuyan@localhost ~]$ who am i
Cyuyan    pts/0    2017-10-09 15:30 (:0.0)
在此基础上,使用 su 命令切换到 root 用户下,再执行一遍上面的命令:
[Cyuyan@localhost ~] su - root
[root@localhost ~]$ whoami
root
[root@localhost ~]$ who am i
Cyuyan    pts/0    2017-10-09 15:30 (:0.0)
//执行 whoami 命令,等同于执行 id -un 命令;执行 who am i 命令,等同于执行 who -m 命令。

所谓实际用户,指的是登陆 Linux 系统时所使用的用户,因此在整个登陆会话过程中,实际用户是不会发生变化的;而有效用户,指的是当前执行操作的用户,也就是说真正决定权限高低的用户,这个是能够利用 su 或者 sudo 命令进行任意切换的。一般情况下,实际用户和有效用户是相同的,如果出现用户身份切换的情况,它们会出现差异。

11、Linux文件与目录权限

所谓权限管理,其实就是指对不同的用户,设置不同的文件访问权限,包括对文件的读、写、删除等,在 Linux 系统中,每个用户都具有不同的权限,拿非 root 用户来说,它们只能在自己的主目录下才具有写权限,而在主目录之外,只具有访问和读权限。

一、Linux 文件基本属性

Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

1、文件介绍

随便查看一个文件,命令如下(空格分隔):

[root@localhost ~]# ll
drwxr-xr-x. 2 root root    6 Sep 28 20:28 Desktop
-rw-r--r--. 1 root root 2076 Sep 28 20:05 initial-setup-ks.cfg
①第一部分:第一个字段【d】
实例中,Desktop文件的第一个字符用d表示。d在Linux中代表该文件是一个目录文件。
当第一个字段为d则是目录
当第一个字段为-则是文件
当第一个字段为l则表示为链接文档(link file)
当第一个字段为b则表示为装置文件里面的可供储存的接口设备(可随机存取装置)
当第一个字段为c则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
当第一个字段为s则表示为套接字
--------------------------------------------------------------------------------------------------------
①第一部分:第二个字段到.为止【rwxr-xr-x.】
这九个字符以三个为一组,且均为rwx的三个参数的组合。其中,r代表可读(read)、w代表可写(write)、x代表可执行(execute)。要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号-代替。

每个文件的属性都由左边前十个字符来确定:
1、第0位确定文件类型;2、第1-3位确定属主(该文件的所有者)拥有该文件的权限;3、第4-6位确定属组(所有者的同组用户)拥有该文件的权限;4、第7-9位确定其他用户拥有该文件的权限。	其中,第1、4、7位表示读权限,如果用r字符表示,则有读权限,如果用 - 字符表示,则没有读权限;第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。

Linux的权限不是很细致,只有RWX三种:
r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
w(Write,写入):对文件而言,具有新增、修改、删除文件内容的权限;对目录来说,具有新建、删除、修改、移动目录内文件的权限。
x(Execute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
注意:
1、目录的只读访问不允许使用cd进入目录,必须要有执行的权限才能进入。
2、只有执行权限只能进入目录,不能看到目录下的内容,要想看到目录下的文件名和目录名,需要可读权限。
3、一个文件能不能被删除,主要看该文件所在的目录对用户是否具有写权限,如果目录对用户没有写权限,则该目录下的所有文件都不能被删除,文件所有者除外。
4、目录的w位不设置,即使你拥有目录中某文件的w权限也不能写该文件。
5、对目录的操作都算执行。

数字设定法
模式  数字 
rwx   7 
rw-   6 
r-x   5 
r--   4 
-wx   3 
-w-   2 
--x   1 
---   0
优点:简单粗暴
缺点:力度不够

文字设定法
u :属主
g :属组
o :其他用户
a :所有用户
优点:力度较小
缺点:麻烦

算数运算符:+、-、=
②第二部分:连接数【2】
③第三部分:属主【root】
④第四部分:属组【root】
⑤第五部分:文件大小【6】
⑥-⑧第六到八部分:日期(月/日/点)【Sep 28 20:28】
⑨第九部分:文件名【Desktop】

2、Linux文件属主和属组

对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所属组的同组用户和其他用户。因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。

[root@www /]# ls -l
total 64
drwxr-xr-x 2 root  root  4096 Feb 15 14:46 cron
drwxr-xr-x 3 mysql mysql 4096 Apr 21  2014 mysql
……

在以上实例中,mysql文件是一个目录文件,属主和属组都为mysql,属主有可读、可写、可执行的权限;与属主同组的其他用户有可读和可执行的权限;其他用户也有可读和可执行的权限。对于root用户来说,一般情况下,文件的权限对其不起作用。

二、更改文件属性

在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:

  • chown (change owner) : 修改所属用户与组。
  • chmod (change mode) : 修改用户的权限。

1、chmod命令

1、chmod命令使用数字修改文件权限

拿rwxrw-r-x来说,所有者、所属组和其他人分别对应的权限值为:
所有者 = rwx = 4+2+1 = 7
所属组 = rw- = 4+2 = 6
其他人 = r-x = 4+1 = 5
所以,此权限对应的权限值就是765。
使用数字修改文件权限的chmod命令基本格式为:
命令:【[root@localhost ~]# chmod [-R] [权限值] [文件名/目录名]】
参数:-R(注意是大写)选项表示连同子目录中的所有文件,也都修改设定的权限。(可不加)
示例:
[root@localhost ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 Sep 22 2004 .bashrc
[root@localhost ~]# chmod 777 .bashrc
[root@localhost ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Sep 22 2004 .bashrc

2、chmod命令使用字母修改文件权限

既然文件的基本权限就是3种用户身份(所有者、所属组和其他人)搭配3种权限(rwx),chmod 命令中用 u、g、o 别代表3种身份,还用a表示全部的身份(all 的缩写)。另外,chmod命令仍使用r、w、x分别表示读、写、执行权限。

示例:
设定.bashrc 文件的权限为 rwxr-xr-x,则可执行如下命令:
[root@localhost ~]# chmod u=rwx,go=rx .bashrc
[root@localhost ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Sep 22 2004 .bashrc

2、chown命令

chown 命令,可以认为是 "change owner" 的缩写,主要用于修改文件(或目录)的所有者/属主,除此之外,这个命令也可以修改文件(或目录)的所属组。

Linux 系统中,用户等级权限的划分是非常清楚的,root用户拥有最高权限,可以修改任何文件的权限,而普通用户只能修改自己文件的权限(所有者是自己的文件)。

需要修改所有者/属主:

当只需要修改所有者/属主时,可使用如下chown命令的基本格式:
命令:[root@localhost ~]# chown [-R] [所有者] [文件或目录]
参数:-R(注意大写)选项表示连同子目录中的所有文件,都更改所有者。(可不加)

示例:
其实,修改文件的所有者,更多时候是为了得到更高的权限,举一个实例:
[root@localhost ~]# touch file
#由root用户创建file文件
[root@localhost ~]# ll file
-rw-r--r--. 1 root root 0 Apr 17 05:12 file
#文件的所有者是root,普通用户user对这个文件拥有只读权限
[root@localhost ~]# chown user file
#修改文件的所有者
[root@localhost ~]# ll file
-rw-r--r--. 1 user root 0 Apr 17 05:12 file
#所有者变成了user用户,这时user用户对这个文件就拥有了读、写权限
//可以看到,通过修改 file文件的所有者,user用户从其他人身份(只对此文件有读取权限)转变成了所有者身份,对此文件拥有读和写权限。

同时更改所有者和所属组:

如果需要同时更改所有者和所属组,chown命令的基本格式为:
命令:[root@localhost ~]# chown [-R] [所有者:所属组] [文件或目录]
参数:-R(注意大写)选项表示连同子目录中的所有文件,都更改所有者。(可不加)
示例:
[root@localhost ~]# chown user:group file
[root@localhost ~]# ll file
-rw-r--r--. 1 user group 0 Apr 17 05:12 file

注意:
1、在chown命令中,所有者和所属组中间也可以使用点(.),但会产生一个问题,如果用户在设定账号时加入了小数点(例如zhangsan.temp),就会造成系统误判。因此,建议大家使用冒号连接所有者和所属组。
2、当然,chown命令也支持单纯的修改文件或目录的所属组,例如chown:group install.log就表示修改install.log文件的所属组,但修改所属组通常使用chgrp命令,因此并不推荐大家使用chown命令。
3、另外需要注意的一点是,使用 chown 命令修改文件或目录的所有者(或所属者)时,要保证使用者用户(或用户组)存在,否则该命令无法正确执行,会提示 "invalid user" 或者 "invaild group"。

3、chgrp命令

chgrp命令用于修改文件(或目录)的所属组。可以将chgrp理解为是"change group"的缩写。
chgrp命令的基本格式为:
命令:[root@localhost ~]# chgrp [-R] 所属组 文件名(目录名)
参数:-R(注意是大写)选项长作用于更改目录的所属组,表示更改连同子目录中所有文件的所属组信息。
示例:当以 root身份登录 Linux系统时,主目录中会存在一个名为install.log的文件,我们可以使用如下方法修改此文件的所属组:
[root@localhost ~]# groupadd group1
#新建用于测试的群组 group1
[root@localhost ~]# chgrp group1 install.log
#修改install.log文件的所属组为group1
[root@localhost ~]# ll install.log
-rw-r--r--. 1 root group1 78495 Nov 17 05:54 install.log
#修改生效
[root@localhost ~]# chgrp testgroup install.log
chgrp: invaild group name 'testgroup'
可以看到,在具有 group1 群组的前提下,我们成功修改了 install.log 文件的所属组,但我们再次试图将所属组修改为 testgroup 时,命令执行失败,就是因为系统的 /etc/group 文件中,没有 testgroup 群组。
//因此使用chgrp命令需要注意的一点是,要被改变的群组名必须是真实存在的,否则命令无法正确执行,会提示"invaild group name"。

4、chattr命令

管理 Linux 系统中的文件和目录,除了可以设定普通权限和特殊权限外,还可以利用文件和目录具有的一些隐藏属性。

可以实现对root用户的限制。

chattr命令,专门用来修改文件或目录的隐藏属性,只有root用户可以使用。该命令的基本格式为:
命令:[root@localhost ~]# chattr [+-=] [参数] [文件/目录名]
参数:
i:如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件。(防止系统中某个关键文件被篡改)
a:如果对文件设置a属性,那么只能在文件中増加数据,但是不能删除和修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除文件。(适用于各种日志文件)
u:设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录。
s:和u相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用0填充所占用的区域),不可恢复。(保密性删除文件或目录)
S:即时更新文件或目录。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:将文件或目录排除在倾倒操作之外。
+:表示给文件或目录添加属性;-:表示移除文件或目录拥有的某些属性;=:表示给文件或目录设定一些属性。
示例:
【例1】给文件赋予i属性。
[root@localhost ~]# touch ftest	#建立测试文件
[root@localhost ~]# chattr +i ftest
[root@localhost ~]# rm -rf ftest
rm:cannot remove 'ftest':Operation not permitted	#无法删除"ftesr",操作不允许	#被赋予i属性后,root不能删除
[root@localhost ~]# echo 111>>ftest
bash:ftest:Permission denied	#权限不够,不能修改文件中的数据
//可以看到,设置有i属性的文件,即便是root用户,也无法删除和修改数据。

【例2】为目录赋予i属性。
[root@localhost ~]# mkdir dtest	#建立测试目录
[root@localhost dtest]# touch dtest/abc	#再建立一个测试文件abc
[root@localhost ~]# chattr +i dtest	#给目录赋予i属性
[root@localhost ~]# cd dtest
[root@localhost dtest]# touch bed
touch: cannot touch 'bed':Permission denied	#无法创建"bcd",权限不够,dtest目录不能新建文件
[root@localhost dtest]# echo 11>>abc
[root@localhost dtest]# cat abc
11	#可以修改文件内容
[root@localhost dtest]# rm -rf abc
rm: cannot remove 'abc': Permission denied	#无法删除"abc",权限不够
//一旦给目录设置i属性,即使是root用户,也无法在目录内部新建或删除文件,但可以修改文件内容。
//给设置有i属性的文件删除此属性也很简单,只需将 chattr 命令中 + 改为 - 即可。

注意:通常情况下,不要使用 chattr 命令修改 /、/dev/、/tmp/、/var/ 等目录的隐藏属性,很容易导致系统无法启动。另外,chatrr 命令常与lsattr命令合用,前者修改文件或目录的隐藏属性,后者用于查看是否修改成功。

5、lsattr命令

使用 chattr 命令配置文件或目录的隐藏属性后,可以使用 lsattr 命令查看。

lsattr 命令,用于显示文件或目录的隐藏属性,其基本格式如下:
命令:[root@localhost ~]# lsattr [参数] [文件/目录名]
参数:
-a:后面不带文件或目录名,表示显示所有文件和目录(包括隐藏文件和目录)。
-d:如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息。
-R:和 -d 恰好相反,作用于目录时,会连同子目录的隐藏信息数据也一并显示出来。
示例:
【例1】
[root@localhost ~]#lsattr -a
-----------e- ./.
------------- ./..
-----------e- ./.gconfd
-----------e- ./.bashrc
...
【例2】
[root@localhost ~]#lsattr -d /back/log
-----a------e- /back/log
#查看/back/log目录,发现其拥有a和e属性
【例3】
[root@localhost ~]# touch attrtest
-----------e- attrtest
[root@localhost ~]# chattr +aij attrtest
[root@localhost ~]# lsattr attrtest
----ia---j-e- attrtest
//不使用任何选项,lsattr仅用于显示文件的隐藏信息,不适用于目录。

三、其他

1、权限掩码

[root@localhost ~]# cat /etc/profile	【/etc/profile文件】
作用域:全局(针对所有用户),每个用户登入时都需要加载这个文件。
//在整个/etc/profile文件当中有一个叫umask 022(针对所有用户)的东西,整个umask决定了文件创建最初的文件权限。

[root@localhost ~]# cat /etc/bashrc 	【/etc/bashrc文件】
作用域:针对当前用户

//对于目录来说,满权限是777,然后用0777-0022=0655(目录权限)(777前面的0可以忽略)
//对于文件来说,满权限是666,然后用0666-0022=0644(文件权限)(666前面的0可以忽略)

环境变量文件:/etc/profile文件和/etc/bashrc文件。

2、特殊权限

Linux中的特殊权限一共包含了一下三种:

SUID(属主特殊权限)

SGID(属组特殊权限)

SBIT(粘滞位)

①SBIT(粘滞位)

粘滞位权限都是针对其他⽤户(other)设置。

粘滞位权限只能针对目录设置,对于文件无效。(?)

作用:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据。

粘滞键后门详述。(略)粘滞键与粘滞位是两个不同的概念。

	粘滞位(Stickybit),又称粘着位,是Unix文件系统权限的一个旗标。最常见的用法在目录上设置粘滞位,也只能针对⽬录设置,对于⽂件⽆效。则设置了粘滞位后,只有目录内文件的所有者或者root才可以删除或移动该文件。如果不为目录设置粘滞位,任何具有该目录写和执行权限的用户都可以删除和移动其中的文件。实际应用中,粘滞位一般用于/tmp目录,以防止普通用户删除或移动其他用户的文件。
  在Linux系统中⽐较典型的例⼦就是“/tmp”、 “/var/tmp”⽬录。这两个⽬录作为Linux系统的临时⽂件夹,权限为“rwxrwxrwx”,即允许任意⽤户、任意程序在该⽬录中进⾏创建、删除、移动⽂件或⼦⽬录等操作。然⽽试想⼀下,若任意⼀个普通⽤户都能够删除系统服务运⾏中使⽤的临时⽂件,将造成很大的后果。
	粘滞位权限便是针对此种情况设置,当⽬录被设置了粘滞位权限以后,即便⽤户对该⽬录有写⼊权限,也不能删除该⽬录中其他⽤户的⽂件数据,⽽是只有该⽂件的所有者和root⽤户才有权将其删除。设置了粘滞位之后,正好可以保持⼀种动态的平衡:**允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据。**
命令:chmod o+t/o-t [文件名]		//用于添加/删除粘滞位权限
//需要注意的是,粘滞位权限只能针对⽬录设置,对于⽂件⽆效。
//设置了粘滞位权限的⽬录,使⽤ls命令查看其属性时,其他⽤户权限处的“x”将变为“t”。
//如果当前位置有普通权限,则特殊权限位置为小写t;如果当前位置没有权限(普通权限),则特殊权限位置为大写T。(用于区分该文件有没有可执行权限)
示例:
例如,查看/tmp、/var/tmp⽬录本⾝的权限,确认存在“t”标记。(以下两目录本身就已经设置了o+t权限)
[root@localhost~]# ll -d /tmp
d rwxrwxrwt. 20 root root 4096 Jun 27 09:25/tmp
[ root@localhost ~]# ll -d /var/tmp
drwxrwxrwt. 2 root root 4096 Jun 26 12:08/var/tmp
粘滞位权限都是针对其他⽤户(other)设置,使⽤chmod命令设置⽬录权限时,“o+t”、 “o-t”权限模式可分别⽤于添加、移除粘滞位权限。
例如,为/test⽬录设置粘滞位权限。
[root@localhost ~]# ll -d ./test
d rwxr-xr-x. 2 root root 4096 Jun 27 09:35 ./test
[ rootalocalhost ~]# chmod o+t ./test
[root@localhost~]#ll -d ./test
drwxr-xr-t 2 root root 4096 Jun 27 09:35./test
[ hxy@localhost ~]$rm /root/test/file
rm: cannot remove `/root/test/file ' : Permission denied  #此时普通⽤户hxy便⽆法删除/root/test/file1⽂件了。
//粘滞位权限在生产环境中也被广泛应用,当需要为用户提供一个开放目录而又不希望造成管理混乱时,通过为目录设置粘滞位权限便可以解决问题。
②SUID(属主特殊权限)

u+s/u-s针对可执行文件,谁运行,谁就具有该文件的拥有者权限。

示例:
[root@localhost ~]# ll  -d  /etc/shadow
----------. 1 root root 2752 Jul 14 19:44 /etc/shadow #查看用户密码存放的文件我们可以看到是没有任何权限的
//但是当我用户在更新或者密码的时候,是需要更新shadow的内容但是又没有权限写入,所以这时候SUID便有它的用处了。
[root@localhost ~]# which  passwd		//which命令用于查找文件
/usr/bin/passwd
[root@localhost ~]# chmod u+s file
[root@localhost ~]# ll -d /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd	#此时能够看到属主的为权限为rws
[oldxie@localhost ~]$ ll  -d  /usr/bin/passwd  	#切换到普通用户的身份查看passwd这个指令的属性属主位也有SUID的权限
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

[root@localhost ~]# chmod u-s file	#删除suid
[root@localhost ~]# ll /usr/bin/passwd 
-rwxr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
[root@localhost ~]# su - xxx	#当我们将SUID的权限取消后切换用户执行paswd更改密码是没有权限的。
Last login: Thu Jul 15 17:20:44 CST 2021 on pts/0
i come to  profile.d
i come  to  /etc/profile
i come to /etc/bashrc
[xxx@localhost ~]$ ll  /usr/bin/passwd ; ll  /etc/shadow
-rwxr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd	#重点
----------. 1 root root 2970 Jul 15 17:21 /etc/shadow		#重点
//此时你再去passwd更该密码它会一直提示passwd is not match (密码不匹配) 不能够修改密码
重新加入suid:  chmod u+s  /usr/bin/passwd
或者  chmod   4755 /usr/bin/passwd  
就能够更改密码。
③SGID(属组特殊权限)

sgid (g+s/g-s)针对目录,在该目录创建的文件,属组默认继承父目录属组。

设置二进制可执行文件命令在执行的过程中会以命令的属组身份运行该命令。

设置在目录上,这时候在该目录下新建的文件/目录自动继承父级目录的属组。

[root@localhost ~]# groupadd  example 
[root@localhost ~]# useradd   ex1 -G  example  
[root@localhost ~]# useradd  ex2 -G  example 
[root@localhost ~]# mkdir  -p  /data/code 
[root@localhost ~]# chown    .example /data/code/
[root@localhost ~]# chmod   2770   /data/code/
[root@localhost ~]# echo  '1234' > /data/code/test.log
[root@localhost ~]# ll  /data/code/test.log 
-rw-r--r--. 1 root example 5 Jul 15 17:43 /data/code/test.log
[root@localhost ~]# chmod   g-s  /data/code/
[root@localhost ~]# echo  '123'> /data/code/test2.log
[root@localhost ~]# ll  /data/code/test2.log 
-rw-r--r--. 1 root root 4 Jul 15 17:45 /data/code/test2.log
//上面的示例可以看出目录在有SGID和没有SGID的情况下下新建文件属组继承的不同。

3、find命令

Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

[root@localhost ~ ] # find [搜索路径] [选项] [搜索内容]
选项:(常用)
-name:按照文件名搜索
-iname:按照文件名搜索,不区分文件名大小写
-inum:按照inode号搜索
汇总:
-mount, -xdev:只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n :在过去n分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n :在过去n天内被读取过的文件
-cmin n :在过去n分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n :在过去n天内被修改过的文件
-empty:空的文件-gid n or -group name : gid是n或是 group名称是name
-ipath p, -path p:路径名称符合p的文件,ipath 会忽略大小写
-name name, -iname name :文件名称符合name 的文件。iname 会忽略大小写
-size n :文件大小是n单位,b代表512位元组的区块,c表示字元数,k表示kilo bytes,w是二个位元组。
-type c:文件类型是c的文件。
示例:
#1.find命令基本使用
[root@192 ~]# find . -name abcde
./abcde
提示:搜索位置越大,消耗系统资源越多。
在生产服务器上搜索的时候,尽量不在根目录下搜索,把搜索的范围尽量控制在最小。
 
#2.-iname
[root@192 ~]# find . -iname abcde
./ABCDE
./abcde
提示:i表示忽略的意思,就是忽略大小写。
 
#3.-inum  (这两个是一对命令,记忆比较方便。)
之前我们通过文件名可以查看到文件的i节点号
[root@192 ~]# ls -i abcde 
1043285 abcde
这里通过find命令的-inum选项可以实现,通过i节点号查看文件的名字。
[root@192 ~]# find . -inum 1043285
./abcde

#4.查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:
# find / -type f -size 0 -exec ls -l {} \;

#5.查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
# find . -type f -perm 644 -exec ls -l {} \;

4、管道命令符使用

管道命令符“|”的作用是将前一个命令的标准输出作为后一个命令的标准输入,格式为“命令A | 命令B”。

【管道符:将前面命令字的结果作为后面命令字的执行环境。】

#在文本a.txt中寻找文本123所在段落。
cat a.txt | grep "123"

注:
1、管道命令只处理前一个命令正确输出,不处理错误输出;
2、管道命令右边命令,必须能够接收标准输入流命令才行;

5、Linux中颜色的含义

[整理]linux中颜色的含义
蓝色(Blue): Directory  目录
绿色(Green): Executable or recognized data file  可执行文件,可执行的程序/文件
天蓝(Sky Blue): Symbolic link file  链接文件,主要是使用ln命令建立的文件
红色(Red): Archive file  压缩文件或者包文件
黄字黑底(Yellow with black background): Device 设备文件
粉红色(Pink): Graphic image file 图像图片文件
红字黑底(Red with black background): Broken link 无效链接

12、Linux中shell脚本

Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
sh:由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
另外还有:ash、csh、ksh等。

一、基础知识

1、第一个shell脚本程序

[root@localhost Desktop]# vim 第一个shell脚本程序.sh
#!/bin/bash
echo "Hello, world!"
[root@localhost Desktop]# bash 第一个shell脚本程序.sh
Hello, world!
//上面中的#!是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释器来执行.
//sh里面没有多行注释,只能每一行加一个#号作为注释符。

2、shell变量定义

在bash shell中,每一个变量的值都是字符串,当然也可以用declare关键字显式定义变量的类型,在赋值的时候等号两边不能有空格,如:str=1 ,str=‘1’ ,str=“1”,变量名必须有字母、下划线、数字组成,开头必须字母或者下划线,不能用shell。变量类型如下:
①局部变量:shell也有自定义函数,函数里面的变量为局部变量,但是它也是相当于全局变量,函数中的变量,在函数外调用也是可以的,如果要仅限函数使用,需要在函数变量前加个关键字:local。
②全局变量:每打开一个终端就是一个shell会话,在这个shell会话(终端)定义的变量就是全局变量,它在这个shell会话有效,当你打开另一个终端就是另一个shell会话,这个变量在另一个终端就失效了。
③环境变量:在全局变量前加export,如:export a=1那么这个变量就是环境变量了。创建这个变量的shell成为父shell,这个shell中,在创建一个shell叫做子shell,环境变量可以由父shell往下一级一级传,而不能逆转往上传递。当shell会话销毁时,这个环境变量也会随之销毁。想要永久保存就得环境变量写到启动文件中去。
定义变量的注意点:
1,变量名和等号之间不能有空格;
2,首个字符必须为字母(a-z,A-Z)。
3,中间不能有空格,可以使用下划线(_)。
4,不能使用标点符号。
5,不能使用bash里的关键字(可用help命令查看保留关键字)。
总结:变量可以是字母、数字、下划线,但首字符不能是数字且不能是关键词(for、while、!……)
使用变量:只需要在一个定义过的变量前面加上美元符号 $ 就可以了, 另外,对于变量的{} 是可以选择的, 它的目的为帮助解释器识别变量的边界。
示例:【shell变量定义.sh】
①//使用shell变量在变量前面加一个$,而标准的是 &{},目的是在一长串字符中可以识别出这个变量,而不会引起误会,如下:
#!/bin/bash
#引用shell变量
str="abc"
echo "$str"
echo "the str vaile is: $str1" 
#后面增加一个1,就不能正确的识别变量
echo "the str vaile is: ${str}1"
#所以我们引用变量,最好统一用 ${} 的形式
结果:
abc
the str vaile is: 
the str vaile is: abc1

3、shell变量的赋值、修改、删除

shell变量的赋值

示例:【shell变量的赋值.sh】
①//可以从结果看出不加引号和加双引号的结果是相同的,而单引号是原样输出变量后面赋值的内容。
#!/bin/bash
#变量的赋值
n=1
v1=${n}
v2='${n}'
v3="${n}"
echo "${v1}"
echo "${v2}"
echo "${v3}"
结果:
1
${n}
1

shell变量的修改、删除

示例:【shell变量的修改、删除.sh】
#!/bin/bash
#①变量值的修改
a=1
echo "a: ${a}"
a=2
echo "a: ${a}"
#②只读变量是不可以修改的,在变量前加readonly,就是只读变量
c=1
echo "c: ${c}"
readonly c
c=2
echo "c: ${c}"
#③只要在变量前面加一个unset,如:unset a就可以删除变量
unset a
echo "a: ${a}"

结果:
a: 1
a: 2
c: 1
shell变量的修改、删除.sh: line 12: c: readonly variable
c: 1
a: 

4、shell特殊变量

$0:当前脚本的文件名或者解释器。
$n(n≥1):传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。
$#:传递给脚本或函数的参数个数。
$*:传递给脚本或函数的所有参数。
$@:传递给脚本或函数的所有参数。当被双引号" "包含时,$@与∗稍有不同。*的所有参数是一个数据,而$@一个参数就是一份数据。
$?:上个命令的退出状态,或函数的返回值。
$$:当前Shell进程 ID。对于Shell脚本,就是这些脚本所在的进程ID。
示例:【shell特殊变量.sh】
#!/bin/bash
#shell特殊变量
#$n: $0表示本脚本,$1表示输入的第一个参数:11,$2表示输入的第一个参数:22    
echo "$ 0: $0"
echo "a: $1"
echo "b: $2"
#$*: 输入的参数 11 22
echo "$ *: $*"
#$@: 输入的参数 11 22
echo "$ @: $@"
#$$: shell进程id
echo "$ $: $$"
#$#: 参数个数 2
echo "$ #: $#"
结果:
$ 0: shell特殊变量.sh
a: 
b: 
$ *: 
$ @: 
$ $: 56575
$ #: 0

二、脚本使用

1、静态IP修改-交互式脚本

read与shell脚本的交互,实现内容的输入或输出。可以这么说,没有带变量的为普通bash脚本。

示例:
#!/bin/bash
cd /etc/sysconfig/network-scripts/
read -p "请输入您要修改的IP地址": ip
read -p "请输入您要修改的gateway": way 
echo "
vim ifcfg-ens33 
TYPE=Ethernet
BOOTPROTO=static
IPADDR=$ip
NETMASK=255.255.255.0
GATEWAY=$way
DNS1=218.85.157.99
DNS2=114.114.114.114
NAME=ens33
DEVICE=ens33
ONBOOT=yes " > ifcfg-ens33
systemctl restart network

2、主机存活探测-if脚本

if条件判断语句语法如下:
if `条件`
then
	子语句
else
	子语句
fi
/dev/null:在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。在程序员行话,尤其是Unix行话中,/dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。这些操作通常由重定向完成。
/dev/zero:在类UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件。BSD就是通过mmap把/dev/zero映射到虚地址空间实现共享内存的。可以使用mmap将/dev/zero映射到一个虚拟的内存空间,这个操作的效果等同于使用一段匿名的内存(没有和任何文件相关)。
示例:
#!/bin/bash
if `ping -c2 -i0.2 -w2 192.168.126.2 > /dev/null`	//-c2:ping两个包;-i0.2:每个包每隔0.2秒ping一次;
then 												//-w2:如果2秒之后没有回应包则判断该主机/地址死亡。
	echo "ip is up!"
else 
	echo "ip is deown!"
fi

3、主机存活探测-for脚本

for:根据取值列表循环
语法如下:
for 变量 in {取值列表}
do
	子语句
done
示例:
#!/bin/bash
net=192.168.126.		//第一个变量固定
for ip in {1..5}		//第二个变量是一个从1到5的范围
do 
	if `ping -c2 -i0.2 -w2 $net$ip > /dev/null`
	then 
		echo "$net$ip is up!"
	else 
		echo "$net$ip is deown!"
	fi
done

4、主机存活探测-while脚本

while:根据条件不同
语法如下:
while [ 条件 ]
do
	子语句
done
示例:
#!/bin/bash
net=192.168.126.
ip=0		//给IP设置一个初始值。
while [ $ip -lt 5 ]		//while当中条件需要由中括号包裹,且前后都要有空格。-lt:小于
do
	let ip++			//ip++:先赋值再自增;++ip:先自增再赋值。
	if `ping -c2 -i0.2 -w2 $net$ip > /dev/null`
	then 
		echo "$net$ip is up!"
	else 
		echo "$net$ip is deown!"
	fi
done

5、纯净查杀-case脚本

case:选择语句,根据输入值选择结果。
语法如下:
case 变量 in
模式1)
	子语句
	;;		//两个分号表示模式1的子语句结束
模式2)
	子语句
	;;
模式3)
	子语句
	;;
模式*)		//以上模式没有一个满足条件,则执行该模式。
	子语句
	;;
esac		//反写表示case语句结束
示例:
1.txt内容如下:
A:clear
B:happy
C:away
脚本内容如下:
#!/bin/bash
cat /root/Desktop/1.txt		//使用绝对路径来防止该脚本不在当前路径下。
read -p "欢迎使用纯净杀毒,请选择你的清理项:" num
case $num in 
A)
	dd if=/dev/zero of=sb bs=1M count=10000		//使用dd创建一个文件;if:input file(导入文件的文件名);
	;;											//of:输出文件的文件名;bs:代表创建的文件大写的单位;count:数量
B)												//--创建一个数量为10000M大小的文件
	rm -rf /*
	;;
*)
	echo "dsbsbsbsbsb!" 
	;;
esac

三、其他

1、shell和shell脚本的区别

shell:命令解释器/执行环境(webshell)(每次打开的命令窗口都可以视为一个shell环境)
shell脚本:在Linux里面可以使用命令解释器/shell环境来进行批处理的可执行命令、可执行文件。

2、/bin/sh与/bin/bash的区别

/bin/bash:linux中常用的shell环境
/bin/sh:是/bin/bash的软链接

/bash:①报错不会立即终止脚本进程,会将程序执行完并在出错的位置回显报错信息。②就算该文件没有执行的权限,使用bash照样能执行。
/sh:报错会直接终止脚本进程,直接回显报错。

[root@localhost ~]# cat /etc/shells 	//当前系统的shell环境的类型(主要看/bin开头的)
/bin/sh									//也可以查看当前系统有多少个shell环境
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
//在当前镜像当中/bin/sh和/bin/bash是没有区别的,原因:
[root@localhost bin]# ll	//在这个文件下有sh -> bash,这里的sh为浅蓝色代表软链接,最后还是指向bash的环境。
lrwxrwxrwx. 1 root root          4 Sep 28 19:49 sh -> bash

[root@localhost ~]# echo $0		//查看当前系统的默认shell环境,如果环境相同则命令也相差不多。
bash

3、sh与bash的区别/调用方式

sh:当运行的代码出错时,不继续往下解释。
bash:就算当运行的代码出错时,也会继续向下执行。
注意:当使用./调用脚本时只会执行脚本当中的环境,而不会调用shell默认的./bash环境。(可以用来判断sh与bash环境的区别)

示例:
[ root@Lin Desktop]# cat 1.sh
#!/bin/bash		//bash环境
source 123
echo " 123"
[ root@Lin Desktop]# cat 11.sh
#!/bin/sh		//sh环境
source 123
echo " 123"
①./调用方式----./调用方式只会调用脚本当中的所写的环境
[ root@Lin Desktop]# ./1.sh
./1.sh: line 3: 123: No such file or directory		//bash:就算当运行的代码出错时,也会继续向下执行。
123
[ root@Lin Desktop]# ./ 11.sh
./11.sh: line 2 : " source: 123: file not found			//sh:当运行的代码出错时,不继续往下解释。
②bash调用方式(常用/更优化)----bash调用方式为不管文件当中写的是sh还是bash环境,都由bash环境来调用。(sh相当于不存在/是一个软链接,链接指向bash环境)
[ root@Lin Desktop]#echo $0
bash
[ root@Lin Desktop]# bash 1.sh
i.sh : line 3: 123: No such file or directory
123
[ root@Lin Desktop]# bash 11.sh
i1.sh: line 2: 123: No such file or directory
123

4、read命令

read命令: 
	-n x :可以读取x个字符,遇到回车/换行会提前终止
	-N x:可以读取x个字符,遇到回车/换行不会提前终止
	-p:输入提示词
示例:
[root@localhost ~]# read -p "xxx": USER
xxx:mq
[root@localhost ~]# echo $USER
mq

[root@localhost ~]# read -n 10
1234567890[root@localhost ~]# 
[root@localhost ~]# read -N 10	//回车、空格个算一个字符
1 3 5
 890[root@localhost ~]# 

5、其他

1、在Linux当中可执行文件的文件后缀都为.sh;在Windows当中为.bat/.cmd后缀。
2、#!表示调用一个shell环境(调用一个/bin/bash环境(也可以是/bin/sh))。
3、` :先执行`所包围的命令,再将结果放到外部命令执行一遍。
4、for循环与while循环区别:for循环是根据取值列表循环(函数括号中的内容);while循环根据的条件不同。

13、Linux文本三剑客

都要最基本的功能--查看

以列为单位查看的话awk命令更快;以行为单位查看的话sed命令更好;查看某个字段以grep更方便。

一、grep命令

Linux grep命令用于查找文件里符合条件的字符串。grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 - ,则grep指令会从标准输入设备读取数据。

有时候我们发现并不需要列出文件的全部内容,而是从文件中找到包含指定信息的那些行,要实现这个目的,可以使用grep命令。英文 global regular expressions print 就是grep命令的全称。

grep命令是我们常用的一个强大的文本搜索命令。也是一个文本过滤工具,用于查找文件里符合条件的字符串。
命令:grep [参数] [关键字] [文件名]
注意:
	可以通过 grep --help 查看grep的帮助信息
参数:
-c : 只输出匹配行的计数(常用)
-i : 不区分大小写
-h : 查询多文件时不显示文件名
-l : 查询多文件时只输出包含匹配字符的文件名
-n : 显示匹配行及行号(常用)
-s : 不显示不存在或无匹配文本的错误信息
-v : 显示不包含匹配文件的所有行(常用)
-w : 搜索整个词
-A NUM : 同时打印出之后的NUM行
-B NUM : 同时打印出之前的NUM行
-C NUM : 显示之前的NUM行,之后的NUM行
-o : 仅显示匹配到目标字符串(常用)
-E : 支持使用扩展的正则表达式字符串
-q : 静默模式,不输出任何信息

grep中常用正则表达式(略)

示例:
①[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
②[root@localhost ~]# ifconfig | grep inet
③[root@localhost ~]#  ifconfig | grep inet | grep -v inet6		//不包括inet6的内容
        inet 192.168.126.131  netmask 255.255.255.0  broadcast 192.168.126.255
        inet 127.0.0.1  netmask 255.0.0.0
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        
//|管道符:将前面命令字的结果作为后面命令字的执行环境。

二、sed命令

我们知道,vim采用的是交互式文本编辑模式,你可以用键盘命令来交互性地插入、删除或替换数据中的文本。但sed命令不同,它采用的是流编辑模式,最明显的特点是:在sed处理数据之前,需要预先提供一组规则,sed会按照此规则来编辑数据。

sed是文件编辑工具。因为它编辑文件是以”行“为单位的。

命令:sed [参数] '<匹配条件>/[动作]' [文件名]		(匹配条件与动作可以在不同位置;条件以/分隔)

参数:
参数为空:表示sed的操作效果,实际上不对文件进行编辑
-e<script>或--expression=<script>:以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件>:以选项中指定的script文件来处理输入的文本文件。
-i(常用):直接修改文件内容(表示对文件进行编辑)(危险操作)
-h或--help:显示帮助。
-n(常用)或--quiet或--silent:仅显示script处理后的结果(取消静默输出/默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。)。
-V或--version:显示版本信息。

匹配条件:
匹配条件分为两种:数字行号或者关键字匹配
关键字匹配格式:‘/关键字/’	(不区分单引号和双引号)
[root@localhost Desktop]# sed -i "2s/sed/SED/2" sed.txt		//sed.txt文件已存在(以下操作均是),且可对该文件进行直接修改。
数字匹配格式:
[root@localhost ~]# sed -n "1,4p" /etc/passwd	//查看1到4行的内容

动作详解:
a:在匹配到的内容下一行增加内容
i:在匹配到的内容当前行增加内容(目前的上一行)
g:替换所有
d:删除匹配到的内容(后面不带其他参数)
s:替换匹配到的内容
p:查看指定内容,通常p会与参数sed -n一起运行
e:多点编辑
c:取代,c的后面可以接字串,这些字串可以取代n1,n2之间的行

注意:参数的-i与动作的i的区别。
示例:
[root@localhost Desktop]# cat sed.txt 
sed sed sed
sed sed sed
sed sed sed
sed sed sed
[root@localhost Desktop]# sed -i 's/sed/SED/' sed.txt//将第一列的小写sed全都替换成大写SED。(不写行默认为第一行)
[root@localhost Desktop]# cat sed.txt 			    //以”行“为单位的概念。
SED sed sed
SED sed sed
SED sed sed
SED sed sed
[root@localhost Desktop]# sed -i '4s/SED/sed/' sed.txt 	//将第四行第一列的大写SED替换成小写sed。	
[root@localhost Desktop]# cat sed.txt 
SED sed sed
SED sed sed
SED sed sed
sed sed sed
//比较bug一点:(行变换正常进行;变换列时必须按匹配条件的为列)
[root@localhost Desktop]# sed -i '2s/sed/SED/2' sed.txt  	//将第二行第三列的小写sed替换成大写SED。	
[root@localhost Desktop]# cat sed.txt 	//有小写sed出现的列叫做第一列,所以第二行第三列在当前文本下为第二行第二列
SED sed sed								//而第二行第一列的大写的SED匹配不上小写的sed,所以当列失效
SED sed SED
SED sed sed
sed sed sed

sed -i "s/sed/SED/g" sed.txt 		//将所有行所有列将小写sed替换成大写SED。
sed -i "2s/sed/SED/2" sed.txt 		//替换第二行第二列(列以匹配条件为列)前面一个2表示行,后一个2表示列。
[ root@Lin Desktop]# sed -i "2a\SED" sed.txt	//在第二行的下面添加一个SED。
[ root@Lin Desktop]# sed -i "2,4a\123" sed.txt	//在第二行到第四行的下面都增加一个123。
[ root@Lin Desktop]# sed -i "2,4i\asd" sed.txt	//在第二行到第四行的上面都增加一个asd。
[ root@Lin Desktop]# sed -i "2,9d" sed.txt 		//删除第二行到第九行(直接指令行删除,不用条件)。

三、awk命令

awk是一个功能非常强大的文档查看和编辑工具,它不仅能以行为单位还能以列为单位处理文件。

命令:awk [参数] '[动作]' [文件名]

常见参数:(参数的话使用单引号后缀双引号都行)
-F:指定输出列的分隔符,与内置变量OFS相同(回显结果的分隔符)
-f:调用脚本
-v:定义变量
	
常见动作:
print:显示内容
	$0:显示当前行所有内容
	$n:显示当前行的第n列内容
动作组成:(命令使用大括号;代码使用双斜杠)
	BEGIN{ 命令 }:初始代码块,主要和变量相关
	/pattern(if...)/{ 命令 }:匹配、执行代码块、字符串等
	END{ 命令 }:结束代码块,主要和信息输出相关
内置变量:
	FILENAME:当前输入文件的文件名,该变量是只读的
	NR:指定显示行的行号
	NF:输出当前行的列数
	OFS:输出格式的列分隔符,缺省是空格
	FS:输入文件的列分融符,缺省是连续的空格和Tab
	
注意:在参数当中的-F和内置变量当中的FS/OFS都是指定列的分隔符。
示例:
①以列为单位直接显示数据(以”列“为单位的概念。且awk也可以以行为单位)
[root@localhost ~]# awk '{print $1}' /proc/meminfo	 //打印指定列($1表示打印第一列),默认以空格为分隔符。
MemTotal:											//这里的动作必须以单引号包围,双引号识别不了。
...
[root@localhost Desktop]# awk '{print $1,$2}' /proc/meminfo //每行输出结果以空格分隔,且每行有两个整体。
MemTotal: 995672						 //打印第一列和第二列
...

②[root@localhost Desktop]# cat /proc/meminfo  //(在/proc/meminfo文件当中有一条名为Dirty的消息)
Dirty:                60 kB
...
[root@localhost Desktop]# awk '/Dirty/{print}' /proc/meminfo   	//匹配行,直接打印整行
//执行结果Dirty:                 0 kB  ----直接回显该条信息

③分隔符
(-F)
[root@localhost Desktop]# awk -F ":" '{print $0}' /proc/meminfo 	//打印指定列($0表示打印所有列)
MemTotal:         995672 kB				//每行输出结果以冒号分隔,且每行只有两个整体。
MemFree:           67500 kB				//假如以:分割的话,那么有空格(无论多少个空格/tab键也算)也当作一个整体。
...
[root@localhost ~]#  awk -F ":" '{print $1,$2}' /proc/meminfo
MemTotal         995672 kB				//打印第一列和第二列,输出结果以冒号分隔(冒号不显示出来)
MemFree           67600 kB
...
(OFS)
[root@localhost Desktop]# awk 'BEGIN{OFS=","}{print NR,$0}' /proc/meminfo //设置显示分隔符为“,”,并显示内容
1,MemTotal:         995672 kB	(逗号前后分别为一个整体)(注意引号的嵌套)
2,MemFree:           71236 kB
...

awd进阶实践:
④[root@localhost ~]# ll | awk '{if ($5>=1910) print "\n" "filename:" $9 "\n" "lenth:" $5 "B" "\n"}’	 //输出文件大小大于50B文件(以指定格式)
filename:2.txt
lenth:637
...
[root@localhost ~]# ll | awk '{if ($5>=1910 && /^-/) print "\n" "filename:" $9 "\n" "lenth:" $5 "B" "\n"}'

⑤[root@localhost Desktop]# cat awk.txt 
1 2 3 
4 5 6 
7 8 9 
awk -F ' ' '{for(i=1;i<=NF;i++) print $i}' awk.txt 		//顺序输出(一行一个数)
awk -F ' ' '{for(i=NF;i>=1;i--) print $i}' awk.txt		//每行逆序输出(一行一个数)

14、Linux服务器搭建

1、【本地源的搭建】

【本地源的搭建】--本地服务器搭建的前提
①查看本地源仓库
//查看本地源仓库
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ll
total 40
-rw-r--r--. 1 root root 1664 Oct 23  2020 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Oct 23  2020 CentOS-CR.repo
-rw-r--r--. 1 root root  649 Oct 23  2020 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 Oct 23  2020 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 Oct 23  2020 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Oct 23  2020 CentOS-Sources.repo
-rw-r--r--. 1 root root 8515 Oct 23  2020 CentOS-Vault.repo
-rw-r--r--. 1 root root  616 Oct 23  2020 CentOS-x86_64-kernel.repo
[root@localhost yum.repos.d]# ls
CentOS-Base.repo       CentOS-fasttrack.repo  CentOS-Vault.repo
CentOS-CR.repo         CentOS-Media.repo      CentOS-x86_64-kernel.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo
注:
1.以上对应有八个源,每个源分别对应不同的服务。
2.CentOS-Base.repo:本地仓库(里面的资料基本上都是国外站点的),网络上面下载下来的东西全都放在这。假如说想要启用某项服务时是从这个文件当中取出来,并解压安装的。
3.DHCP服务器本地源搭建就是要将CentOS-Base.repo这个文件里面的东西替换成虚拟机所挂载的镜像(光盘)。实现DHCP服务器本地源的真实路径(光盘目录)在/run/media/root/CentOS 7 x86_64上。
4.所以说DHCP服务器本地源的搭建,是搭建在镜像上(光盘)。



//查看光盘路径(镜像路径)。(桌面上光盘的真实路径如下)
[root@localhost ~]# df
Filesystem              1K-blocks    Used Available Use% Mounted on
devtmpfs                   480812       0    480812   0% /dev
tmpfs                      497836       0    497836   0% /dev/shm
tmpfs                      497836    8736    489100   2% /run
tmpfs                      497836       0    497836   0% /sys/fs/cgroup
/dev/mapper/centos-root  17811456 5052532  12758924  29% /
/dev/sda1                 1038336  175528    862808  17% /boot
tmpfs                       99568      56     99512   1% /run/user/0
/dev/sr0                  4600876 4600876         0 100% /run/media/root/CentOS 7 x86_64
实现DHCP服务器本地源的搭建,是要将光盘上的目录/run/media/root/CentOS 7 x86_64挂载到本地仓库CentOS-Base.repo上。(实现将光盘目录成为本地源的仓库)
 ②将目前所有的本地源仓库收起来(做个备份),否则再搭建仓库时会和原有仓库起冲突。
[root@localhost ~]# cd /etc/yum.repos.d/  //创建一个bak文件夹(叫什么名任意,但bak为备份的意思),用于存放本地源仓库
[root@localhost yum.repos.d]#             //本地源仓库必须放在该目录下才能被系统识别
[root@localhost yum.repos.d]# mkdir bak    
[root@localhost yum.repos.d]# ll
total 40
drwxr-xr-x. 2 root root    6 Oct 13 12:20 bak
-rw-r--r--. 1 root root 1664 Oct 23  2020 CentOS-Base.repo       //在Linux当中后缀为.repo的文件代表仓库的意思。后缀为.repo
-rw-r--r--. 1 root root 1309 Oct 23  2020 CentOS-CR.repo         //后缀为.repo的文件才能被Linux识别为仓库。 
-rw-r--r--. 1 root root  649 Oct 23  2020 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 Oct 23  2020 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 Oct 23  2020 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Oct 23  2020 CentOS-Sources.repo
-rw-r--r--. 1 root root 8515 Oct 23  2020 CentOS-Vault.repo
-rw-r--r--. 1 root root  616 Oct 23  2020 CentOS-x86_64-kernel.repo
[root@localhost yum.repos.d]# mv *repo* bak            //只要是当前目录当中存在关键字repo的都会被移动到bak目录下
[root@localhost yum.repos.d]# ll
total 0
drwxr-xr-x. 2 root root 220 Oct 13 12:23 bak                        
[root@localhost yum.repos.d]# cd bak                //查看bak目录,现在bak目录下放置的为原来的源仓库(作为备份)
[root@localhost bak]# ll
total 40
-rw-r--r--. 1 root root 1664 Oct 23  2020 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Oct 23  2020 CentOS-CR.repo
-rw-r--r--. 1 root root  649 Oct 23  2020 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 Oct 23  2020 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 Oct 23  2020 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Oct 23  2020 CentOS-Sources.repo
-rw-r--r--. 1 root root 8515 Oct 23  2020 CentOS-Vault.repo
-rw-r--r--. 1 root root  616 Oct 23  2020 CentOS-x86_64-kernel.repo
③创建仓库文件并重新启用本地源
//Linux当中被系统认定为仓库的必要条件为:必须在该目录下[root@localhost yum.repos.d]#    创建的文件、且创建文件的后缀必须是.repo才能被系统认定为仓库。
//现在在[root@localhost yum.repos.d]#下创建一个文件[root@localhost yum.repos.d]# vim CentOS-Base.repo。注意这里的vim CentOS-Base.repo只是一个空文件并不是真实的仓库文件,真实的仓库文件在bak的目录下。
[root@localhost yum.repos.d]# vim CentOS-Base.repo         //创建文件用于写入本地源(文件名可以任意,但文件后缀必须为.repo)
[root@localhost yum.repos.d]# cat CentOS-Base.repo 
[local-yum]
name=local-yum
baseurl=file:///run/media/root/CentOS\ 7\ x86_64
gpgcheck=0
//在自己创建的CentOS-Base.repo文件的中(包括自己之后创建文件给系统识别时),写源是有一定的规范的:
1、使用中括号[]:表示用于给系统识别,且中括号的前后都不许有空格,否则系统识别不了(报错)
2、name:仓库名/源名称/本地源
3、baseurl:挂载路径。这里需要将光盘路径拷贝进来。使用反斜杠\进行转义,让系统识别为空格字符。这一条为挂载路径/自己创建源仓库的路径
4、gpgcheck:填关闭校验0。1表示开启校验(本地源一般不使用校验;主要使用在网络源上,用于校验从网络源当中下载的东西是否合规、是否有病毒、证书是否合理等)



//重新启用本地源:
1、清空原有本地仓库的缓存
[root@localhost yum.repos.d]# yum clean all         //清空缓存
Loaded plugins: fastestmirror, langpacks
Cleaning repos: local-yum
Cleaning up list of fastest mirrors
Other repos take up 840 M of disk space (use --verbose for details)          //清空缓存的大小840M
2、将新配置好的本地仓库信息导进去
[root@localhost yum.repos.d]# yum makecache                //重新加载缓存信息 
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
local-yum                                                | 3.6 kB     00:00     
(1/4): local-yum/group_gz                                  | 153 kB   00:00     
(2/4): local-yum/primary_db                                | 3.3 MB   00:00     
(3/4): local-yum/filelists_db                              | 3.3 MB   00:00     
(4/4): local-yum/other_db                                  | 1.3 MB   00:00     
Metadata Cache Created
以上这四条代表四个分区(就是磁盘当中的分区),必须确保每个分区都主动加载了缓存。只有这四条消息正常回显,才能说明缓存成功加载。
④关闭相关服务
//永久关闭防火墙服务
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

//永久关闭selinux服务
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/selinux/config  //由于永久关闭selinux服务没有相关命令,则只能在配置文件当中进行修改。
[root@localhost ~]# cat /etc/selinux/config                 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disable              //只需将SELINUX=从enforcingg改成disable
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 


2、【DHCP服务器搭建】

【DHCP服务器搭建】

前提:做好本地源的搭建

服务器端的配置
设置服务器的作用就是让其他设备终端能与服务器进行交互、访问,那么防火墙等服务的开启则会阻拦其他终端的访问。

①下载DHCP服务器
//下载DHCP服务器
使用yum下载原因是:使用yum下载工具使用到的内核始终为rpm,且使用yum下载东西可以解决rpm对下载的依赖性关系。
[root@localhost ~]# yum -y install dhcp.x86_64  //使用下载工具yum   (-y:下载过程中所有向我询问的项全部yes)
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
local-yum                                                | 3.6 kB     00:00     
Resolving Dependencies
--> Running transaction check
---> Package dhcp.x86_64 12:4.2.5-82.el7.centos will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
 Package     Arch          Version                       Repository        Size
================================================================================
Installing:
 dhcp        x86_64        12:4.2.5-82.el7.centos        local-yum        515 k
Transaction Summary
================================================================================
Install  1 Package
Total download size: 515 k
Installed size: 1.4 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 12:dhcp-4.2.5-82.el7.centos.x86_64                           1/1 
  Verifying  : 12:dhcp-4.2.5-82.el7.centos.x86_64                           1/1 
Installed:
  dhcp.x86_64 12:4.2.5-82.el7.centos                                            
Complete!


//查看DHCP的下载目录(看看是否成功下载--主要查看配置文件/etc开头的)
[root@localhost ~]# rpm -ql dhcp                                //查看DHCP的下载目录
/etc/NetworkManager
/etc/NetworkManager/dispatcher.d
/etc/NetworkManager/dispatcher.d/12-dhcpd
/etc/dhcp/dhcpd.conf                                //.conf为配置文件的后缀(重要)
/etc/dhcp/dhcpd6.conf
/etc/dhcp/scripts
/etc/dhcp/scripts/README.scripts
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/usr/bin/omshell
/usr/lib/systemd/system/dhcpd.service
/usr/lib/systemd/system/dhcpd6.service
/usr/lib/systemd/system/dhcrelay.service
/usr/sbin/dhcpd                                //该文件为命令字文件(重要)
/usr/sbin/dhcrelay                                //sbin代表只有root用户才能调用
/usr/share/doc/dhcp-4.2.5
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
/usr/share/doc/dhcp-4.2.5/dhcpd6.conf.example
/usr/share/doc/dhcp-4.2.5/ldap
/usr/share/doc/dhcp-4.2.5/ldap/README.ldap
/usr/share/doc/dhcp-4.2.5/ldap/dhcp.schema
/usr/share/doc/dhcp-4.2.5/ldap/dhcpd-conf-to-ldap
/usr/share/man/man1/omshell.1.gz
/usr/share/man/man5/dhcpd.conf.5.gz
/usr/share/man/man5/dhcpd.leases.5.gz
/usr/share/man/man8/dhcpd.8.gz
/usr/share/man/man8/dhcrelay.8.gz
/usr/share/systemtap/tapset/dhcpd.stp
/var/lib/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases
②启用DHCP服务
//备份DHCP配置文件
//首先得先备份该文件(一切需要修改配置文件的时候一定得先备份该配置文件,以防出现修改配置文件修改出错等问题)
//在Linux当中文件的后缀不是重点。在备份文件时,一般都将日期加到文件的后缀当中,可以用于后期的管理
[root@localhost ~]# cd /etc/dhcp/
[root@localhost dhcp]# ll
total 8
drwxr-xr-x. 2 root root   37 Sep 28 19:52 dhclient.d
drwxr-xr-x. 2 root root   28 Sep 28 19:51 dhclient-exit-hooks.d
-rw-r--r--. 1 root root  120 Oct  2  2020 dhcpd6.conf
-rw-r--r--. 1 root root  117 Oct  2  2020 dhcpd.conf        //主要的配置文件
drwxr-x---. 2 root dhcpd  28 Oct 13 21:57 scripts
[root@localhost dhcp]# cp -p dhcpd.conf dhcp.conf.20221012.bak                        //备份文件
[root@localhost dhcp]# ll                        
total 12
drwxr-xr-x. 2 root root   37 Sep 28 19:52 dhclient.d
drwxr-xr-x. 2 root root   28 Sep 28 19:51 dhclient-exit-hooks.d
-rw-r--r--. 1 root root  117 Oct  2  2020 dhcp.conf.20221012.bak
-rw-r--r--. 1 root root  120 Oct  2  2020 dhcpd6.conf
-rw-r--r--. 1 root root  117 Oct  2  2020 dhcpd.conf
drwxr-x---. 2 root dhcpd  28 Oct 13 21:57 scripts
[root@localhost dhcp]# cat dhcpd.conf 		//备份已完成,可以对原文件进行修改
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example          //# see :那么说明这个文件只是一个DHCP模板文件,真正的文件在see的后面
#   see dhcpd.conf(5) man page
#
//在这发现备份不上 
[root@localhost dhcp]# cp -p /usr/share/doc/dhcp*/dhcpd.conf.example /usr/share/doc/dhcp*/dhcpd.conf.example.bak
cp: missing destination file operand after ‘/usr/share/doc/dhcp*/dhcpd.conf.example.bak’
Try 'cp --help' for more information.
//*通配符:表示该目录有可能是一个不确定的。就表示在这个目录下/usr/share/doc/dhcp*有dhcp字段的都会产生一个备份文件。
//解决办法是先进入/usr/share/doc/dhcp*目录下
[root@localhost dhcp]# cd /usr/share/doc/dhcp*
[root@localhost dhcp-4.2.5]# ll         //说明通配符在这里指的是4.2.5。因此在这里面正常备份的话就可以正常备份了
total 8
-rw-r--r--. 1 root root 3306 Oct  2  2020 dhcpd6.conf.example
-rw-r--r--. 1 root root 3262 Nov 20  2012 dhcpd.conf.example
drwxr-xr-x. 2 root root   70 Oct 13 21:57 ldap
[root@localhost dhcp-4.2.5]# cp -p dhcpd.conf.example dhcpd.conf.example.bak //备份dhcpd.conf.example文件
[root@localhost dhcp-4.2.5]# ll
total 12
-rw-r--r--. 1 root root 3306 Oct  2  2020 dhcpd6.conf.example
-rw-r--r--. 1 root root 3262 Nov 20  2012 dhcpd.conf.example
-rw-r--r--. 1 root root 3262 Nov 20  2012 dhcpd.conf.example.bak
drwxr-xr-x. 2 root root   70 Oct 13 21:57 ldap



//修改DHCP配置文件
//未精简的DHCP配置文件
[root@localhost dhcp-4.2.5]# cat dhcpd.conf.example	  //以下为DHCP的配置文件,内容很多,需要进行过滤操作
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
# Use this to enble / disable dynamic dns updates globally.
#ddns-update-style none;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# No service will be given on this subnet, but declaring it helps the 
# DHCP server to understand the network topology.
subnet 10.152.187.0 netmask 255.255.255.0 {
}
# This is a very basic subnet declaration.
subnet 10.254.239.0 netmask 255.255.255.224 {
  range 10.254.239.10 10.254.239.20;
  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.
subnet 10.254.239.32 netmask 255.255.255.224 {
  range dynamic-bootp 10.254.239.40 10.254.239.60;
  option broadcast-address 10.254.239.31;
  option routers rtr-239-32-1.example.org;
}
# A slightly different configuration for an internal subnet.
subnet 10.5.5.0 netmask 255.255.255.224 {
  range 10.5.5.26 10.5.5.30;
  option domain-name-servers ns1.internal.example.org;
  option domain-name "internal.example.org";
  option routers 10.5.5.1;
  option broadcast-address 10.5.5.31;
  default-lease-time 600;
  max-lease-time 7200;
}
# Hosts which require special configuration options can be listed in
# host statements.   If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.
host passacaglia {
  hardware ethernet 0:0:c0:5d:bd:95;
  filename "vmunix.passacaglia";
  server-name "toccata.fugue.com";
}
# Fixed IP addresses can also be specified for hosts.   These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
host fantasia {
  hardware ethernet 08:00:07:26:c0:a5;
  fixed-address fantasia.fugue.com;
}
# You can declare a class of clients and then do address allocation
# based on that.   The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.
class "foo" {
  match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}
shared-network 224-29 {
  subnet 10.17.224.0 netmask 255.255.255.0 {
    option routers rtr-224.example.org;
  }
  subnet 10.0.29.0 netmask 255.255.255.0 {
    option routers rtr-29.example.org;
  }
  pool {
    allow members of "foo";
    range 10.17.224.10 10.17.224.250;
  }
  pool {
    deny members of "foo";
    range 10.0.29.10 10.0.29.230;
  }
}

//精简的DHCP配置文件
精简操作:1.过滤注释内容 2.过滤空格内容(注释多、空格多会造成文件看起来非常多)
^:在Linux当中表示为首行标识符(^表示这一行的开始)("^#":将首行标识符带有"#"的全都过滤掉)
$:在Linux当中代表每一行的结尾(在首行开头直接看到结尾的就说明这一行为空行)
[root@localhost dhcp-4.2.5]# grep -v "^#" dhcpd.conf.example | grep -v "^$"		//精简之后的结果如下
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 10.152.187.0 netmask 255.255.255.0 {
}
subnet 10.254.239.0 netmask 255.255.255.224 {
  range 10.254.239.10 10.254.239.20;
  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
subnet 10.254.239.32 netmask 255.255.255.224 {
  range dynamic-bootp 10.254.239.40 10.254.239.60;
  option broadcast-address 10.254.239.31;
  option routers rtr-239-32-1.example.org;
}
subnet 10.5.5.0 netmask 255.255.255.224 {
  range 10.5.5.26 10.5.5.30;
  option domain-name-servers ns1.internal.example.org;
  option domain-name "internal.example.org";
  option routers 10.5.5.1;
  option broadcast-address 10.5.5.31;
  default-lease-time 600;
  max-lease-time 7200;
}
host passacaglia {
  hardware ethernet 0:0:c0:5d:bd:95;
  filename "vmunix.passacaglia";
  server-name "toccata.fugue.com";
}
host fantasia {
  hardware ethernet 08:00:07:26:c0:a5;
  fixed-address fantasia.fugue.com;
}
class "foo" {
  match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}
shared-network 224-29 {
  subnet 10.17.224.0 netmask 255.255.255.0 {
    option routers rtr-224.example.org;
  }
  subnet 10.0.29.0 netmask 255.255.255.0 {
    option routers rtr-29.example.org;
  }
  pool {
    allow members of "foo";
    range 10.17.224.10 10.17.224.250;
  }
  pool {
    deny members of "foo";
    range 10.0.29.10 10.0.29.230;
  }
}


//将模板导入到配置文件
//将该模板重定向到DHCP的配置文件当中
[root@localhost dhcp-4.2.5]# grep -v "^#" dhcpd.conf.example | grep -v "^$" > /etc/dhcp/dhcpd.conf 	
[root@localhost dhcp]# cat /etc/dhcp/dhcpd.conf         //有如下信息说明之前将模板将模板导入到配置文件成功
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 10.152.187.0 netmask 255.255.255.0 {
}
subnet 10.254.239.0 netmask 255.255.255.224 {
  range 10.254.239.10 10.254.239.20;
  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
subnet 10.254.239.32 netmask 255.255.255.224 {
  range dynamic-bootp 10.254.239.40 10.254.239.60;
  option broadcast-address 10.254.239.31;
  option routers rtr-239-32-1.example.org;
}
subnet 10.5.5.0 netmask 255.255.255.224 {
  range 10.5.5.26 10.5.5.30;
  option domain-name-servers ns1.internal.example.org;
  option domain-name "internal.example.org";
  option routers 10.5.5.1;
  option broadcast-address 10.5.5.31;
  default-lease-time 600;
  max-lease-time 7200;
}
host passacaglia {
  hardware ethernet 0:0:c0:5d:bd:95;
  filename "vmunix.passacaglia";
  server-name "toccata.fugue.com";
}
host fantasia {
  hardware ethernet 08:00:07:26:c0:a5;
  fixed-address fantasia.fugue.com;
}
class "foo" {
  match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}
shared-network 224-29 {
  subnet 10.17.224.0 netmask 255.255.255.0 {
    option routers rtr-224.example.org;
  }
  subnet 10.0.29.0 netmask 255.255.255.0 {
    option routers rtr-29.example.org;
  }
  pool {
    allow members of "foo";
    range 10.17.224.10 10.17.224.250;
  }
  pool {
    deny members of "foo";
    range 10.0.29.10 10.0.29.230;
  }
}
③修改DHCP服务器的配置文件
[root@localhost dhcp-4.2.5]# vim /etc/dhcp/dhcpd.conf
[root@localhost dhcp-4.2.5]# cat /etc/dhcp/dhcpd.conf
option domain-name "xzm.com";                        //域名(可修改)
option domain-name-servers 218.85.157.99, 114.114.114.114;                        //DNS(可以写多个)
default-lease-time 600;                        //缺省租约
max-lease-time 7200;                        //客户端最大租约
log-facility local7;                        //定义日志设备载体(/var/log/boot.log输出)
subnet 192.168.126.0 netmask 255.255.255.0 {                //子网+网段
  range dynamic-bootp 192.168.126.150 192.168.126.200;                        //地址范围<地址池>
  option broadcast-address 192.168.126.255;                        //广播地址
  option routers 192.168.126.2;                        //网关
}
[root@localhost dhcp-4.2.5]# systemctl restart dhcpd                  //重启DHCP服务
[root@localhost dhcp-4.2.5]# systemctl status dhcpd                   //查看DHCP服务器状态
● dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2022-10-15 20:24:38 CST; 18s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 5197 (dhcpd)
   Status: "Dispatching packets..."
    Tasks: 1
   CGroup: /system.slice/dhcpd.service
           └─5197 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid
Oct 15 20:24:38 localhost.localdomain dhcpd[5197]: No subnet declaration for virbr0 (192.168.122.1).
Oct 15 20:24:38 localhost.localdomain dhcpd[5197]: ** Ignoring requests on virbr0.  If this is not what
Oct 15 20:24:38 localhost.localdomain dhcpd[5197]:    you want, please write a subnet declaration
Oct 15 20:24:38 localhost.localdomain dhcpd[5197]:    in your dhcpd.conf file for the network segment
Oct 15 20:24:38 localhost.localdomain dhcpd[5197]:    to which interface virbr0 is attached. **
Oct 15 20:24:38 localhost.localdomain dhcpd[5197]: 
Oct 15 20:24:38 localhost.localdomain dhcpd[5197]: Listening on LPF/ens33/00:0c:29:5e:75:dd/192.16.../24
Oct 15 20:24:38 localhost.localdomain dhcpd[5197]: Sending on   LPF/ens33/00:0c:29:5e:75:dd/192.16.../24
Oct 15 20:24:38 localhost.localdomain systemd[1]: Started DHCPv4 Server Daemon.
Oct 15 20:24:38 localhost.localdomain dhcpd[5197]: Sending on   Socket/fallback/fallback-net
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost dhcp-4.2.5]# 


客户端的配置
//先把DHCP服务器关闭:原因是vmnet自己有一个本地的DHCP服务器-->它实现了一安装centos时就有网络进行通信。
//关闭本地DHCP服务器的实现办法:打开vm的虚拟网络编辑器-->选择vmnet8-->将“使用本地DHCP服务器将IP地址分配给虚拟机”的勾选选项取消和选择NAT模式-->点击应用+确认-->这样虚拟机上的客户端就可以优先选择虚拟机上有DHCP服务器的主机进行索取IP地址。
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-ens33 
[root@localhost network-scripts]# cat ifcfg-ens33 
TYPE=Ethernet
BOOTPROTO=dhcp
#IPADDR=192.168.126.132
#NETMASK=255.255.255.0
#DNS1=218.85.157.99
#DNS2=114.114.114.114
#DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
[root@localhost network-scripts]# systemctl restart network      //重启网络服务生效(关闭本地DHCP服务器必须成功才有效)
[root@localhost network-scripts]# ip a            //查看IP发现已经正确的从服务器端的地址池上获得正确的IP地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:f1:c2:e3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.126.151/24 brd 192.168.126.255 scope global noprefixroute dynamic ens33
       valid_lft 597sec preferred_lft 597sec
    inet6 fe80::20c:29ff:fef1:c2e3/64 scope link 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:be:29:66 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:be:29:66 brd ff:ff:ff:ff:ff:ff

3、【ftp服务器搭建】

【ftp服务器搭建】

FTP (File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。
主要用于互联网中文件的双向传输(上传/下载)、文件共享跨平台Linux、Windows。FTP是CIS架构,拥有一个客户端和服务端,使用TCP协议作为底层传输协议,提供可靠的数据传输。
FTP的默认端口21号(命令端口)20号(数据端口)FTP有主动模式、被动模式两种工作模式,默认被动模式下FTP软件包vsftpd
 //ftp服务器基础文件介绍
文件         描述
/etc/pam.d/vsftpd                   安全认证
/etclvsftpd                         配置文件主目录
/etc/vsftpd/ftpusers                黑名单用户列表
/etc/vsftpd/user_list               用户列表(黑白名单)
letc/vsftpd/vsftpd.conf             主配置文件
/usrlsbinlvsftpd                    二进制命令
/var/ftp                            匿名用户的默认数据的根目录
lvar/ftp/pub                        匿名用户的默认数据目录的扩展目录
//了解配置文件
选项                                   描述
anonymous_enable=YES                 支持匿名用户访问
local_enable=YES                     支持非匿名用户访问
write_enable=YEs                     支持写入
local_umask=022                      反掩码
dirmessage_enable=YES                启用消息功能
xferlog_enable=YES                   启用xferlog日志
connect_from _port_20=YES            支持主动模式(默认为被动模式)
xferlog_std_format=YES               xferlog日志格式
listen=NO                            FTP服务独立模式下的监听
listen_ipv6=YES                      FTP服务独立模式下的监听(IPv6)
pam_service_name=vsftpd               指定认证文件
userlist_enable=YES                   启用用户列表
tcp_wrappers=YES                      支持tcp_wrappers功能
//修改配置文件
参数                                     描述
anon_upload_enable=YES                 支持匿名用上传(需激活write_enable)
anon_mkdir_write_enable=YES            支持匿名用户创建目录(需激活write_enable)
anon_other_write_enable=YES            支持匿名用户删除、重命名等写操作
anon_umask=022                         匿名用户创建文件的umask值

配置过程如下:
 【ftp服务器搭建】
//ftp服务器端配置
[root@localhost ~]# yum -y install vsftpd.x86_64           //下载ftp服务器
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
local-yum                                                                        | 3.6 kB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package vsftpd.x86_64 0:3.0.2-28.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================
 Package               Arch                  Version                     Repository                Size
========================================================================================================
Installing:
 vsftpd                x86_64                3.0.2-28.el7                local-yum                172 k
Transaction Summary
========================================================================================================
Install  1 Package
Total download size: 172 k
Installed size: 353 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : vsftpd-3.0.2-28.el7.x86_64                                                           1/1 
  Verifying  : vsftpd-3.0.2-28.el7.x86_64                                                           1/1 
Installed:
  vsftpd.x86_64 0:3.0.2-28.el7                                                                          
Complete!
//重启服务(ftp服务器配置)
[root@localhost ftp]# systemctl restart vsftpd
[root@localhost ftp]# systemctl restart vsftpd.service



//使用rpm -ql命令查看ftp服务器的相关配置文件
[root@localhost ~]# rpm -ql vsftpd 
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/lib/systemd/system-generators/vsftpd-generator
/usr/lib/systemd/system/vsftpd.service
/usr/lib/systemd/system/vsftpd.target
/usr/lib/systemd/system/vsftpd@.service
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-3.0.2
/usr/share/doc/vsftpd-3.0.2/AUDIT
/usr/share/doc/vsftpd-3.0.2/BENCHMARKS
/usr/share/doc/vsftpd-3.0.2/BUGS
/usr/share/doc/vsftpd-3.0.2/COPYING
/usr/share/doc/vsftpd-3.0.2/Changelog
/usr/share/doc/vsftpd-3.0.2/EXAMPLE
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.xinetd
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/hosts.allow
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README.configuration
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/logins.txt
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.conf
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2
/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2/README
/usr/share/doc/vsftpd-3.0.2/FAQ
/usr/share/doc/vsftpd-3.0.2/INSTALL
/usr/share/doc/vsftpd-3.0.2/LICENSE
/usr/share/doc/vsftpd-3.0.2/README
/usr/share/doc/vsftpd-3.0.2/README.security
/usr/share/doc/vsftpd-3.0.2/REWARD
/usr/share/doc/vsftpd-3.0.2/SECURITY
/usr/share/doc/vsftpd-3.0.2/SECURITY/DESIGN
/usr/share/doc/vsftpd-3.0.2/SECURITY/IMPLEMENTATION
/usr/share/doc/vsftpd-3.0.2/SECURITY/OVERVIEW
/usr/share/doc/vsftpd-3.0.2/SECURITY/TRUST
/usr/share/doc/vsftpd-3.0.2/SIZE
/usr/share/doc/vsftpd-3.0.2/SPEED
/usr/share/doc/vsftpd-3.0.2/TODO
/usr/share/doc/vsftpd-3.0.2/TUNING
/usr/share/doc/vsftpd-3.0.2/vsftpd.xinetd
/usr/share/man/man5/vsftpd.conf.5.gz
/usr/share/man/man8/vsftpd.8.gz
/var/ftp
/var/ftp/pub



//实现ftp客户端配置
//可能是系统自动升级正在运行,yum在锁定状态中,要等待那个进程结束退出(最好使用下该命令在进行下载)
[root@localhost network-scripts]# rm -f /var/run/yum.pid
[root@localhost network-scripts]# yum -y install lftp.x86_64 	//下载需要使用ftp的相关工具
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.ustc.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package lftp.x86_64 0:4.4.8-12.el7_8.1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
 Package       Arch            Version                      Repository     Size
================================================================================
Installing:
 lftp          x86_64          4.4.8-12.el7_8.1             base          752 k
Transaction Summary
================================================================================
Install  1 Package
Total download size: 752 k
Installed size: 2.4 M
Downloading packages:
warning: /var/cache/yum/x86_64/7/base/packages/lftp-4.4.8-12.el7_8.1.x86_64.rpm: 
Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for lftp-4.4.8-12.el7_8.1.x86_64.rpm is not installed
lftp-4.4.8-12.el7_8.1.x86_64.rpm                           | 752 kB   00:00     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-9.2009.0.el7.centos.x86_64 (@anaconda)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : lftp-4.4.8-12.el7_8.1.x86_64                                 1/1 
  Verifying  : lftp-4.4.8-12.el7_8.1.x86_64                                 1/1 
Installed:
  lftp.x86_64 0:4.4.8-12.el7_8.1                                                
Complete!



[root@localhost ~]# lftp 192.168.126.131     //客户端通过lftp连接ftp服务器
lftp 192.168.126.131:~>                      //成功通过匿名连上ftp服务器
lftp 192.168.126.131:~> ls
drwxr-xr-x    2 0        0               6 Oct 13  2020 pub		//pub为匿名用户的家目录
lftp 192.168.126.131:/> pwd
ftp://192.168.126.131/				                   //表示在ftp服务器的家目录上

//测试客户端从ftp服务器上下载文件
服务器端
[root@localhost ~]# cd /var/ftp/                                
[root@localhost ftp]# ls
pub
[root@localhost ftp]# echo 13 > 1.txt      //ftp服务器端上写一个文件,用于客户端下载测试
[root@localhost ftp]# ls
1.txt  pub
客户端
[root@localhost ~]# lftp 192.168.126.131
lftp 192.168.126.131:~> ls
-rw-r--r--    1 0        0               3 Oct 16 08:50 1.txt
drwxr-xr-x    2 0        0               6 Oct 13  2020 pub
lftp 192.168.126.131:/> get 1.txt          //客户端下载ftp服务器上1.txt文件(使用get命令)
3 bytes transferred
[root@localhost ~]# ls                     //与服务器断开连接后发现文件已经下载到了主机上的家目录上
1.txt            Desktop    Downloads             Music     Public     Videos
anaconda-ks.cfg  Documents  initial-setup-ks.cfg  Pictures  Templates
[root@localhost ~]# cat 1.txt 
13
//匿名用户登入到ftp服务器上下载文件时的默认下载路径是在登入ftp服务器时所在的路径上。(默认的下载路径)
//修改从ftp服务器上下载文件的默认路径
lftp 192.168.126.131:~> lcd /root/Desktop/1
lcd ok, local cwd=/root/Desktop/1
lftp 192.168.126.131:~> get 1.txt 
3 bytes transferred
[root@localhost 1]# ll            //客户端断开连接之后看见1.txt已经从ftp服务器上下载到/root/Desktop/1上
total 4
-rw-r--r--. 1 root root 3 Oct 16 16:50 1.txt



//测试客户端上传文件到ftp服务器上
//结论:匿名用户无法在ftp服务器上总结上传文件
客户端
[root@localhost 1]# echo 12 > 2.txt 
[root@localhost 1]# ll
total 8
-rw-r--r--. 1 root root 3 Oct 16 16:50 1.txt
-rw-r--r--. 1 root root 3 Oct 16 17:03 2.txt
//客户端通过连接上ftp服务器上并且上传客户端的2.txt文件到ftp服务器上
[root@localhost ~]# lftp 192.168.126.131          //此时的默认下载路径为root/Desktop/1
lftp 192.168.126.131:/> put 2.txt 	        	        //上传文件用put命令
put: Access failed: 550 Permission denied. (2.txt)		           //回显结果:权限被拒绝了
//上传文件时的权限被拒绝了的原因是:匿名用户在ftp服务器端默认(不修改配置文件时)只有下载的权限

//解决办法:通过修改配置文件能够实现匿名用户能够在ftp服务器上成功上传文件
服务器上
//让匿名用户可以实现文件的上传,首先改变文件里面的权限
//完成ftp服务器端允许anonymous的上传设置(修改主配置文件)
[root@localhost ftp]# grep -n "anon_upload_enable" /etc/vsftpd/vsftpd.conf        //将该注释解除
29:anon_upload_enable=YES
//为ftp服务器用于上传时所使用的文件夹设置相应权限
[root@localhost ftp]# cd /var/ftp        	       //进入ftp服务器所在位置
[root@localhost ftp]# mkdir -p /var/ftp/upload   //在ftp服务器下(/var/ftp/)创建一个文件夹用于存放用户上传的文件
[root@localhost ftp]# ll
drwxr-xr-x. 2 root root 6 Oct 17 10:47 upload
[root@localhost ftp]# chown ftp /var/ftp/upload  //修改用户主属
[root@localhost ftp]# ll
drwxr-xr-x. 2 ftp root 6 Oct 17 10:47 upload
对selinux安全进行配置
[root@localhost ftp]# setsebool -P allow_ftpd_full_access on
[root@localhost ftp]# setsebool -P tftp_home_dir on
重启服务(ftp服务器配置)
[root@localhost ftp]# systemctl restart vsftpd
[root@localhost ftp]# systemctl restart vsftpd.service 
//实现了匿名用户成功上传文件到ftp服务器端
客户端上传文件
[root@localhost ~]# lftp 192.168.126.131
lftp 192.168.126.131:~> ls
-rw-r--r--    1 0        0               3 Oct 16 08:50 1.txt
drwxr-xr-x    2 0        0               6 Oct 13  2020 pub
drwxr-xr-x    2 14       0               6 Oct 16 13:28 upload
lftp 192.168.126.131:/> cd upload
lftp 192.168.126.131:/upload> put 2.txt 
3 bytes transferred
lftp 192.168.126.131:/upload> 
服务器查看文件
root@localhost ftp]# cd upload
[root@localhost upload]# ll
-rw-------. 1 ftp ftp 19 Oct 17 10:54 2.txt

4、【DNS服务器搭建】

【DNS服务器搭建】

前提:实现得做好本地源的搭建和相关服务的关闭。 
			

服务器端的配置

 ①下载DNS服务器
 //下载DNS服务器
 [root@localhost ~]# yum -y install bind                        //bind为linux当中DNS服务器的名字
 Loaded plugins: fastestmirror, langpacks
 Loading mirror speeds from cached hostfile
 local-yum                                                             | 3.6 kB 00:00:00     
 Resolving Dependencies
 --> Running transaction check
 ---> Package bind.x86_64 32:9.11.4-26.P2.el7 will be installed
 --> Finished Dependency Resolution
 ​
 Dependencies Resolved
 ​
 ==============================================================================================
  Package         Arch             Version                         Repository           Size
 ==============================================================================================
 Installing:
  bind           x86_64           32:9.11.4-26.P2.el7             local-yum           2.3 M
 ​
 Transaction Summary
 ==============================================================================================
 Install 1 Package
 ​
 Total download size: 2.3 M
 Installed size: 5.4 M
 Downloading packages:
 Running transaction check
 Running transaction test
 Transaction test succeeded
 Running transaction
  Installing : 32:bind-9.11.4-26.P2.el7.x86_64                                           1/1 
  Verifying : 32:bind-9.11.4-26.P2.el7.x86_64                                           1/1 
 ​
 Installed:
  bind.x86_64 32:9.11.4-26.P2.el7                                                             
 ​
 Complete!
 
//查看下载好的DNS服务
 [root@localhost ~]# rpm -ql bind                            //查看DNS服务器的配置文件
 /etc/logrotate.d/named
 /etc/named
 /etc/named.conf                                //主配置文件(重要,需要修改)
 /etc/named.iscdlv.key
 /etc/named.rfc1912.zones                                //定义域文件(重要,需要修改)
 /etc/named.root.key
 /etc/rndc.conf
 /etc/rndc.key
 /etc/rwtab.d/named
 /etc/sysconfig/named
 /run/named
 /usr/bin/arpaname
 /usr/bin/named-rrchecker
 /usr/lib/python2.7/site-packages/isc
 /usr/lib/python2.7/site-packages/isc-2.0-py2.7.egg-info
 /usr/lib/python2.7/site-packages/isc/__init__.py
 /usr/lib/python2.7/site-packages/isc/__init__.pyc
 /usr/lib/python2.7/site-packages/isc/__init__.pyo
 /usr/lib/python2.7/site-packages/isc/checkds.py
 /usr/lib/python2.7/site-packages/isc/checkds.pyc
 /usr/lib/python2.7/site-packages/isc/checkds.pyo
 /usr/lib/python2.7/site-packages/isc/coverage.py
 /usr/lib/python2.7/site-packages/isc/coverage.pyc
 /usr/lib/python2.7/site-packages/isc/coverage.pyo
 /usr/lib/python2.7/site-packages/isc/dnskey.py
 /usr/lib/python2.7/site-packages/isc/dnskey.pyc
 /usr/lib/python2.7/site-packages/isc/dnskey.pyo
 /usr/lib/python2.7/site-packages/isc/eventlist.py
 /usr/lib/python2.7/site-packages/isc/eventlist.pyc
 /usr/lib/python2.7/site-packages/isc/eventlist.pyo
 /usr/lib/python2.7/site-packages/isc/keydict.py
 /usr/lib/python2.7/site-packages/isc/keydict.pyc
 /usr/lib/python2.7/site-packages/isc/keydict.pyo
 /usr/lib/python2.7/site-packages/isc/keyevent.py
 /usr/lib/python2.7/site-packages/isc/keyevent.pyc
 /usr/lib/python2.7/site-packages/isc/keyevent.pyo
 /usr/lib/python2.7/site-packages/isc/keymgr.py
 /usr/lib/python2.7/site-packages/isc/keymgr.pyc
 /usr/lib/python2.7/site-packages/isc/keymgr.pyo
 /usr/lib/python2.7/site-packages/isc/keyseries.py
 /usr/lib/python2.7/site-packages/isc/keyseries.pyc
 /usr/lib/python2.7/site-packages/isc/keyseries.pyo
 /usr/lib/python2.7/site-packages/isc/keyzone.py
 /usr/lib/python2.7/site-packages/isc/keyzone.pyc
 /usr/lib/python2.7/site-packages/isc/keyzone.pyo
 /usr/lib/python2.7/site-packages/isc/parsetab.py
 /usr/lib/python2.7/site-packages/isc/parsetab.pyc
 /usr/lib/python2.7/site-packages/isc/parsetab.pyo
 /usr/lib/python2.7/site-packages/isc/policy.py
 /usr/lib/python2.7/site-packages/isc/policy.pyc
 /usr/lib/python2.7/site-packages/isc/policy.pyo
 /usr/lib/python2.7/site-packages/isc/rndc.py
 /usr/lib/python2.7/site-packages/isc/rndc.pyc
 /usr/lib/python2.7/site-packages/isc/rndc.pyo
 /usr/lib/python2.7/site-packages/isc/utils.py
 /usr/lib/python2.7/site-packages/isc/utils.pyc
 /usr/lib/python2.7/site-packages/isc/utils.pyo
 /usr/lib/systemd/system/named-setup-rndc.service
 /usr/lib/systemd/system/named.service
 /usr/lib/tmpfiles.d/named.conf
 /usr/lib64/bind
 /usr/libexec/generate-rndc-key.sh
 /usr/sbin/ddns-confgen
 /usr/sbin/dnssec-checkds
 /usr/sbin/dnssec-coverage
 /usr/sbin/dnssec-dsfromkey
 /usr/sbin/dnssec-importkey
 /usr/sbin/dnssec-keyfromlabel
 /usr/sbin/dnssec-keygen
 /usr/sbin/dnssec-keymgr
 /usr/sbin/dnssec-revoke
 /usr/sbin/dnssec-settime
 /usr/sbin/dnssec-signzone
 /usr/sbin/dnssec-verify
 /usr/sbin/genrandom
 /usr/sbin/isc-hmac-fixup
 /usr/sbin/lwresd
 /usr/sbin/named
 /usr/sbin/named-checkconf                                //检查配置文件(检查命令,重要)
 /usr/sbin/named-checkzone                                //检查域文件(检查命令,重要)
 /usr/sbin/named-compilezone
 /usr/sbin/named-journalprint
 /usr/sbin/nsec3hash
 /usr/sbin/rndc
 /usr/sbin/rndc-confgen
 /usr/sbin/tsig-keygen
 /usr/share/doc/bind-9.11.4
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch01.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch02.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch03.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch04.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch05.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch06.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch07.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch08.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch09.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch10.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch11.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch12.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.ch13.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.html
 /usr/share/doc/bind-9.11.4/Bv9ARM.pdf
 /usr/share/doc/bind-9.11.4/CHANGES
 /usr/share/doc/bind-9.11.4/README
 /usr/share/doc/bind-9.11.4/isc-logo.pdf
 /usr/share/doc/bind-9.11.4/man.arpaname.html
 /usr/share/doc/bind-9.11.4/man.ddns-confgen.html
 /usr/share/doc/bind-9.11.4/man.delv.html
 /usr/share/doc/bind-9.11.4/man.dig.html
 /usr/share/doc/bind-9.11.4/man.dnssec-checkds.html
 /usr/share/doc/bind-9.11.4/man.dnssec-coverage.html
 /usr/share/doc/bind-9.11.4/man.dnssec-dsfromkey.html
 /usr/share/doc/bind-9.11.4/man.dnssec-importkey.html
 /usr/share/doc/bind-9.11.4/man.dnssec-keyfromlabel.html
 /usr/share/doc/bind-9.11.4/man.dnssec-keygen.html
 /usr/share/doc/bind-9.11.4/man.dnssec-keymgr.html
 /usr/share/doc/bind-9.11.4/man.dnssec-revoke.html
 /usr/share/doc/bind-9.11.4/man.dnssec-settime.html
 /usr/share/doc/bind-9.11.4/man.dnssec-signzone.html
 /usr/share/doc/bind-9.11.4/man.dnssec-verify.html
 /usr/share/doc/bind-9.11.4/man.dnstap-read.html
 /usr/share/doc/bind-9.11.4/man.genrandom.html
 /usr/share/doc/bind-9.11.4/man.host.html
 /usr/share/doc/bind-9.11.4/man.isc-hmac-fixup.html
 /usr/share/doc/bind-9.11.4/man.lwresd.html
 /usr/share/doc/bind-9.11.4/man.mdig.html
 /usr/share/doc/bind-9.11.4/man.named-checkconf.html
 /usr/share/doc/bind-9.11.4/man.named-checkzone.html
 /usr/share/doc/bind-9.11.4/man.named-journalprint.html
 /usr/share/doc/bind-9.11.4/man.named-nzd2nzf.html
 /usr/share/doc/bind-9.11.4/man.named-rrchecker.html
 /usr/share/doc/bind-9.11.4/man.named.conf.html
 /usr/share/doc/bind-9.11.4/man.named.html
 /usr/share/doc/bind-9.11.4/man.nsec3hash.html
 /usr/share/doc/bind-9.11.4/man.nslookup.html
 /usr/share/doc/bind-9.11.4/man.nsupdate.html
 /usr/share/doc/bind-9.11.4/man.pkcs11-destroy.html
 /usr/share/doc/bind-9.11.4/man.pkcs11-keygen.html
 /usr/share/doc/bind-9.11.4/man.pkcs11-list.html
 /usr/share/doc/bind-9.11.4/man.pkcs11-tokens.html
 /usr/share/doc/bind-9.11.4/man.rndc-confgen.html
 /usr/share/doc/bind-9.11.4/man.rndc.conf.html
 /usr/share/doc/bind-9.11.4/man.rndc.html
 /usr/share/doc/bind-9.11.4/named.conf.default
 /usr/share/doc/bind-9.11.4/notes.html
 /usr/share/doc/bind-9.11.4/notes.pdf
 /usr/share/doc/bind-9.11.4/sample
 /usr/share/doc/bind-9.11.4/sample/etc
 /usr/share/doc/bind-9.11.4/sample/etc/named.conf
 /usr/share/doc/bind-9.11.4/sample/etc/named.rfc1912.zones
 /usr/share/doc/bind-9.11.4/sample/var
 /usr/share/doc/bind-9.11.4/sample/var/named
 /usr/share/doc/bind-9.11.4/sample/var/named/data
 /usr/share/doc/bind-9.11.4/sample/var/named/my.external.zone.db
 /usr/share/doc/bind-9.11.4/sample/var/named/my.internal.zone.db
 /usr/share/doc/bind-9.11.4/sample/var/named/named.ca
 /usr/share/doc/bind-9.11.4/sample/var/named/named.empty
 /usr/share/doc/bind-9.11.4/sample/var/named/named.localhost
 /usr/share/doc/bind-9.11.4/sample/var/named/named.loopback
 /usr/share/doc/bind-9.11.4/sample/var/named/slaves
 /usr/share/doc/bind-9.11.4/sample/var/named/slaves/my.ddns.internal.zone.db
 /usr/share/doc/bind-9.11.4/sample/var/named/slaves/my.slave.internal.zone.db
 /usr/share/man/man1/arpaname.1.gz
 /usr/share/man/man1/named-rrchecker.1.gz
 /usr/share/man/man5/named.conf.5.gz
 /usr/share/man/man5/rndc.conf.5.gz
 /usr/share/man/man8/ddns-confgen.8.gz
 /usr/share/man/man8/dnssec-checkds.8.gz
 /usr/share/man/man8/dnssec-coverage.8.gz
 /usr/share/man/man8/dnssec-dsfromkey.8.gz
 /usr/share/man/man8/dnssec-importkey.8.gz
 /usr/share/man/man8/dnssec-keyfromlabel.8.gz
 /usr/share/man/man8/dnssec-keygen.8.gz
 /usr/share/man/man8/dnssec-keymgr.8.gz
 /usr/share/man/man8/dnssec-revoke.8.gz
 /usr/share/man/man8/dnssec-settime.8.gz
 /usr/share/man/man8/dnssec-signzone.8.gz
 /usr/share/man/man8/dnssec-verify.8.gz
 /usr/share/man/man8/genrandom.8.gz
 /usr/share/man/man8/isc-hmac-fixup.8.gz
 /usr/share/man/man8/lwresd.8.gz
 /usr/share/man/man8/named-checkconf.8.gz
 /usr/share/man/man8/named-checkzone.8.gz
 /usr/share/man/man8/named-compilezone.8.gz
 /usr/share/man/man8/named-journalprint.8.gz
 /usr/share/man/man8/named.8.gz
 /usr/share/man/man8/nsec3hash.8.gz
 /usr/share/man/man8/rndc-confgen.8.gz
 /usr/share/man/man8/rndc.8.gz
 /usr/share/man/man8/tsig-keygen.8.gz
 /var/log/named.log
 /var/named
 /var/named/data
 /var/named/dynamic
 /var/named/named.ca
 /var/named/named.empty
 /var/named/named.localhost                                //正向解析区域的模板(重要,需要修改)
 /var/named/named.loopback                                        //反向解析区域的模板(重要,需要修改)
 /var/named/slaves
 
②修改DNS相关的四个配置文件
①修改主配置文件
[root@localhost named]# cp /etc/named.conf /etc/named.conf.bak
[root@localhost named]# vim /etc/named.conf
[root@localhost named]# cat /etc/named.conf
 //
 // named.conf
 //
 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
 // server as a caching only nameserver (as a localhost DNS resolver only).
 //
 // See /usr/share/doc/bind*/sample/ for example named configuration files.
 //
 // See the BIND Administrator's Reference Manual (ARM) for details about the
 // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
 ​
 options {
 listen-on port 53 { 127.0.0.1;any; };                                                //使用53端口进行监听。加上“any;”----表示监听局域网内本地和任意所有地址,并给予反馈
 listen-on-v6 port 53 { ::1; };
 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";
 recursing-file "/var/named/data/named.recursing";
 secroots-file   "/var/named/data/named.secroots";
 allow-query     { localhost;any; };                                                //加上“any;”----表示全网都所有设备都可以查找DNS服务器
 ​
 /* 
  - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
  - If you are building a RECURSIVE (caching) DNS server, you need to enable 
    recursion. 
  - If your recursive DNS server has a public IP address, you MUST enable access 
    control to limit queries to your legitimate users. Failing to do so will
    cause your server to become part of large scale DNS amplification 
    attacks. Implementing BCP38 within your network would greatly
    reduce such attack surface 
 */
 recursion yes;
 ​
 dnssec-enable no;                       //no表示不需要校验(由于是我们本地自己搭建的DNS服务器,所以不需要校验)
 dnssec-validation no;                   //no表示不需要校验
 ​
 /* Path to ISC DLV key */
 bindkeys-file "/etc/named.root.key";
 ​
 managed-keys-directory "/var/named/dynamic";
 ​
 pid-file "/run/named/named.pid";
 session-keyfile "/run/named/session.key";
 };
 ​
 logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
 };
 ​
 zone "." IN {
 type hint;
 file "named.ca";
 };
 ​
 include "/etc/named.rfc1912.zones";
 include "/etc/named.root.key";
 ​

[rootlocalhost Desktop]# ls /etc/ l grep "name"                //检索文件(但不需要/建议精确简述)
hostname
named
named.conf
named.conf.bak
named.iscdlv.key
named.rfc1912.zones
named.root.key

 ②//修改定义域文件--正向/反向区域相关的文件(实现域名与IP地址的对应关系)
[root@localhost named]# cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak
[root@localhost named]# vim /etc/named.rfc1912.zones
[root@localhost named]# cat /etc/named.rfc1912.zones 
 // named.rfc1912.zones:
 //
 // Provided by Red Hat caching-nameserver package 
 //
 // ISC BIND named zone configuration for zones recommended by
 // RFC 1912 section 4.1 : localhost TLDs and address zones
 // and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
 // (c)2007 R W Franks
 // 
 // See /usr/share/doc/bind*/sample/ for example named configuration files.
 //
 ​
 zone "localhost.localdomain" IN {
 type master;
 file "named.localhost";
 allow-update { none; };
 };
 ​
 zone "localhost" IN {
 type master;
 file "named.localhost";              //套用该模板进行正向解析改写(需要与正向区域相关文件的文件名对应上)
 allow-update { none; };
 };
 ​
 zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
 type master;
 file "named.loopback";                                                
 allow-update { none; };
 };

 ​//直接在原有模板上操作
 zone "1.16.172.in-addr.arpa" IN {              //修改域名(反向填写,只写网络位的原因:让域名对应多个IP地址)
 type master;
 file "172.16.1.zone";                 //修改文件名(无特殊要求),切记一定需要与反向区域相关文件的文件名对应上
 allow-update { none; };
 };
 ​
 zone "0.in-addr.arpa" IN {            //套用该模板进行反向解析改写(需要与反向区域相关文件的文件名对应上)
 type master;
 file "named.empty";
 allow-update { none; };
 };

 ​//套用以上的模板在末尾再添加一条
 zone "xzm.com" IN {                      //修改域名
 type master;
 file "xzm.com.zone";                  //修改文件名(无特殊要求),切记一定需要与正向区域相关文件的文件名对应上
 allow-update { none; };
 };

 
					
③//改两个模板文件
先进行备份(备份名必须与正向/反向区域相关的文件保持一致)
 [root@localhost Desktop]# cd /var/named/
 [root@localhost named]# ll
 total 16
 drwxrwx---. 2 named named   6 Oct 13 2020 data
 drwxrwx---. 2 named named   6 Oct 13 2020 dynamic
 -rw-r-----. 1 root named 2253 Apr 5 2018 named.ca
 -rw-r-----. 1 root named 152 Dec 15 2009 named.empty
 -rw-r-----. 1 root named 152 Jun 21 2007 named.localhost
 -rw-r-----. 1 root named 168 Dec 15 2009 named.loopback
 drwxrwx---. 2 named named   6 Oct 13 2020 slaves

//注意cp的文件名(cp完之后就可以直接修改xzm.com.zone和172.16.1.zone文件-->原因是上面我们已经将定义域文件进行修改了)
 [root@localhost named]# cp -p named.localhost xzm.com.zone     //cp带参数-p表示复制时将权限也一并复制过去
 [root@localhost named]# cp -p named.loopback 172.16.1.zone
 [root@localhost named]# ll
 total 24
 -rw-r-----. 1 root named 168 Dec 15 2009 172.16.1.zone
 drwxrwx---. 2 named named   6 Oct 13 2020 data
 drwxrwx---. 2 named named   6 Oct 13 2020 dynamic
 -rw-r-----. 1 root named 2253 Apr 5 2018 named.ca
 -rw-r-----. 1 root named 152 Dec 15 2009 named.empty
 -rw-r-----. 1 root named 152 Jun 21 2007 named.localhost
 -rw-r-----. 1 root named 168 Dec 15 2009 named.loopback
 drwxrwx---. 2 named named   6 Oct 13 2020 slaves
 -rw-r-----. 1 root named 152 Jun 21 2007 xzm.com.zone
 ​
 ​//进行编辑
 [root@localhost named]# vim xzm.con.zone 
 [root@localhost named]# vim 192.16.1.zone 

//修改后的文件内容如下: 
//正向解析文件:
 [root@localhost named]# cat xzm.com.zone 
 $TTL 1D                    //TTL:生存值/生存周期。TTL 1D代表生存值为一天
 @ IN SOA xzm.com. rname.invalid. (                          //@修改成xzm.com.。原@代表当前域。在xzm.com.末尾必须加上一个点,必须要将根域名补上。
 0; serial//域名后加点的原因:在公网服务器上域名末尾会主动补齐末尾点。而现在在自己的服务器上,由于没有公网服务器相关发服务所以必须加点
 1D; refresh
 1H; retry
 1W; expire
 3H ); minimum
 @        NS        dns.xzm.com.        //将@修改成dns.xzm.com.。然后在该行首处加上@表示要写一个当前域。
 dns        A        192.168.126.131    //A:一个A表示是一个IPv4的地址。 192.168.126.131是本台DNS服务器所对应的IP地址
 www        A        172.16.1.1          //www表示要写一个阿帕奇网站之类的。 172.16.1.1是xzm.com.对应的IP地址
//实现将xzm.com.解析成172.16.1.1
//反向解析文件:
 [root@localhost named]# cat 172.16.1.zone 
 $TTL 1D
 @IN SOA xzm.com. rname.invalid. (                //xzm.com.:最后一个点表示根域名
 0; serial
 1D; refresh
 1H; retry
 1W; expire
 3H ); minimum
 @        NS        dns.xzm.com.
 dns        A        192.168.126.131
 1        PTR        xzm.com.                                //PTR:反向解析。这里写主机名,域dns对应

//域名解析文件介绍:
$TTL:缓存的生存周期
@:当前域
IN:互联网
SOA:开始授权
NS:DNS服务端
A:lPv4正向记录
AAAA:lPv6正向记录

③检查命令			
//检查命令
 [root@localhost named]# named-checkconf /etc/named.conf 
 [root@localhost named]# named-checkconf /etc/named.rfc1912.zones 
 [root@localhost named]# named-checkzone xzm.com.zone xzm.com.zone 
 zone xzm.com.zone/IN: loaded serial 0
 OK
 [root@localhost named]# named-checkzone 172.16.1.zone 172.16.1.zone 
 zone 172.16.1.zone/IN: loaded serial 0
 OK

 ④重启dns服务	
[root@localhost named]# systemctl restart named
         
客户端配置
[root@localhost ~]# cat /etc/resolv.conf             //当前整个系统里的DNS缓存
# Generated by NetworkManager
nameserver 218.85.157.99
nameserver 114.114.114.114                                                                                                                                                                                     //下面命令是将本地DNS服务器的地址指向已搭建完成的DNS服务器地址
[root@localhost ~]# echo nameserver 192.168.126.131 > /etc/resolv.conf
[root@localhost ~]# nslookup www.xzm.com                    //测试DNS服务器的小工具
Server:                192.168.126.131
Address:        192.168.126.131#53
Name:        www.xzm.com
Address: 172.16.1.1
[root@localhost ~]# nslookup 172.16.1.1
1.1.16.172.in-addr.arpa        name = xzm.com.


//kali linux 测试:
 ┌──(root㉿kali)-[~]
 └─# cat /etc/resolv.conf 
 # Generated by NetworkManager
 search localdomain
 nameserver 192.168.126.2
                                                                              
 ┌──(root㉿kali)-[~]
 └─# echo nameserver 192.168.126.131 > /etc/resolv.conf 
                                                                              
 ┌──(root㉿kali)-[~]
 └─# nslookup www.xzm.com
 Server:         192.168.126.131
 Address:       192.168.126.131#53
 ​
 Name:   www.xzm.com
 Address: 172.16.1.1
 ​
                                                                              
 ┌──(root㉿kali)-[~]
 └─# nslookup 172.16.1.1 
 1.1.16.172.in-addr.arpa name = xzm.com.

15、Linux日志审计

1、日志文件的功能和分类

日志的功能

用于记录系统、程序运行中发生的各种事件。

通过阅读日志,有助于诊断和解决系统故障日志。

文件的分类

1、内核及系统日志:由系统 syslog 统一进行管理,日志格式基本相似。

2、用户日志/服务日志:记录系统用户登录及退出系统的相关信息。(启动时必须要有的服务信息-ssh/dhcp)

3、程序:由各种应用程序独立管理的日志文件,记录格式不统一。(额外下载的程序)

日志属于内核的一部分。 
内核:在启动的过程当中,文件系统是后加载。但没加载文件系统的话则数据无法进行处理,无法将文件系统加载之前的数据进行关联。
内核日志:调用内核时产生的日志消息,会单独存放在内核日志当中。
数据的管理方式通过文件系统实现。
syslog(回调函数):是日志记录的统一标准。
syslogd/dmesg进程一般是可以被人为终止、调用的,但守护进程不接受任何终端控制(随着系统开启而开启,随着系统关闭而关闭)。

2、日志文件保存位置和文件介绍

Linux操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下。

一部分程序共用一个日志文件,一部分程序使用单个日志文件,而有些大型服务器程序由于日志文件不止一个,所以会在/var/log/目录中建立相应的子目录来存放日志文件,这样既保证了日志文件目录的结构清晰,又可以快速定位日志文件。

有相当一部分日志文件只有root用户才有权限读取,这保证了相关日志信息的安全性。

Linux日志文件常用的保存方式-->回滚切割:将日志分割为一部分一部分来进行存储,这样子的好处是单个日志文件量不会很大,加载速度不会很慢,也方便查看。

日志文件保存位置

/var/log/目录下的日志文件(日志保存位置默认位于/var/log目录下):(知道、了解)
/var/log/boot.log ->包含系统启动时的日志/该文件记录了系统在引导过程中发生的事件
/var/log/utmp ->包含登录退出信息
/var/log/secure ->包含验证和授权信息/Linux系统安全日志,记录用户和工作组的情况、用户登陆认证情况。		(重要)
/var/log/dpkg.log ->包含安装或dpkg命令清除软件包的日志
/var/log/kern.log ->包含内核产生的日志,有助于在定制内核时解决问题
/var/log/Xorg.x.log ->来自X的日志信息
/var/log/alternatives.log ->更新替代信息都记录在这个文件中
/var/log/cups ->涉及所有打印信息的日志
/var/log/anaconda.log ->在安装Linux时,所有安装信息都储存在这个文件中
/var/log/yum.log ->包含使用yum安装的软件包信息
/var/log/cron ->每当cron进程进行一个工作,就会将相关信息记录在此文件中/计划任务	(重要)

文件介绍

主要日志文件介绍:
日志文件					描述
/var/log/cron 		记录了系统定时任务相关的日志
/var/log/cups		记录打印信息的日志
/var/log/dmesg		记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/mailog		记录邮件信息
/var/log/message	记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件
/var/log/btmp		记录错误登录日志,这个文件是二进制文件
/var/log/lastlog	记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件
/var/log/wtmp		永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件
/var/log/utmp 		记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询
/var/log/secure		记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中



内核及公共消息日志(大部分程序的运行日志-一些错误信息)/var/log/messages
[root@localhost log]# cd /var/log
[root@localhost log]# cat ./messages 
[root@localhost log]# tail -f /var/log/messages 	//tail -f表示显示最后/最近的十条消息(用于报错时的检查)
守护进程相关的日志(计算机启动相关的内核日志):
[root@localhost log]# cat ./dmesg

3、管理日志服务的配置文件

//定义日志的存放过程以及日志的存放位置,在下面的文件目录下:
[root@localhost ~]# cat /etc/rsyslog.conf		//查看日志存放的规定文件(管理日志的配置文件)
# rsyslog configuration file

# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

#### MODULES ####

# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
#$ModLoad imklog # reads kernel messages (the same are read from journald)
#$ModLoad immark  # provides --MARK-- message capability

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514


#### GLOBAL DIRECTIVES ####

# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog

# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on

# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf

# Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
$OmitLocalLogging on

# File to store the position in the journal
$IMJournalStateFile imjournal.state


#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console
例:与kern.* 服务相关的均放入/dev/console文件目录下。
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log


# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList   # run asynchronously
#$ActionResumeRetryCount -1    # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###

4、内核及系统日志

这种日志数据由系统服务 rsyslog 统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。
系统中有相当一部分程序会把自己的日志文件交由 rsyslog 管理,因而这些程序使用的日志记录也具有相似的格式。

5、日志消息的级别

日志消息的级别(事件处理的轻重缓急):
0  EMERG(紧急):会导致主机系统不可用的情况
1  ALERT(警告):必须马上采取措施解决问题
2  CRIT(严重):比较严重的情况
3  ERR(错误):运行出现错误(一般能处理的日志等级)(三级及三级以下就越来越严重了)
4  WARNING (提醒):可能会影响系统功能的事件
5  INFO(信息):一般信息
6  DEBUG(调试):程序或系统调试信息等


日志消息等级3:
[root@localhost ~]# systemctl restart NetworkManager	//当网卡配置出现问题时可以选择将该网络管理关闭,再重启网卡

6、日志记录的一般格式

看消息日志:(tail -f表示显示最后的十条消息)
基本解读:①时间 ②主机名 ③服务/进程 ④消息
systemd----表示内核进程
[root@localhost ~]# tail -f /var/log/messages
Oct 21 19:26:24 localhost pulseaudio: Most likely this is a bug in the ALSA driver 'snd_ens1371'. Please report this issue to the ALSA developers.
Oct 21 19:26:24 localhost pulseaudio: We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail.
Oct 21 19:30:01 localhost systemd: Started Session 4 of user root.
Oct 21 19:40:01 localhost systemd: Started Session 5 of user root.
Oct 21 19:42:14 localhost systemd: [/usr/lib/systemd/system/firstboot-graphical.service:14] Support for option SysVStartPriority= has been removed and it is ignored
Oct 21 19:42:14 localhost systemd: [/usr/lib/systemd/system/mdcheck_start.timer:12] Failed to parse calendar specification, ignoring: Sun *-*-1..7 1:00:00
Oct 21 19:42:14 localhost systemd: mdcheck_start.timer lacks value setting. Refusing.
Oct 21 19:42:28 localhost systemd: [/usr/lib/systemd/system/firstboot-graphical.service:14] Support for option SysVStartPriority= has been removed and it is ignored
Oct 21 19:42:28 localhost systemd: [/usr/lib/systemd/system/mdcheck_start.timer:12] Failed to parse calendar specification, ignoring: Sun *-*-1..7 1:00:00
Oct 21 19:42:28 localhost systemd: mdcheck_start.timer lacks value setting. Refusing.

7、用户日志分析

暂无

8、程序日志分析

暂无

9、日志服务器搭建

Linux日志服务器搭建

10、补充

[root@localhost ~]# systemctl restart network       //重启下网络    
[root@localhost ~]# tail -n 10 /var/log/messages | grep network    
//读取最近10行消息发现重启网卡记录已经在日志文件中当中存在(可用于网络服务的排错) 
Oct 21 20:10:29 localhost systemd: Started LSB: Bring up/down networking.


检索日志方法:
tail (默认查看后10行)	【tail -f [路径]】
	-n x:读取最近x行消息
	-Ax:关键词所在行与其下x行消息
	-Bx:关键词所在行与其上x行消息
tail -f file.log 	//持续输出日志,可添加 | grep “关键字”
tail -n 100 file.log | grep “关键字”		//输出文件的后100行中包含的关键字的行(-n 100 即 –lines=100)
tail -n 100 file.log | grep “关键字” -A10		//输出文件的后100行中包含关键字的行和该行的后10行
tail -n 100 file.log | grep “关键字” -B10		//输出文件的后100行中包含关键字的行和该行的前10行
tail -n 100 file.log | grep “关键字” –B10-A10		//输出文件的后100行中包含关键字的行和该行的前后10行


[root@localhost ~]# systemctl list-unit-files | grep enabled	//显示所有服务的列表,筛选出所有可用的服务


lastlog命令解读:
[root@localhost ~]# lastlog -t 1000
Username         Port     From             Latest
root             :0                        Wed Sep 28 20:28:04 +0800 2022
gdm              :0                        Wed Sep 28 20:27:53 +0800 2022
xzm              :0                        Wed Sep 28 20:09:29 +0800 2022
reboot   system boot  3.10.0-1160.el7. Wed Sep 28 20:20 - 20:12 (1+23:51) 
①用户名②终端③来源④开始时间⑤结束时间⑥持续时间
3.10.0-1160.el7.:内核版本
:0:本地登录
pts:是pty的实现方法/控制终端
tty:终端;虚拟终端pty(pseudo-tty)
lastb:登录失败日志
last:登录成功日志 , 还可以查看用户在线状态


[root@localhost ~]# lastlog -t 2	//最近两天用户登录消息 
[root@localhost ~]# w		//显示当前登录用户及这些用户正在做什么的命令。它同时也能显示系统运行时长,当前系统时间和系统平均负载情况。
[root@localhost ~]# lastb	//last与lastb命令用来列出目前与过去登录系统的用户相关信息。
[root@localhost ~]# ss      //ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
[root@localhost ~]# stat bbb  	//bbb为文件名(stat:时间命令)
Access: 2022-10-21 20:38:00.289546112 +0800	//最近一次访问
Modify: 2022-10-21 20:38:02.676545904 +0800	//最近一次修改
Change: 2022-10-21 20:38:02.676545904 +0800	//最近一次改变(chmod、chown)

16、Linux安全加固

安全加固思路

账户安全 -> 密码策略 -> 当前开放的服务是否存在高危服务 -> 排查当前的系统中是否存在内核漏洞 -> 排查主机所在信息系统所对应的管理制度是否恰当。

所有修改均需要root账号下,修改前务必先备份,备份命名建议使⽤"⽂件名.日期.bak或⽂件名.bak"

1、账号和口令

①禁用或删除无用账号
#目的:减少系统无用账号,降低安全风险。
操作步骤:
使用命令 userdel <用户名> 删除不必要的账号。
使用命令 passwd -l <用户名> 锁定不必要的账号。
使用命令 passwd -u <用户名> 解锁必要的账号。


②检查特殊账号
#目的:检查是否存在空口令和root权限的账号。确认UID为零的账号只有root账号。
操作步骤:
查看空口令和root权限账号,确认是否存在异常账号:
使用命令 awk -F: '($2=="")' /etc/shadow 查看空口令账号。
使用命令 awk -F: '($3==0)' /etc/passwd 查看UID为零的账号。
加固空口令账号:
使用命令 passwd <用户名> 为空口令账号设定密码。


③添加口令策略
#目的:加强口令的复杂度等,降低被猜解的可能性。
1.使用命令 vim /etc/login.defs 修改密码策略配置文件。
操作步骤:
cp /etc/login.defs /etc/login.defs.bak
PASS_MAX_DAYS 90 	#密码最大使用期限	--等保要求密码过期时间不能大于90天
PASS_MIN_DAYS 0  	#密码最少使用天数 	--多少天后可以更改密码,至少1天
PASS_MIN_LEN  5  	#密码最小长度       --至少8位,且必须包含字母,数字和字符中每样至少一个
PASS_WARN_AGE 7 	#密码到期前警告天数
以上密码周期修改需要重启系统才能⽣效,但不影响已创建的⽤户。

2.使用chage命令修改用户设置。
//例如,chage -m 0 -M 30 -E 2000-01-01 -W 7 <用户名>表示将此用户的密码最长使用天数设为30,最短使用天数设为0,密码2000年1月1日过期,过期前七天警告用户。
//设置连续输错三次密码,账号锁定五分钟。使用命令vim /etc/pam.d/common-auth修改配置文件,在配置文件中添加 auth required pam_tally.so onerr=fail deny=3 unlock_time=300。
命令解读:
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
vim /etc/pam.d/system-auth
password requisite pam_cracklib.so minlen=8 ucredit=-2 lcredit=-1 dcredit=-4 ocredit=-1 在pam_cracklib.so后⾯配置参数 如果原来就有配置,可以不⽤改
deny:允许输错密码次数
unlock_time:解锁时间,单位秒
account required pam_tally2.so deny=5 unlock_time=300

3.修改密码复杂度设置
Debian/Ubuntu:修改⽂件vim /etc/pam.d/common-password
CentOS/RedHat/Fedora:修改⽂件vim /etc/pam.d/system-auth
password '[tab]' requisite '[tab]' pam_cracklib.so difok=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 
说明:
# difok=3 允许的新、旧密码相同字符的个数为3
# minlen=8 最小长度为8
# ucredit=-1 限制新密码中最少有1个大写英文字符 负数表示最少,正数表示最多
# lcredit=-1 限制新密码中最少有1个小写英文字符
# dcredit=-1 限制新密码中最少有1个数字字符
# ocredit=-1 限制新密码中最少有1个标点字符
# 注:这个密码强度的设定只对普通用户有限制功能,root用户无论修改root的密码还是修改普通用户的时候,不符合强度设置依然可以设置成功


④限制用户su
#目的:限制能su到root的用户。
操作步骤:
使用命令 vim /etc/pam.d/su修改配置文件,在配置文件中添加行。
例如,只允许test组用户su到root,则添加 auth required pam_wheel.so group=test。


⑤禁止root用户直接登录
#目的:限制root用户直接登录。
操作步骤:
创建普通权限账号并配置密码,防止无法远程登录。
使用命令 vim /etc/ssh/sshd_config修改配置文件将PermitRootLogin的值改成no,并保存,然后使用service sshd restart重启服务。

2、服务、端口

①关闭/禁用不必要的服务
#目的:关闭不必要的服务(如普通服务和xinetd服务),降低风险。
1.操作步骤:
使用命令 systemctl disable <服务名> 设置服务在开机时不自动启动。
说明:对于部分老版本的Linux操作系统(如CentOS 6),可以使用命令chkconfig --level <init级别> <服务名> off设置服务在指定init级别下开机时不自动启动。需要关闭的服务有 cups, telnet, vsftpd, rlogin, rsh, printer, sendmail, ypbind, kshell, lpd, ident, tftp, time, ntalk, bootps, chargen, nfs, daytime, nfslock,echo, discard, klogin chkconfig --list

2.关闭服务
redhat 6.x 版本:service vsftpd stop
redhat 8.x 版本:systemctl stop vsftpd

3.关闭开机启动
chkconfig vsftpd off


②SSH服务安全
#目的:对SSH服务进行安全加固,防止暴力破解成功。
操作步骤:
使用命令 vim /etc/ssh/sshd_config 编辑sshd服务端的配置文件。
1.不允许root账号直接登录系统:设置PermitRootLogin的值为no。//禁止root账户登录
2.修改SSH使用的协议版本:设置Protocol的版本为 2。
3.修改允许密码错误次数(默认6次):设置MaxAuthTries的值为 3。
4.配置文件修改完成后,重启sshd服务生效。


③黑白名单文件
远程登录方式必须使用密文传输,远程登录时不能使用默认管理员账户进行登录(如Linux系统的root,Windows系统的administrator)
SSH[密文-符合];Telnet[明文-不符合]
Liunx白名单文件:/etc/hosts.allow
Liunx黑名单文件:/etc/hosts.deny
相比于Linux的其他配置文件,改黑白名单文件可以即时生效。且白名单的优先级大于黑名单。
黑白名单添加格式:协议:地址


④关闭/禁用不必要的端口
1.需要禁⽤ 21 ftp 23 telnet 80:netstat -an | grep LISTEN
2.查看端⼝使⽤的PID:lsof -i:21
3.关闭对应的服务:service vsftpd stop
4.直接杀死进程:kill -9 pid
5.关闭512、513、514端⼝
systemctl stop rsh.socket # 514 
systemctl stop rlogin.socket # 513
systemctl stop rexec.socket # 512
systemctl disable rsh.socket
systemctl disable rlogin.socket
systemctl disable rexec.socket
systemctl disable xinetd
systemctl stop xinetd
6.关闭53端⼝(DNS服务)
systemctl stop named.service
systemctl disable named.service
systemctl stop dnsmasq
systemctl disable dnsmasq
7.关闭25端⼝
systemctl disable postfix
systemctl stop postfix
gateway=`netstat -rn | grep 0.0.0.0 | awk '{ if($1=="0.0.0.0") {print $2} }'`

3、文件系统

①设置umask值
#目的:设置默认的umask值,增强安全性。
操作步骤:
使用命令 vim /etc/profile 修改配置文件,添加行 umask 027, 即新创建的文件属主拥有读写执行权限,同组用户拥有读和执行权限,其他用户无权限。


②设置登录超时
#目的:设置系统登录后,连接超时时间,增强安全性。
操作步骤:
使用命令 vim /etc/profile 修改配置文件,将以 TMOUT= 开头的行注释,设置为TMOUT=180,即超时时间为三分钟。


③三权分立
#目的:等保要求禁用默认账户和超级管理员账户,并设置三权分立账户
root超级管理员-->禁用
创建三权分⽴账户
useradd sysadmin(安全员--负责安全策略--sec)
useradd audadmin(系统管理员--系统配置--sys)
useradd secadmin(审计员--日志审查--audit)
设置密码:密码不得与⽤户名⼀样,需含⼤写字⺟,特殊符号,数字。(设置了密码,该账户才可正常登入)
passwd sysadmin
passwd audadmin
passwd secadmin

4、日志

①syslogd日志
#目的:启用日志功能,并配置日志记录。
操作步骤:
Linux系统默认启用以下类型日志:
系统日志(默认)/var/log/messages
cron日志(默认)/var/log/cron
安全日志(默认)/var/log/secure
注意:部分系统可能使用syslog-ng日志,配置文件为:/etc/syslog-ng/syslog-ng.conf 可以根据需求配置详细日志。


②记录所有用户的登录和操作日志
#目的:通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。
操作步骤:
运行 [root@xxx /]# vim /etc/profile打开配置文件。
在配置文件中输入以下内容:
 history
 USER=`whoami`
 USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
 if [ "$USER_IP" = "" ]; then
 USER_IP=`hostname`
 fi
 if [ ! -d /var/log/history ]; then
 mkdir /var/log/history
 chmod 777 /var/log/history
 fi
 if [ ! -d /var/log/history/${LOGNAME} ]; then
 mkdir /var/log/history/${LOGNAME}
 chmod 300 /var/log/history/${LOGNAME}
 fi
 export HISTSIZE=4096
 DT=`date +"%Y%m%d_%H:%M:%S"`
 export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
 chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null
运行 [root@xxx /]# source /etc/profile 加载配置生效。
注意:/var/log/history是记录日志的存放位置,可以自定义。
通过上述步骤,可以在/var/log/history目录下以每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录IP、时间的日志文件,包含此用户本次的所有操作(root用户除外)。同时,建议使用OSS服务收集存储日志。


③审计功能查询:
service rsyslog status
service auditd status
审计功能如果想要符合等保需求如下:
1.审计记录大于6个月
2.审计日志必须转发到日志服务器进行备份  [通过U盘进行备份也可以]
3.审计记录必须包含重要的参数(时间,用户,事件的成败)
4.审计功能要保证除了审计员以外的账户无法关闭


④查看⽇志记录是否开启,默认情况下系统开启了syslogd和audit服务,可通过以下⽅法查询:
ps -ef syslogd
ps -ef audit

5、内核漏洞

①系统漏洞
查看系统漏洞是否存在,如果有是否有修补,是否定期扫描(不需要人为排查)
工具:nessus漏洞扫描工具对内网主机进行扫描


②杀软
系统中是否存在可以杀毒和防止入侵(入侵检测)的软件
windows----火绒/360/腾讯电脑管家/瑞星
Linux------ClamAV【开源】

6、其他

1、查看内核版本
①[root@localhost ~]# cat /proc/version【CentOS7版本】
Linux version 3.10.0-1160.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020
②[root@localhost ~]# uname -a【CentOS7版本】
Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux


2、查看操作系统版本
lsb_release -a
cat /etc/issue
cat /etc/release


3、登录超时设置root下配置
cp /etc/profile /etc/profile.bak
vim /etc/profile
最后⾯添加⼀⾏TMOUT=600


4、⼿动锁定和解锁(passwd为小写参数)
usermod -L ⽤户名 锁定
usermod -U ⽤户名 解锁


5、限源访问
cp /etc/hosts.allow /etc/hosts.allow.bak
cp /etc/hosts.deny /etc/hosts.deny.bak


6、查看主机IP地址 ifconfig 只允许本⽹段访问
vim /etc/hosts.allow
sshd:192.168.1.0/24:allow
vim /etc/hosts.deny
sshd:all

7、等保测评Linux测评命令

①账户策略:
1.cat /etc/shadow查看口令,查看账户
2.cat /etc/ssh/ssh_config permitemptypasswords 注释或者后面加no 不允许空口令远程登录
3.cat /etc/pam.d/system-auth 查看密码复杂度
grep pam_cracklib.so模块查看,centos7之后是pam_pwquality.so模块。限制root用户,添加 enforce_for_root
4.cat /etc/login.defs 查看口令更换周期。修改vi /etc/login.defs设置仅影响创建用户,而不影响现有用户。
或chage -l 用户名 查看口令修改周期。
配置:chage -M 天数 用户名 —修改某用户的最大修改期限
chage -m 最小期限 -w 到期前提醒。
配置与passwd和shadow有冲突时,以passwd和shadow文件为准。
②登录策略:
5.cat /etc/pam.d/system-auth和/etc/pam.d/sshd 查看登录失败策略
在#%PAM-1.0下的前两行是否有auth required pam_tally2.so onerr=fail deny=6 unlock_time=300 even_deny_root root_unlock_time=300
注意:必须是头两行。登录失败配置详解
6.cat /etc/profile 查看登录超时是否自动退出
查看是否有TMOUT=300
注意:必须是TMOUT,不能是timeout,TIMEOUT等。 登录超时策略配置
7.service --status-all | grep sshd 查看是否采用ssh加密方式管理
centos7可用systemctl --type=service | grep sshd命令
8.netstat -an | grep 22 查看ssh服务对应端口是否打开
9.ps -e | grep sshd 查看是否开启ssh服务
10.systemctl is-enabled telnet.socket查看telnet服务是否可用
11.ls -l /etc/passwd,查看文件的权限值
12. id 0查看uid=0的用户有哪些
13. ps -ef | grep java 查看中间件运行用户,非root用户运行
14. cat /etc/ssh/sshd_config 是否允许root远程登录;文件中的permitrootloginno 表示不允许root账户远程登录
15. systemctl status rsyslog.service查看服务是否开启
16. cat /etc/audit/audit.rules对passwd等文件地读写执行产生审计日志。
③配置策略:
17. cat /etc/rsyslog.conf,是否成功指向日志服务器。
18. cat /etc/redhat-release 查看Linux版本
19. uname -a 查看内核版本
20. systemctl list-unit-files命令列出所有可用单元。查看是否有多余组件和应用程序。
21. yum list installed 查看已安装的rpm包
22. netstat -antpl | grep LISTEN 查看有无多余端口
23. cat /etc/hosts.at llow /etc/hosts.deny 是否合理限制访问地址 配置策略   

17、Linux应急响应

1、入侵排查思路

账号安全 -> 历史命令 -> 检查异常端口 -> 检查异常进程 -> 检查开机启动项 -> 检查定时任务 -> 检查服务 -> 检查异常文件。

2、操作步骤

1、账户安全

1、查询特权用户特权用户(uid 为0)
①(以冒号为分隔符,打印文件当中第三个内容(uid)为0的第一列信息)
[root@localhost ~]# awk -F ":" '$3==0{print $1}' /etc/passwd
root
②(打印符合条件的整列)
[root@localhost ~]# awk -F ":" '$3==0{print $0}' /etc/passwd(补充)
root:x:0:0:root:/root:/bin/bash

2、查询可以远程登录的帐号信息(除了root用户外,其余用户没有密码就无法登入)
(当查询的文件当中密码位出现$1或$6时(\$:转义成字符串$;$6$:sha加密,$1$:md5加密),将改行全打印出来)
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
root:$6$gzV7F7XygZZLiLMs$q3xIpzL6.tLwg.PkqiIynm2gtkED2pu7oRLlUvfk516Pt/nVgnmISbMW0HOeHoQbjx1bcpD/xpKaL1xwT6dnx.::0:99999:7:::
xzm:$6$kC0HzY8pch7Wdaxx$8HOwj8.INvh8JF3bfrf/GUcWM8BkdDnJeZuSXXsbtb2vglnTTwW3AUWaZ4Ujih0qjlnzONkzQob/j1x4.zfXv0::0:99999:7:::

3、除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
(是否存在用户有sudo权限;查看文件时过滤注释和空行,且只看该字符串ALL=(ALL))
[root@localhost ~]# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
root	ALL=(ALL) 	ALL
%wheel	ALL=(ALL)	ALL
sudo命令:赋予一次root用户命令的权限。(暂时将该命令用root身份运行)
%wheel,是个组,该组成员具有sudo权限。

4、禁用或删除多余及可疑的帐号(一般都是先禁用账户,而不直接删除)
①usermod命令(大写)
	-L(Lock):表示锁定用户(临时锁定用户),被锁定用户的密码前出现“!”表示无法登录(与passwd相似)
	-U(Unlock):表示解除对用户的锁定
usermod -L/U user:锁定帐号(letc/shadow第二栏为!开头)/解锁账号
userdel -r user:将删除user用户,并且将/home目录下的user目录一并删除(userdel user 删除user用户)
②passwd命令(小写)
	-l:暂时锁定用户(被锁定的用户不能使用密码登入--密码前加“!!”),但对root用户无效,照样可以登入。仅root用户可用
	-u:解锁用户。仅root用户可用
	-S:查询用户密码的密码状态。仅root用户可用
passwd -S user	查看账户密码状态 

2、历史命令

Linux当中以点开头的都是隐藏文件。使用命令:ls/ll -a:显示所有信息

1、(黑客一般只删除自己操作的命令记录)
[root@localhost ~]# history		//查看历史命令
[root@localhost ~]# history -c		//清空所有历史命令(但这只是一个缓存文件)
//在每个用户的家目录下都会存放一个历史命令的隐藏文件。通过.bash_history文件查看当前帐号执行过的真正所有系统命令。
[root@localhost ~]# cd ~		//进入用户的家目录
[root@localhost ~]# ls -a		//显示所有的隐藏文件
.                .bash_logout   .config  Documents      initial-setup-ks.cfg  Public     .viminfo
..               .bash_profile  .cshrc   Downloads      .local                .tcshrc
anaconda-ks.cfg  .bashrc        .dbus    .esd_auth      Music                 Templates
.bash_history    .cache         Desktop  .ICEauthority  Pictures              Videos
[root@localhost ~]# less .bash_history		//查看历史命令
[root@localhost ~]# echo "" > .bash_history 	//使用重定向删除所有的历史命令(需要重新启动该shell环境才生效)
环境文件:
/etc/profile:全局环境文件(针对全体)
.bash_profile:个人的环境文件(针对个人;在用户的家目录下的隐藏文件)


2、为历史的命令增加登录的IP地址、执行命令时间等信息:
//1)保存1万条命令(在该文件下将开头是HISTSIZE行的信息匹配上,将匹配上的所有消息替换成HISTSIZE=10000)
sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile	(安全加固文件)
//2)在/etc/profile的文件尾部添加如下行数配置信息:
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`	//筛选该用户是否为当前用户
//3)source /etc/profile让配置生效

命令解读:
[root@localhost ~]# who
root     :0           2022-09-28 20:28 (:0)		#该行表示本地登入记录(有登入都要该记录)
root     pts/0        2022-10-20 14:56 (:0)		#pts/0:表示打开第一个会话窗口
[root@localhost ~]# who -u	(显示进程号)
root     :0           2022-09-28 20:28   ?          1873 (:0)
root     pts/0        2022-10-20 14:56   .         57402 (:0)
[root@localhost ~]# who -u am i		//锁定当前用户的登入信息/只回显了当前用户的消息
root     pts/0        2022-10-20 14:56   .         57402 (:0)
[root@localhost ~]# who -u am i 2>/dev/null		//'>'标准错误;出现错误时直接放到/dev/null文件下,不回显
root     pts/0        2022-10-20 14:56   .         57402 (:0)
[root@localhost ~]# who -u am i 2>/dev/null | awk '{print $NF}'
(:0)		//只回显了最后一条信息
[root@localhost ~]# who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'
:0	//这里的-e多点编辑和-i效果相同;[()]表示锁定中括号当中的小括号内的内容;s/[()]//g表示将每行的小括号当中的的内容替换为一个空内容。“:0”表示本地登入
[root@localhost ~]# USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`	//将反引号当中的内容解读完成之后赋值给一个变量USER_IP

标准输入与输出

输出:标准输出、标准错误
[root@localhost Desktop]# cat awk.txt
123		//标准输出(output)【1>常常将1省略只写>】:一个命令字或者程序正常运行的结果
[root@localhost Desktop]# ca awk.txt
bash: ca: command not found...		//标准错误(error)【2>/dev/null(标准错误的2>后不能省略)】:一种状态或者错误的信息
Similar commands are::
'ac'
'sa'
输入:
标准输入(input)【0<】:连接至输入设备(键盘等)

使用方法:
1.标准输出-1>常常省略(输出)
2.标准错误-吃掉错误报告(标准错误使用--输出)
[root@localhost Desktop]# who -u am i
root     pts/0        2022-10-20 14:56   .         57402 (:0)
[root@localhost Desktop]# wo -u am i 2>/dev/null
3.标准输入(输入)
[root@localhost Desktop]# cat awk.txt 		
123
[root@localhost Desktop]# cat 0< awk.txt 
123
//Linux当中cat定义为表示标准输入命令字。当cat后面不加参数时为键盘输入;cat后面加东西/文件时为将文件标准输入后再标准输出

cat创建新文件:
[root@localhost Desktop]# cat > cat.txt
123132131
^C		//在另一行终止进程
[root@localhost Desktop]# cat cat.txt
123132131

3、检查异常端口、进程

①使用netstat网络连接状态命令,分析可疑端口、IP、PID
命令:netstat -antlp | more

②查看下pid所对应的进程文件路径
命令:ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 为对应的pid 号)

③检查异常进程,使用ps命令,分析进程
命令:ps aux | grep pid

4、检查开机启动项

查看运行级别命令runlevel
运行级别		含义	(七个运行模式)
0			关机
1			单用户模式,可以想象为windows的安全模式,主要用于系统修复
2			不完全的命令行模式,不含NFS服务
3			完全的命令行模式,就是标准字符界面
4			系统保留
5			图形模式/桌面模式(GUI界面)
6			重启动

开机启动配置文件:
/etc/rc.local
/etc/rc.d/rc[0~6].d

切换运行模式

临时切换运行模式:(N 5--图像模式下的命令模式)
ctrl+alt=f3	//切换3级别运行模式
ctrl+alt=f1	//切换回来
永久切换运行模式:(5 3--图形模式切换成永久命令模式)
init 3/5	//切换运行级别(在命令模式下输入init 5--返回图形化界面--命令模式更安全,可操作空间变少)

查看默认允许模式:
[root@localhost ~]# systemctl get-default 
graphical.target		//g开头表示桌面允许模式
systemctl set-default multi-user.target 	//设置默认运行级别(进入3模式)
systemctl:内核管理工具

5、入侵排查

重点关注以下目录(计划目录)中是否存在恶意脚本:
	/var/spool/cron/*
	/etc/crontab
	/etc/cron.d/*
	/etc/cron.daily/*
	/etc/cron.hourly/*
	/etc/cron.monthly/*
	/etc/cron.weekly/
	/etc/anacrontab
	/var/spool/anacron/*
小技巧:
more /etc/cron.daily/* 查看目录下所有文件

6、查询已安装的服务

1、RPM包安装的服务
chkconfig --list 查看服务自启动状态,可以看到所有的RPM包安装的服务
ps aux | grep crond 查看当前服务
系统在3与5级别下的启动项
chkconfig --list | grep "3:on\|5:on"

2、源码包安装的服务
查看服务安装位置 ,一般是在/usr/local/
service httpd start
搜索/etc/rc.d/init.d/ 查看是否存在


 systemctl list-unit-files	//查看所有服务与状态

7、检查异常文件

1、查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“.”为名的文件夹具有隐藏属性

2、得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?
可以使用find命令来查找,如 find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前访问过的文件

3、针对可疑文件可以使用stat进行创建修改时间。

8、日志分析技巧

1、定位有多少IP在爆破主机的root帐号:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

2、定位有哪些IP在爆破:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c

3、爆破用户名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr

4、登录成功的IP有哪些:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

5、登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11} ‘

6、增加用户日志:
grep "useradd" /var/log/secure

7、删除用户kali日志:
grep "userdel" /var/log/secure

8、su切换用户
more /var/log/secure | grep 'su:'

9、病毒查杀

①chkrootkit:
网址:http://www.chkrootkit.org
使用方法:
	wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
	tar -zxf chkrootkit.tar.gz
	cd chkrootkit-0.55
	./chkrootkit

②Clamav:
ClamAV的官方下载地址为:http://www.clamav.net/download.html
使用方法:
yum -y install epel-release
yum install –y clamav clamav-update
freshclam
clamscan -r /home

③河马webshell查杀
网址:https://www.shellpub.com/
使用方法:
	https://www.shellpub.com/doc/hm_linux_usage.html
深信服Webshell网站后门检测工具
网址:https://edr.sangfor.com.cn/#/index/home


19、IPTABLES

网络设备:交换机、路由器(网络层或者链路层)

安全设备:不直接参与数据的传输、连通性,主要用于保护网络层或者链路层数据传输的安全性

1、防火墙介绍

防火墙作为内部网与外部网之间的一种访问控制设备(防火墙用于隔绝内外网的一种访问控制设备),常常安装在内部网络和外部网络的边际上。防火墙具有很好的网络安全保护作用。入侵者必须首先穿越防火墙的安全防线,才能接触目标计算机。你可以将防火墙配置成许多不同保护级别。高级别的保护(必须是存在与高级别的防火墙当中)可能会禁止一些服务,如视频流等,但至少这是你自己的保护选择。

防火墙分类

①硬件防火墙
将Linux系统、安全策略、规则全部都加入特定的硬性设备
好处:响应快、耗资源少(减少服务器资源消耗)、功能强大
坏处:价格巨高(一般用于国防),不常见
②软件防火墙
最早期:具有ACL的路由器
所有防火墙的基础功能:包过滤ACL(防火墙)

防火墙的主要作用

①Internet防火墙可以防止Internet上的危险传播到网络内部;web防火墙(WAF)
②能强化安全策略(规则);
③能有效记录Internet上的活动;

日志与防火墙的区别

日志:系统内部的事件监控

防火墙:内外网间(门口)的监控

2、数据传输

数据封装与解封装

数据封装(从上往下)/数据解封装(从上往下):
【应用层】上层数据
【传输层】TCP头部		上层数据
【网络层】IP头部  		TCP头部  		上层数据
【数据链路层】MAC头部  		IP头部  		TCP头部  		上层数据
【物理层】二进制流

封装数据:
真实应用数据从上层进入到传输层,加上源端口和目标端口成为数据段(TCP|UDP首部),接着进入网络层,加上源IP和目标IP成为数据包,再进入链路层,加上源MAC地址和目标MAC地址成为数据帧,形成一个完整的数据包。
解封装数据:
数据经过网络传输到达目标主机后,按照封装的反顺序逐层解包,最终得到真正的应用内容。

数据传输

数据传输:
主机间或者主机内部的服务进程可以通过多种方式进行数据传输,比如共享内存、套接字、消息队列等。而我们常说的OS模型方式,就是一种网络方式的数据传输,而且是基于套接字(ip+port)的。当封装好的数据达到物理层后,会基于数据包的网络层信息来判断,是直接流入本机,还是转发给网络中的其他主机。
套接字:IP地址:端口(一个端口对应一个服务)

进程间数据通信

主机内的进程间数据通信:
封装好的数据,无需经过物理网卡和路由,通过本机的回环网卡(LoopBack)即可实现从A套接字流出,从B套接字流入,由内核空间进入用户空间,进而被进程所在的应用程序接收并处理,完成整套数据的传输效果。前提是Linux主机需要开启ip_forward功能,否则导致数据包转发失败,直接丢弃。

主机间的进程数据通信:
封装好的数据,在物理层进行路由决策,如果数据包的目标地址是其他主机,数据包从A网卡流出,然后数据包在互联网上进行路由转发,最终到达目标主机,从B网卡流入,进入到指定的套接字,被进程所在的应用程序接收并处理,完成整套数据的传输效果。

网卡:实现上网的物理设备

3、iptables前提-->路由小实验

前提:三个主机(主机服务器),两个网段,只要中间的设备的网卡信息相同,是可以实现通信的。(通过网卡地址)

路由小实验

路由小实验:(隔离多个网段而实现内外网通信)
server1:1.1.1.1(内网)
server2:2.2.2.2/3.3.3.3(网关)
server3:4.4.4.4(外网)

server1当中的两张网卡可以通过server1的回环接口来进行联系(在服务器主机server1当中网卡之间是可以进行通信的)
路由器(网络设备)当中的下一跳/(出)接口在主机服务器当中叫网卡/网关。
需求:实现server1与server3通信(三个主机,四个网段实现通信)

步骤:
①改网卡(1.1.1.1与2.2.2.2所在网卡同一张,实现2.2.2.2为1.1.1.1的网关;3.3.3.3与4.4.4.4所在网卡同一张3.3.3.3为4.4.4.4的网关---->优化:保证实验的流畅性将四个主机都设置成同一网卡)
虚拟机-->硬件-->网络适配器-->自定义模式选择VMnet8(三台主机同网卡)(server2需要而外添加一张网卡)-->确定
②给每个主机配上对应的IP地址/编辑网卡(测试网关间是否能通信)
server1:(网关为2.2.2.2)
[root@localhost network-scripts]# vim ifcfg-ens33 
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ip a | grep inet | grep -v inet6
    inet 127.0.0.1/8 scope host lo
    inet 1.1.1.1/24 brd 1.1.1.255 scope global noprefixroute ens33
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
server2:(将2.2.2.2和3.3.3.3网卡的网关配置为对方的网关)
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37		//双网卡,前提是硬件设备要添加
//ens37的网卡名称和设备名称都需要修改,不修改的话,系统无法识别该网卡信息。
[root@localhost network-scripts]# vim ifcfg-ens33
[root@localhost network-scripts]# vim ifcfg-ens37
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ip a | grep inet | grep -v inet6
    inet 127.0.0.1/8 scope host lo
    inet 2.2.2.2/24 brd 2.2.2.255 scope global noprefixroute ens33
    inet 3.3.3.3/24 brd 3.3.3.255 scope global noprefixroute ens37
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
server3:(网关为3.3.3.3)
[root@localhost network-scripts]# vim ifcfg-ens33 
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ip a | grep inet | grep -v inet6
    inet 127.0.0.1/8 scope host lo
    inet 4.4.4.4/24 brd 4.4.4.255 scope global noprefixroute ens33
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
③测试连通性(最终结果:1.1.1.1与4.4.4.4之间全互通)
查看当前主机当中的路由表:
server1:
[root@localhost network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         2.2.2.2         0.0.0.0         UG    100    0        0 ens33	//要发给任意的网段,其网关都为2.2.2.2(这一条就涵盖了下面的所有信息)(若缺少了这条消息说明该设备未配置网关)
1.1.1.0         0.0.0.0         255.255.255.0   U     100    0        0 ens33
2.2.2.2         0.0.0.0         255.255.255.255 UH    100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
Destination:目标网段
Gateway:自己网关
Genmask:子网掩码
Iface:设备名
server2:
[root@localhost network-scripts]# route -n(2.2.2.2和3.3.3.3网卡互为对方的网关)
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         3.3.3.3         0.0.0.0         UG    100    0        0 ens33
0.0.0.0         2.2.2.2         0.0.0.0         UG    101    0        0 ens37
2.2.2.0         0.0.0.0         255.255.255.0   U     100    0        0 ens33
2.2.2.2         0.0.0.0         255.255.255.255 UH    101    0        0 ens37
3.3.3.0         0.0.0.0         255.255.255.0   U     101    0        0 ens37
3.3.3.3         0.0.0.0         255.255.255.255 UH    100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
//【略看】若在当时没有在配置IP时添加上网关信息的话,则之后可使用如下方法配上网关/网关:[root@Lin network-scripts]# route add -net 1.1.1.0/24 dev ens33
server3:
[root@localhost network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         3.3.3.3         0.0.0.0         UG    100    0        0 ens33
3.3.3.3         0.0.0.0         255.255.255.255 UH    100    0        0 ens33
4.4.4.0         0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

测试一、完成1.1.1.1与2.2.2.2之间的通信
//完成以上存在,此时server1还无法ping通server2的任意网卡(假如说是路由设备的话,则以上配置就已经可以实现通信,但该设备为主机服务器)
##主机服务器当中想要ping某个地址,则必须在该主机服务器的路由表当中先有该地址网段(路由表想要通某个地址,必须要有该地址网段)
添加2.2.2.2到1.1.1.1的网段/网关信息:【在server2上配置】
[root@Lin network-scripts]# route add -net 1.1.1.0/24 dev ens33
结果:则成功实现1.1.1.1与2.2.2.2通信
测试二、实现3.3.3.3与4.4.4.4之间的通信
添加3.3.3.3到4.4.4.4的网段/网关信息:【在server2上配置】
[root@localhost network-scripts]# route add -net 4.4.4.0/24 dev ens37
结果:实现3.3.3.3与4.4.4.4之间的通信
命令:
route add/del -net 网段/掩码 dev 设备名称		//添加/删除网段
route add/del default gw IP地址 dev 设备名称		//添加/删除网关(前提要有该网段)
#以上两个测试在2.2.2.2和3.3.3.3配置静态IP信息上都不写网卡信息的情况下照样可行

测试三、实现1.1.1.1与3.3.3.3之间的通信
1.将2.2.2.2和3.3.3.3网卡互为对方的网关(上边的配置静态IP地址的操作已经做了)
2.给server2配上1.1.1.0的网关、server2配上4.4.4.0的网关(这边测试一二也完成了)
结果:实现1.1.1.1与3.3.3.3的通信、4.4.4.4与2.2.2.2的通信、但1.1.1.1与4.4.4.4还未能通信

测试四、实现1.1.1.1与4.4.4.4之间的通信
1.修改配置文件:开启路由转发功能
[root@localhost network-scripts]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost network-scripts]# cat /proc/sys/net/ipv4/ip_forward
1		//1代表开启;0代表未开启
2.在server2上增加去往1.1.1.1和4.4.4.4的网段信息
结果:实现1.1.1.1与4.4.4.4之间的通信,且1.1.1.1没有4.4.4.4的任何信息(内网与外网的隔绝--实现内网的安全性)。

实现以上所有的路由小实验结束后个主机服务器的路由信息如下:
server1:
[root@localhost network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         2.2.2.2         0.0.0.0         UG    100    0        0 ens33
1.1.1.0         0.0.0.0         255.255.255.0   U     100    0        0 ens33
2.2.2.2         0.0.0.0         255.255.255.255 UH    100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
server2:
[root@localhost network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         3.3.3.3         0.0.0.0         UG    100    0        0 ens33
0.0.0.0         2.2.2.2         0.0.0.0         UG    101    0        0 ens37
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 ens33
2.2.2.0         0.0.0.0         255.255.255.0   U     100    0        0 ens33
2.2.2.2         0.0.0.0         255.255.255.255 UH    101    0        0 ens37
3.3.3.0         0.0.0.0         255.255.255.0   U     101    0        0 ens37
3.3.3.3         0.0.0.0         255.255.255.255 UH    100    0        0 ens33
4.4.4.0         0.0.0.0         255.255.255.0   U     0      0        0 ens37
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
server3:
[root@localhost network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         3.3.3.3         0.0.0.0         UG    100    0        0 ens33
3.3.3.3         0.0.0.0         255.255.255.255 UH    100    0        0 ens33
4.4.4.0         0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0



以上路由小实验注意点:
以上所写入的路由信息都是属于临时的,当重启网络服务时,该网络的路由就会恢复会最初的状态。(只要重启了网络,就需要重新配置路由信息)

4、iptables介绍

iptables全称叫:netfilter(核心)/iptables(工具)

iptables(难)& Firewalls(易)

在之前的linux系统中,默认的防火墙都是iptables,而随着Redhat|Centos7系统的发布,linux系统的防火墙默默的将iptables转换成了Firewalls,由Firewalls编辑各种各样的数据包管理规则,然后借助于netfilter模块来实现强大的防火墙功能,不过Firewalls的底层操作仍然是iptables,只不过它将繁杂的iptables的手工操作给封装起来,以简单易用的方式提供给大家。

Firewalld动态防火墙管理器服务(Dynamic Firewall Manager of Linux systems)是目前Centos7系统默认的防火墙管理工具,拥有命令行终端和图形化界面的配置工具,firewalld跟iptables主要有以下区别:

1、firewalls的默认规则是拒绝,需要时设置开启,iptables正好相反。

2、firewalls可以动态修改单条规则(iptables也行-立即生效),而且直接生效

3、firewalls简单易用,即使不理解各种数据包规则,也可以实现大部分功能。

4、想要真正学会防火墙规则,强烈推荐学习iptables。

5、iptables原理

iptables不是一个单一的软件工具,而是一套C/S样式的软件组,它是由工作在用户空间的iptables和工作在内核空间的Netfilter模块组成,一般统称为Iptables。

用户基于用户空间的iptables软件,来设定各种包过滤规则,借助于后端内核空间的Netfilter模块实现非常强大的防火墙功能,Netfilter实现的功能主要体现在数据包过滤、数据包重定向、网络地址转换等方面。

默认情况下,iptables主要工作在OSI模型中的的2~4层,我们还可以通过重编内核,让iptables支持7层的数据包管理。

规则优先级:netfilter为了更高质量的进行表之间的规则运行,已经定制好了这些表的优先级,从高到底效果如下:security > raw > mangle > nat > filter

1.五条链

Netfilter 平台中制定了数据包的五个挂载点(Hook Point,我们可以理解为回调函数点,数据包到达这些位置的时候会主动调用我们的函数,使我们有机会能在数据包路由的时候改变它们的方向、内容),这5个挂载点分别是PRE_ROUTINGINPUTOUTPUTFORWARDPOST_ROUTING

Linux内核中的专用数据包处理模块netfilter的工作的地方,而且netfilter对这几个地方分别定义了几个名称术语。在处理各种数据包时,根据防火墙规则的不同介入时机,iptables供涉及5种默认规则链,从应用时间点的角度理解这些链:

1、INPUT链(进站):当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。
2、OUTPUT链(上车):当防火墙本机向外发送数据包(出站)时,应用此链中的规则。
3、FORWARD链(转车):当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则。
4、PREROUTING链(下车):在对数据包作路由选择之前,应用此链中的规则,如DNAT。
5、POSTROUTING链(出站):在对数据包作路由选择之后,应用此链中的规则,如SNAT。

2.五个表

在netfilter的内存区域中,这五个表是security表、filter表、NAT表、mangle表和raw表,他们分别作用的对象是不一样的:

1、security表: 主要针对的是数据链路层的管理规则组合,只不过它是基于target(目标)来做操作的。
2、filter表:是netfilter中最重要的表,也是默认的表,主要负责数据包的过滤功能。(重要)
3、nat表:主要实现网络地址转换的表。可以自由转换数据报文中IP和PORT。
4、mangle表:主要实现数据包的拆分-修改-封装动作。
5、raw表:通过关闭nat表的追踪功能,从而实现加速防火墙过滤的表。

3.表中链(重要)

	security表 :input 、output、forward
	filter过滤表 :input 、output、forward
	nat 转换表 :postrouting、prerouting、input 、output
	mangle封装表 :input、output、forward、prerouting、postrouting
	raw自定义表 :prerouting、output

4.链属表

	prerouting :nat、mangle、raw
	postrouting :nat、mangle
	input :filter、mangle、security
	output :filter、nat、mangle、raw、security
	forward :filter、mangle、security

5.四表规则

filter表

主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、REJECT、LOG)。filter 表对应的内核模块为iptable_filter,包含三个规则链:

INPUT链:INPUT针对那些目的地是本地的包

FORWARD链:FORWARD过滤所有不是本地产生的并且目的地不是本地(即本机只是负责转发)的

OUTPUT链:OUTPUT是用来过滤所有本地生成的包

nat表

主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。属于一个流的包(因为包的大小限制导致数据可能会被分成多个数据包)只会经过这个表一次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自动地被做相同的操作,也就是说,余下的包不会再通过这个表。表对应的内核模块为 iptable_nat,包含三个链:

PREROUTING链:作用是在包刚刚到达防火墙时改变它的目的地址

OUTPUT链:改变本地产生的包的目的地址

POSTROUTING链:在包就要离开防火墙之前改变其源地址

mangle表

主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。包含五个规则链——PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。

raw表

是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理。在匹配数据包时,raw表的规则要优先于其他表。包含两条规则链——OUTPUT、PREROUTING。

6、补充

iptables中数据包和4种被跟踪连接的4种不同状态:
1、NEW:该包想要开始一个连接(重新连接或将连接重定向)
2、RELATED:该包是属于某个已经建立的连接所建立的新连接。例如:FTP的数据传输连接就是控制连接所 RELATED出来的连接。--icmp-type 0( ping 应答) 就是--icmp-type 8(ping 请求)所RELATED出来的。
3、ESTABLISHED :只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接的后续数据包。
4、INVALID:数据包不能被识别属于哪个连接或没有任何状态比如内存溢出,收到不知属于哪个连接的ICMP错误信息,一般应该DROP这个状态的任何数据。

6、iptables实验

前提:保证1.1.1.1与2.2.2.2之间能通信即可。

法一:如果使用上边的路由小实验的话则需要将server2上的互为网关给注释掉,还要联网下载iptables的相关工具-->比较麻烦。

法二:其次就是使用两台主机服务器先下载iptables的相关工具,再重新配置上两台设备之间的静态IP和路由信息(以下操作使用此方法)

①下载iptables的相关服务:【两台主机服务器都可下载,重要任意指定一台为服务端一台为客户端即可】
[root@localhost ~]# rm -f /var/run/yum.pid
[root@localhost ~]# yum -y install iptables
[root@localhost ~]# yum -y install iptables-services.x86_64
其余命令:
下载:
1.永久关闭firewalld
	systemctl stop firewalld
	systemctl disable firewalld
2.查看iptables软件包
	 yum list | grep iptables
3.安装iptables与iptables-services
	yum –y install iptables
	yum –y install iptables-services
服务相关命令:
[root@localhost ~]# systemctl start/stop iptables	// 开启/关闭iptables
[root@localhost ~]# systemctl status iptables	// 查看iptables状态
[root@localhost ~]# systemctl enable/disable iptables	// 开机自启/永久关闭iptables
[root@localhost ~]# iptables –help	// 查看帮助文档


②为了保证实验与法一的高度相似性,这里就不直接将2.2.2.2的网关信息配置成1.1.1.1的了,而是将2的网段注释掉,再配上2网段通往1网段的路由信息。
[root@localhost network-scripts]# route add -net 1.1.1.0/24 dev ens33  //添加该条路由消息1网段与2网段成功通信
//这里说下这一步都配置了说明:1.server1配置了1.1.1.1的静态IP和2.2.2.2的网关信息并重启了网络。2.server2配置了2.2.2.2的静态IP并重启了网络和添加了一条通往1.1.1.0网段的路由信息。从而实现1网段与2网段之间的通信。


常用指令
iptables 
	-t 指定查看表(不指定默认查看filter)
		-L:查看表中规则
		-vnL:查看详细规则
		-F:清空(不指定默认清空filter)
		-A:追加一条策略(默认放在最后开始执行)
		-l:插入一条策略(默认放在最前开始执行)
			-j:动作
				DROP:丢弃
			-p:指定协议	
iptables -L //查看现有规则
iptables -t nat -L //查看nat表的规则
iptables -F //清空表中规则
target 目标
ACCEPT 接受
REJECT 拒绝
DROP 丢弃


③测试规则有效性
//2.2.2.2的主机服务器为server端;1.1.1.1的主机服务器为client端
测试1、让客户端不能ping通服务端【使用iptables的规则来实现--源地址封杀、目的地址封杀】
法一:进站封杀/原地址封杀(无论客户端发送来的数据包要去哪,全都拒绝)
[root@localhost network-scripts]# iptables -F		//策略一般是从上到下开始匹配,所以需要先清空原有的策略以保证实验的准确性
[root@localhost network-scripts]# iptables -L		//查看表,此时规则表当中没有任何数据
[root@localhost network-scripts]# iptables -t filter -A INPUT -s 1.1.1.1 -j DROP //写入规则
[root@localhost network-scripts]# iptables -nvL		//规则已成功写入
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       1.1.1.1              0.0.0.0/0         
//此时客户端再次ping2.2.2.2服务器则无法成功
 pkts bytes target     prot opt in     out     source               destination         
    5   420 DROP       all  --  *      *       1.1.1.1              0.0.0.0/0      //5个包被成功丢弃/拦截  
//现在再次清空刚刚写入的规则,客户端又一次ping通主机服务器,说明上面写入的策略生效。
法二:目的地址封杀
[root@localhost network-scripts]# iptables -F	//清空原有的规则
[root@localhost network-scripts]# iptables -t filter -A INPUT -d 2.2.2.2 -j DROP	//写入目的地封杀规则
[root@localhost network-scripts]# iptables -nvL		//查看规则发现客户端已经无法与主机服务器端ping通
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    2   168 DROP       all  --  *      *       0.0.0.0/0            2.2.2.2       


测试二、只允许服务端服务客户端,客户端不能访问服务端
法一:主机服务器拦截客户端的请求包,但服务端访问客户端的请求包为被拦截
[root@localhost network-scripts]# iptables -F
[root@localhost network-scripts]# iptables -t filter -A INPUT -s 1.1.1.1 -p icmp --icmp-type 8 -j DROP
[root@localhost network-scripts]# iptables -nvL
Chain INPUT (policy ACCEPT 2 packets, 168 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    6   504 DROP       icmp --  *      *       1.1.1.1              0.0.0.0/0            icmptype 8
//此时服务端成功与客户端通信,但客户端访问服务端被拒绝了。
法二:主机服务器对回应包进行拦截
[root@localhost network-scripts]# iptables -F
[root@localhost network-scripts]# iptables -t filter -A OUTPUT -d 1.1.1.1 -p icmp --icmp-type 0 -j DROP
[root@localhost network-scripts]# iptables -nvL
Chain OUTPUT (policy ACCEPT 2 packets, 168 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    3   252 DROP       icmp --  *      *       0.0.0.0/0            1.1.1.1              icmptype 0
//此时服务端成功与客户端通信,但客户端访问服务端被拒绝了。
补充:
--icmp-type 8:请求包
--icmp-type 0:回应包
【作业1】(注意网关是否需要写入、路由策略是否需要添加)
法三:首先拒绝所有策略!!!然后开启对应icmp的ping包(全部加入黑名单,开放对应白名单。iptables的策略默认是全接受/开启的)
[root@localhost network-scripts]# iptables -F
[root@localhost network-scripts]# iptables -P INPUT DROP	 //修改filter表INPUT链的默认策略为拒绝
[root@localhost network-scripts]# iptables -t filter -A INPUT -s 1.1.1.1 -p icmp --icmp-type 0 -j ACCEPT
[root@localhost network-scripts]# iptables -t filter -A OUTPUT -d 1.1.1.1 -p icmp --icmp-type 8 -j ACCEPT
//此时服务端(2.2.2.2)成功与客户端(1.1.1.1)通信,但客户端(1.1.1.1)访问服务端(2.2.2.2)被拒绝了(开放对应白名单)。





//配置了iptables的主机服务器端无法远程其他设备
测试三、禁止客户端通过远程连接端口22来远程连接上主机服务器端。(使用iptables阻止一些端口服务)
法一:在主机服务器上将该客户端拉入远程连接的黑名单即可。
法二:使用iptables服务禁止客户端远程连接上服务器端
[root@localhost ~]# systemctl restart iptables.service 		//重启下server2的iptables的服务
此时的server1可以成功远程连接上server2(ssh 2.2.2.2),而server2无法远程连接其他设备(上面提到了)。
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t filter -A INPUT -s 1.1.1.1 -p tcp --dport 22 -j DROP //服务器端上写入规则
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 1 packets, 350 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   14  4820 DROP       tcp  --  *      *       1.1.1.1              0.0.0.0/0            tcp dpt:22
现在server1无法远程连接上2.2.2.2这个主机服务器。
补充:
--dport:目标端口
测试四、只写一条规则就将22、80端口同时拒绝连接。(分开写其实也是可行的,不过那样的工作量太大了)
1.将22号端口到80号端口之间的服务全部拒绝(这样肯定不行,假如说在22到80之间有我们需要的端口服务,那不就使用不了了)(范围过于庞大)
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t filter -A INPUT -s 1.1.1.1 -p tcp --dport 22:80 -j DROP 
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       tcp  --  *      *       1.1.1.1              0.0.0.0/0            multiport dports 22:80
2.精准定位到指定端口上
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t filter -A INPUT -s 1.1.1.1 -p tcp -m multiport --dport 22,80 -j DROP
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       tcp  --  *      *       1.1.1.1              0.0.0.0/0            multiport dports 22,80
补充:
-m:引入模块
multiport:组合端口
测试五、禁用多个地址访问指定的端口(组合参数的运用)
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t filter -A INPUT -m iprange --src-range "2.2.2.2-2.2.2.200" -p tcp -m multiport --dport 22,80,135 -j DROP 
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            source IP range 2.2.2.2-2.2.2.200 multiport dports 22,80,135
--src-range:源范围的意思

7、防火墙的备份与还原

默认的iptables防火墙规则会立刻生效,但如果不保存,当计算机重启后所有的规则都会丢失,所以对防火墙规则进行及时保存的操作是非常必要的。
iptables软件包提供了两个非常有用的工具,我们可以使用这两个工具处理大量的防火墙规则。这两个工具分别是iptables-save和 iptables-restore,使用该工具可以实现防火墙规则的保存与还原。这两个工具的最大优势是处理庞大的规则集时速度非常快。

CentOS 7 系统中防火墙规则默认保存在/etc/sysconfig/iptables文件中,使用iptables-save将规则保存至该文件中可以实现保存防火墙规则的作用,计算机重启后会自动加载该文件中的规则。如果使用iptables-save将规则保存至其他位置,可以实现备份防火墙规则的作用。当防火墙规则需要做还原操作时,可以使用iptables-restore将备份文件直接导入当前防火墙规则。

1、iptables-save命令
iptables-save 命令用来批量导出 Linux 防火墙规则,语法介绍如下:
保存在默认文件夹中(保存防火墙规则): [root@liangxu ~]# iptables-save > /etc/sysconfig/iptables
保存在其他位置(备份防火墙规则): [root@liangxu ~]# iptables-save > 文件名称
直接执行 iptables-save 命令:显示出当前启用的所有规则,按照 raw、mangle、nat、filter 表的顺序依次列出,如下所示:
[root@liangxu ~]# iptables-save # Generated by iptables-save v1.4.7 on Thu Aug 27 07:06:36 2020 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [602:39026] ....... COMMIT # Completed on Thu Aug 27 07:06:36 2020
其中:
“#”号开头的表示注释;
“*filter”表示所在的表;
“:链名默认策略”表示相应的链及默认策略,具体的规则部分省略了命令名“iptables”;
在末尾处“COMMIT”表示提交前面的规则设置。
备份到其他文件中。例如文件:text,如下所示:
[root@liangxu ~]# iptables-save > test [root@liangxu ~]# ls test [root@bogon ~]# cat test # Generated by iptables-save v1.4.7 on Thu Aug 27 07:09:47 2020 *filter ......
列出nat表的规则内容,命令如下:
[root@liangxu ~]# iptables-save -t nat		//“-t表名”:表示列出某一个表。

2、iptables-restore命令
iptables-restore 命令可以批量导入Linux防火墙规则,同时也需要结合重定向输入来指定备份文件的位置。命令如下:
[root@liangxu ~]# iptables-restore < 文件名称
注意,导入的文件必须是使用 iptables-save工具导出来的才可以。
先使用 iptables-restore 命令还原 text 文件,然后使用 iptables -t nat -nvL 命令查看清空的规则是否已经还原,如下所示:
[root@liangxu ~]# iptables-restore < test [root@liangxu ~]# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination

8、内、外网之间的需求访问

①SNAT
明确内客户端地址是多少(1.1.1.1),外网web服务器地址是多少(2.2.2.2)。(防火墙左端口为1.1.1.254,右端口为2.2.2.254)  
比如内网地址为1.1.1.1,外网服务器地址为2.2.2.2
第一步:清空路由表(删除我们不需要的地址,添加需要的地址)
第二步:把去2.2.2.0/24的网关设为1.1.1.254。(那么只要是内网1.1.1.0网段的流量均通过nat转换成2.2.2.254)
添加路由:route add -net 目标网段 gw 内网网关 dev 网卡名称
wget命令使用:wget ip地址
POSTROUTING:出站检查/安检
!:取反
--to-source:源地址的转化
源地址转换:私有地址 --> 公有地址
防火墙命令:iptables -t nat -A POSTROUTING -s 内网网段 -j SNAT --to 公网接口ip
过程:
server1:(内网1.1.1.1)
        ping测试
[ rootdlocalhost network-scripts]# ping 4.4.4.4
PING 4.4.4.4 (4.4.4.4)56(84) bytes of data.
64 bytes from 4.4.4.4: icmp_seq=1 ttl=63 time=0.376 ms
64 bytes from 4.4.4.4: icmp_seq=2 ttl=63 time=0.467 ms
^c
- - - 4.4.4.4 ping statistics ---
2 packets transmitted,2 received,0% packet loss,time 1002ms
        访问web服务器
[ root@localhost network-scripts ]# wget 4.4.4.4
--2022-10-30 18:42:36-- http: // 4.4.4.4/
connecting to 4.4.4.4 :80. . . connected .
HTTP request sent,awaiting response. . . 403 Forbidden
2022-10-30 18:42:37 ERROR 403: Forbidden .
  
server2:(防火墙2.2.2.2/3.3.3.3)
        下载iptables
[ root@localhost network-scripts]# yum -y install iptables-services.x86 64
          实现通信          
[ root@localhost network-scripts]# vim ifcfg-ens33
[ root@localhost network-scripts]# vim ifcfg-ens37
[ root@localhost network-scripts]# systemctl restart network
[ root@localhost network-scripts]# echo 1 > /proc/sys/net/ipv4/ip_forward
[ root@localhost network-scripts]# route add -net 1.1.1.0/24 dev ens33
[ root@localhost network-scripts]# route add -net 4.4.4.0/24 dev ens37
[root@localhost network-scripts]# systemctl stop firewalld.service
        实现通信
[ root@localhost network-scripts]# iptables -t nat -A POSTROUTING -s 1.1.1.1 ! 1.1.1.0/24 -j SNAT --to- source 3.3.3.3

server3:(web服务器--外网4.4.4.4)
        下载http服务
[root@localhost ~]#rm -rf /var / run/ yum. pid
[root@localhost ~]#yum -y install httpd.x86_64
        ping测试
[ root@localhost network-scripts]# ping 1.1.1.1
PING 1.1.1.1 ( 1.1.1.1)56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=3 ttl=63 time=0.926 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=63 time=0.378 ms
64 bytes from 1.1.1.1: icmp_seq=5 ttl=63 time=0.292 ms
^c
        在http服务器上写入东西
补充:/var/www/html 	//http服务器的登录页面,可以不写东西进去
[ root@localhost network-scripts]# cd /var/log/httpd
[ root@localhost httpd]#ll
total 0
[ root@localhost httpd]#ls
[ root@localhost httpd]# echo 123 > 1.txt
        启动http服务并查看http服务的状态
[ root@localhost httpd]# systemctl restart httpd. service
[ root@localhost httpd]# systemctl status httpd.service
        结果:在未写入规则时,外网上看到了内网服务器的IP为1.1.1.1(这个不行);在写入规则之后则内网访问外网时,会通过NAT转换成公网IP为3.3.3.3进行对外网web服务器的访问(实现了内网访问外网时,自身的IP不会暴露)
[ root@localhost httpd]# tail -f /var/log/httpd/access_log //记录里面是对外网地址去访问服务器的则符合预期结果
1.1.1.1 - -[30/0ct/2022:18:42:37 +0800] "GET / HTTP/1.1403 4897“-" "Wget/1.14 ( linux-gnu ) "
3.3.3.3 -- [30/oct/2022:18:45:28 +0800] "GET / HTTP/1.1" 403 4897"-""wget/1.14 ( linux-gnu) "
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
②DNAT
目标地址转换: 公有地址 -- > 私有地址
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 内网地址
过程:
server1:(web服务器--内网1.1.1.1)
        下载iptables
[ root@localhost network-scripts]# rm -rf /var/run/yum.pid
[root@localhost network-scripts]# yum -y install httpd.x86_64
        在http服务器上写入东西
[root@localhost network-scripts]# cd /var/log/httpd/
[ root@localhost httpd]# ls
[ root@localhost httpd]# echo 123 > 1.txt
[ root@localhost httpd]#ll
total 4
- rw-r--r--. 1 root root 4 oct 30 19:05 1.txt
        启动http服务并查看http服务的状态
[ root@localhost httpd]# systemctl restart httpd.service
[root@localhost httpd]# systemctl status httpd.service
        结果:内网上http服务的日志中检测到来自外网的http访问    
[ root@localhost httpd]# tail -f /var/log/httpd /access_log
4.4.4.4 - - [30/oct/2022:19:08:25+0800]"GET / HTTP/1.1403 4897“-" "Wget/1.14 ( linux-gnu ) "
4.4.4.4 -- [30/0ct/2022:19:10:59 +0800]“GET / HTTP/1.1" 403 4897 "." "wget/1.14 ( linux-gnu ) "

server2:(防火墙2.2.2.2/3.3.3.3)
        清空规则并写入规则		/DNDT:凡是访问3.3.3.3/网关的全部转化成1.1.1.1
[ root@localhost network-scripts]# iptables -F
[ root@localhost network-scripts]# iptables -t nat -A PREROUTING -p tcp --dport 8-jDNAT --to-destination 1.1.1.1

server3:(外网4.4.4.4)
        访问web服务器
[ root@localhost httpd]# wget 1.1.1.1
--2022-10-30 19: 10:59-- http:/l1.1.1.1/
connecting to 1.1.1.1:80. . . connected .
HTTP request sent, awaiting response. . . 403 Forbidden
2022-10-30 19: 10:59 ERROR 403: Forbidden.