Linux概念和排查

Linux概念

什么是Linux

1
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Unix和Linux有什么区别

1
2
3
4
5
6
7
Linux 和 Unix 都是功能强大的操作系统,都是应用广泛的服务器操作系统,有很多相似之处,甚至有一部分人错误地认为 Unix 和 Linux 操作系统是一样的,然而,事实并非如此,以下是两者的区别。

开源性 Linux 是一款开源操作系统,不需要付费,即可使用;Unix 是一款对源码实行知识产权保护的传统商业软件,使用需要付费授权使用。
跨平台性 Linux 操作系统具有良好的跨平台性能,可运行在多种硬件平台上;Unix 操作系统跨平台性能较弱,大多需与硬件配套使用。
可视化界面 Linux 除了进行命令行操作,还有窗体管理系统;Unix 只是命令行下的系统。
硬件环境 Linux 操作系统对硬件的要求较低,安装方法更易掌握;Unix 对硬件要求比较苛刻,安装难度较大。
用户群体 Linux 的用户群体很广泛,个人和企业均可使用;Unix 的用户群体比较窄,多是安全性要求高的大型企业使用,如银行、电信部门等,或者 Unix 硬件厂商使用,如 Sun 等。相比于 Unix 操作系统,Linux 操作系统更受广大计算机爱好者的喜爱,主要原因是 Linux 操作系统具有 Unix 操作系统的全部功能,并且能够在普通 PC 计算机上实现全部的 Unix 特性,开源免费的特性,更容易普及使用!

什么是Linux内核

1
2
3
4
5
Linux 系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。
系统内存管理
应用程序管理
硬件设备管理
文件系统管理

Linux 的基本组件是什么?

1
就像任何其他典型的操作系统一样,Linux 拥有所有这些组件:内核,shell 和 GUI,系统实用程序和应用程序。Linux 比其他操作系统更具优势的是每个方面都附带其他功能,所有代码都可以免费下载。

Linux 开机启动过程?

1
2
3
4
5
6
主机加电自检,加载 BIOS 硬件信息。
读取 MBR 的引导文件(GRUB、LILO)。
引导 Linux 内核。
运行第一个进程 init (进程号永远为 1 )。
进入相应的运行级别。
运行终端,输入用户名和密码。

Linux系统缺省的运行级别

1
2
3
4
5
6
7
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS,不支持网络)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启

Linux的目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
常见目录说明:

/bin:存放二进制可执行文件(ls,cat,mkdir 等),常用命令一般都在这里;
/etc:存放系统管理和配置文件;
/home:存放所有用户文件的根目录,是用户主目录的基点,比如用户 user 的主目录就是/home/user,可以用~user 表示;
/usr:用于存放系统应用程序/opt:额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把 tomcat 等都安装到这里;
/proc:虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
/root:超级用户(系统管理员)的主目录(特权阶级 o);
/sbin: 存放二进制可执行文件,只有 root 才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如 ifconfig 等;
/dev:用于存放设备文件;
/mnt:系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
/boot:存放用于系统引导时使用的各种文件;
/lib :存放着和系统运行相关的库文件 ;
/tmp:用于存放各种临时文件,是公用的临时文件存储点;
/var:用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
/lost+found:这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows 下叫什么.chk)就在这里。

什么是inode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存 512 字节(相当于 0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是 4KB,即连续八个 sector 组成一个 block

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做 inode,中文译名为"索引节点"

每一个文件都有对应的 inode,里面包含了与该文件有关的一些信息。

简述 Linux 文件系统通过 i 节点把文件的逻辑结构和物理结构转换的工作过程?

一般来说,面试官不太会问这个题目。

Linux 通过 inode 节点表将文件的逻辑结构和物理结构进行转换。

· inode 节点是一个 64 字节长的表,表中包含了文件的相关信息,其中有文件的大小、文件所有者、文件的存取许可方式以及文件的类型等重要信息。在 inode 节点表中最重要的内容是磁盘地址表。在磁盘地址表中有 13 个块号,文件将以块号在磁盘地址表中出现的顺序依次读取相应的块。

· Linux 文件系统通过把 inode 节点和文件名进行连接,当需要读取该文件时,文件系统在当前目录表中查找该文件名对应的项,由此得到该文件相对应的 inode 节点号,通过该 inode 节点的磁盘地址表把分散存放的文件物理块连接成文件的逻辑结构。

Linux的基本组件是什么?

1
2
3
4
5
6
内核:它是Linux的核心组件,它充当软件和硬件之间的接口。
Shell:它充当用户和内核之间的接口。
GUI: 它代表图形用户界面,这是用户与系统交互的另一种方式。但这与图像,按钮,用于交互的文本框不同。
系统实用程序:这些是允许用户管理计算机的软件功能。
应用程序:执行一组任务的一组功能。

Linux 使用的进程间通信方式?

1
管道(pipe)、流管道(s_pipe)、有名管道(FIFO)。信号(signal) 、消息队列、共享内存、信号量、套接字(socket)

Yum命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。

基於 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

1.列出所有可更新的软件清单命令:yum check-update

2.更新所有软件命令:yum update

3.仅安装指定的软件命令:yum install

4.仅更新指定的软件命令:yum update

5.列出所有可安裝的软件清单命令:yum list

6.删除软件包命令:yum remove

7.查找软件包 命令:yum search

8.清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers

网络

TCP/IP的七层模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
应用层 (Application):例如,用qq还是微信
网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

表示层(Presentation Layer):微信传输的是图片,设备不识别人能识别的图片,将其转换为各种格式JPEG;若是文本将其转化为ASCll
数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、DECOIC、加密格式等

会话层(Session Layer):发送端使用qq程序接收端必须是qq不能是微信
建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话

传输层 (Transport):微信使用的是udp高效,但是丢包;淘宝网站购物,用的是tcp安全但是效率低
定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

网络层 (Network):类似普通话,保证从大方面,能找到通信另一方;
进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP

数据链路层 (Link):类似方言,保证从小方面,能定位具体的真实设备
建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正

物理层(Physical Layer):定义用什么方式传,光纤还是网线;怎么传
是计算机网络OSI模型中最低的一层
物理层规定:为传输数据所需要的物理链路创建、维持、拆除
而提供具有机械的,电子的,功能的和规范的特性

web服务

常用的Nginx模块,用来做什么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
rewrite模块,实现重写功能

access模块:来源控制

ssl模块:安全加密

ngx_http_gzip_module:网络传输压缩模块

ngx_http_proxy_module 模块实现代理

ngx_http_upstream_module模块实现定义后端服务器列表

ngx_cache_purge实现缓存清除功能

请问当用户反馈网站访问慢,如何处理?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1、服务器出口带宽不够用,本身服务器购买的出口带宽比较小。

一旦并发量大的话,就会造成分给每个用户的出口带宽就小,访问速度自然就会慢。跨运营商网络导致带宽缩减。例如,公司网站放在电信的网络上,那么客户这边对接是长城宽带或联通,这也可能导致带宽的缩减。

2、服务器负载过大,导致响应不过来

可以从两个方面入手分析:分析系统负载,使用 w 命令或者 uptime 命令查看系统负载。如果负载很高,则使用 top 命令查看 CPU ,MEM 等占用情况,要么是 CPU 繁忙,要么是内存不够。如果这二者都正常,再去使用 sar 命令分析网卡流量,分析是不是遭到了攻击。一旦分析出问题的原因,采取对应的措施解决,如决定要不要杀死一些进程,或者禁止一些访问等。

3、数据库瓶颈

如果慢查询比较多。那么就要开发人员或 DBA 协助进行 SQL 语句的优化。如果数据库响应慢,考虑可以加一个数据库缓存,如 Redis 等。然后,也可以搭建 MySQL 主从,一台 MySQL 服务器负责写,其他几台从数据库负责读。

4、网站开发代码没有优化好

例如 SQL 语句没有优化,导致数据库读写相当耗时。
针对网站访问慢,怎么去排查?



1、首先要确定是用户端还是服务端的问题。当接到用户反馈访问慢,那边自己立即访问网站看看,如果自己这边访问快,基本断定是用户端问题,就需要耐心跟客户解释,协助客户解决问题。

不要上来就看服务端的问题。一定要从源头开始,逐步逐步往下。

2、如果访问也慢,那么可以利用浏览器的调试功能,看看加载那一项数据消耗时间过多,是图片加载慢,还是某些数据加载慢。

3、针对服务器负载情况。查看服务器硬件(网络、CPU、内存)的消耗情况。如果是购买的云主机,比如阿里云,可以登录阿里云平台提供各方面的监控,比如 CPU、内存、带宽的使用情况。

4、如果发现硬件资源消耗都不高,那么就需要通过查日志,比如看看 MySQL 慢查询的日志,看看是不是某条 SQL 语句查询慢,导致网站访问慢。

怎么去解决?

1、如果是出口带宽问题,那么就申请加大出口带宽。

2、如果慢查询比较多,那么就要开发人员或 DBA 协助进行 SQL 语句的优化。

3、如果数据库响应慢,考虑可以加一个数据库缓存,如 Redis 等等。然后也可以搭建 MySQL 主从,一台 MySQL 服务器负责写,其他几台从数据库负责读。

4、申请购买 CDN 服务,加载用户的访问。

5、如果访问还比较慢,那就需要从整体架构上进行优化咯。做到专角色专用,多台服务器提供同一个服务。

原理知识

http协议通信原理

1
2
3
4
5
6
7
(1) 建立TCP连接
(2) Web浏览器向Web服务器发送请求命令
(3) Web浏览器发送请求头信息
(4) Web服务器应答
(5) Web服务器发送应答头信息
(6) Web服务器向浏览器发送数据
(7) Web服务器关闭TCP连接

image-20230630154029780

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
三次握手
第一次握手:客户端要和服务端进行通信,首先要告知服务端一声,遂发出一个SYN=1的连接请求信号,”服务端哥哥,我想给你说说
话”。
第二次握手:当服务端接收到客户端的连接请求,此时要给客户端一个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能
连吗(SYN)”。
第三次握手:当客户端收到了服务端的确认连接信息后,要礼貌的告知一下服务端,“好的,咱们开始联通吧(ACK)”。
到此整个建立连接的过程已经结束,接下来就是双方你一句我一句甚至同时交流传递信息的过程了。
四次挥手
第一次挥手:双方交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时
自身形成等待结束连接的状态。
第二次挥手:服务端知道客户端已经没话说了,服务端此时还有两句心里话要给客户端说,“我知道你说完了(ACK),我再给你说两
句,&*……%¥”。
第三次挥手:此时客户端洗耳恭听继续处于等待结束的状态,服务器端也说完了,自身此时处于等待关闭连接的状态,并对告诉客户
端,“我说完了,咱们断了吧(FIN)”。
第四次挥手:客户端收知道服务端也说完了,也要告诉服务端一声(ACK),因为连接和断开要双方都按下关闭操作才能断开,客户
端同时又为自己定义一个定时器,因为不知道刚才说的这句话能不能准确到达服务端
到此为止双方整个通信过程就此终结。这里要声明一下:断开链接不一定就是客户端,谁都可以先发起断开指令,另外客户端和服务
端是没有固定标准的,谁先发起请求谁就是客户端。

Mysql主从复制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql主从简介:
- 一主一从
- 主主复制
- 一主多从---扩展系统读取的性能,因为读是在从库读取的
- 多主一从--5.7开始支持
- 联级复制
用途及条件:

mysql主从复制用途
实时灾备,用于故障切换
读写分离,提供查询服务
备份,避免影响业务

主从部署必要条件:
主库开启binlog日志(设置log-bin参数)
主从server-id不同
从库服务器能连通主库

主从原理
mysql主从复制原理

image-20230630154230358

1
从库生成两个线程,一个I/O线程,一个SQL线程

故障排查

服务器开不了机怎么解决一步步的排查

1
2
3
4
5
6
7
8
9
10
从两个方面分析故障原因,
硬件:1)服务器电源问题,断电、电源线松动;2)散热不良造成蓝屏或死机;软件:1)服务器系统文件丢失;2)物理链路或人为原因,造成网络参数配置错误
1、首先检查服务器开关指示灯是否是亮的,如果不亮,在检查电源完好的情况下重新启动服务器,如果启动不成功,与客户协商是否可以启用备用服务器并尽快恢复数据。
2、如果服务器开关指示灯是亮的,接入键盘和显示器,输入账号密码看能否登录,如果不能, 重启服务器并尽快恢复数据,重启失败,启用备用服务器或更换服务器。
3、如果能够通过账号密码登录系统,先查看网卡指示灯是否是亮的,并用ifconfig查看网卡接口是否正常,并用ping命令来测试网络的连通性。
4、如果ping不通,打开网卡配置信息,确认配置信息各项参数是否正常,DNS网关配置是否是正确的,并用ifdown,ifup重启网卡,再ping看能不能ping通。
5、如果还是ping不通,及时排查本地纤尾以及模块等物理设备是否连接正常,收发光是否在规定的范围内,协商客户是否可以重启服务器,并确认数据方面没有网络配置和数据方面的变化。
6、如果ping通,告诉数据人员检查链路是否连接正常,看有没有丢包,确认没有丢包再检查纤尾和模块物理是否连接正常。
7、如果还是无法正常开机,重启机器,重复3456步骤,多检查几遍,还是不可以建议更换新的服务器,尽快恢复业务!

Linux系统中病毒怎么解决

1
2
1)先将中毒服务器的网络断开;2)查找并删除病毒,top命令找到cpu使用率最高的进程,可以用ps aux 找到病毒文件位置,rm -f 命令删除病毒文件,检查计划任务、开机启动项和病毒文件目录有无其他可疑文件,chkconfig --list | grep 3:on;然后检查开机启动的一个文件,more /etc/rc.local;3)即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装系统。

发现一个病毒文件你删了他又自动创建怎么解决

1
2
3
4
5
1)先断掉网络连接,断了外网,病毒就失去外联的能力,杀掉它就容易的多;断了内网,就不会扩大危害范围;
2)查看确定可疑进程,ps axu一个个排查可疑的用户及系统文件相似而又不是的文件,用lsof -p pid可以查看到具体是那些进程,经查发现可疑文件,rm -rf后不到一分钟就自动生成,由此推断是某个母进程产生的这些文件。所以找到母进程就是找到罪魁祸首,用命令杀掉即可
3)总结,尽量不要重装系统
一般就是先断外网,然后利用iftop,ps,netstat,chattr,lsof,pstree这些工具顺藤摸瓜

常用网络问题排查命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ping :判断两个网络是否可互通。
ARP 地址解析协议
功能:显示和修改IP地址与MAC地址的之间映射
arp -a :显示所有的ARP表项
arp -s IP MAC 在ARP中缓存添加一条记录
arp -d IP 在ARP中缓存删除一条记录
arp -g 显示所有表项
netstat
该命令显示协议统计信息和当前的TCP/IP连接。
1》netstat -a 显示所有连接和侦听端口,服务器连接通常不显示
2》netstat -e 显示以太网统计
3》netstat -n 以数字格式显示IP地址和端口号
4》netstat -r 显示路由表的内容
5》netstat -s 显示每个协议的统计
telnet ip 端口

拉升CPU使用率

1
cat /dev/zero>/dev/null

查看多核CPU负载情况及设置负载分配

1
2
执行 yum -y install sysstat 命令安装工具, mpstat -P ALL 1 10命令查看负载情况
mpstat -P ALL 1 10

1
如上命令的含义是每秒运行一次 mpstat,一共采样 10 次取平均值,可以明显看出 CPU0 的空闲 idle 明显小于其它 CPUx,而且大部分都消耗在了用户态 usr 上面。各参数含义可以对照下面表格
mpstat命令参数 解释
-P 表示监控哪个CPU,例如mpstat -P 0、mpstat -P 7、mpstat -P ALL、mpstat -P 0,2
-A 等同于-u -I ALL -P ALL
-I 可以指定SUM、CPU、SCPU、ALL四个参数,SUM表示每个处理器的中断总数,CPU表示每个核的每秒中断数量, SCPU表示每个核每秒的软中断数量,内核版本在2.6.31之后才支持
internal 相邻的两次采样的间隔时间
count 采样的次数,count只能和delay一起使用
mpstat 返回值 解释 从/proc/stat获得数据
%usr 用户态下,cpu的利用率 usr/total*100
%nice 具有nice优先级的用户下,CPU的使用率 nice/total*100
%sys 显示在kernel内核态执行时发生的CPU利用率百分比。这不包括维护硬件和软件中断所花费的时间 nice/total*100
%iowait 显示系统有未完成的磁盘I/O请求时,CPU或CPU处于空闲状态的时间百分比 iowait/total*100
%irq 系统服务于硬中断的时间开销的百分比 irq/total*100
%soft 系统服务于软中断开销的时间开销百分比 softirq/total*100
%steal 显示虚拟CPU或CPU在虚拟机监控程序为另一个虚拟处理器提供服务时被迫等待所花费的时间百分比 steal/total*100
%guest CPU处理虚拟进程的花费的时间开销 guest/total*100
%gnice gnice/total*100
%idle CPU空闲百分比 idle/total*100
1
2
3
4
继续通过 pidstat 命令来确认一下是不是 mysqld 导致的CPU0负载问题 , 第一列是出现次数,第二列表示第几个CPU2
[root@VM-2-4-centos ~]# pidstat | grep mysqld | awk '{print $(NF-1)}' | sort | uniq -c
2 0

CPU使用率过高的排查方法

1
%Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
参数 解释
us(user) 表示 CPU 在用户运行的时间百分比,通常用户 CPU 高表示有应用程序比较繁忙。典型的用户程序有数据库、Web 服务器等。
sy(sys) 表示 CPU 在内核态运行的时间百分比(不包括中断),通常内核态 CPU 越低越好,否则表示系统存在某些瓶颈。
ni(nice) 表示用 nice 修正进程优先级的用户进程执行的 CPU 时间。nice 是一个进程优先级的修正值,如果进程通过它修改了优先级,则会单独统计 CPU 开销。
id(idle) 表示 CPU 处于空闲态的时间占比,此时,CPU 会执行一个特定的虚拟进程,名为 System Idle Process。
wa(iowait) 表示 CPU 在等待 I/O 操作完成所花费的时间,通常该指标越低越好,否则表示 I/O 存在瓶颈,可以用 iostat 等命令做进一步分析。
hi(hardirq) 表示 CPU 处理硬中断所花费的时间。硬中断是由外设硬件(如键盘控制器、硬件传感器等)发出的,需要有中断控制器参与,特点是快速执行。
si(softirq) 表示 CPU 处理软中断所花费的时间。软中断是由软件程序(如网络收发、定时调度等)发出的中断信号,特点是延迟执行。
st(steal) 表示 CPU 被其他虚拟机占用的时间,仅出现在多虚拟机场景。如果该指标过高,可以检查下宿主机或其他虚拟机是否异常。

其他命令查看CPU负载

1
2
3
4
5
6
7
8
9
10
查看系统负载的工具:uptime ,w ,都能查看系统负载,系统平均负载是处于运行或不可打扰状态的进程的平均数6,
可运行:运行态,占用CPU,或就绪态,等待CPU调度。
不可打扰:阻塞,正在等待I/O
使用uptime查看系统负载
# uptime
10:10:22 up 55 days, 22:13, 1 user, load average: 0.00, 0.01, 0.05
这里我们关注的是最后三列,即系统1分钟、5分钟、15分钟内的平均负载,判断一个系统负载是否偏高需要计算单核CPU的平均负载,等于这里uptime命令显示的系统平均负载 / CPU核数,一般以0.7为比较合适的值。偏高说明有比较多的进程在等待使用CPU资源。
使用 w 命令也可以查看类似的信息,w 命令还提供了当前登录用户,以及正在执行的操作等信息。
系统负载可以是CPU密集型的,也可以是RAM密集型和I/O密集型的,CPU密集型的系统比I/O密集型的系统响应度更好,因为I/O密集型的系统的磁盘I/O可能完全饱和,导致登录就很费事。

日志分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
日志概述
/var/log/
/var/log/wtmp 登录进入、退出、数据交换、关机和重启,即last
/var/log/cron 计划任务有关的日志信息
/var/log/messages 系统启动后的信息和错误日志
/var/log/apache2/access.log Apache 访问日志
/var/log/auth.log 系统授权信息,包括账号登录和使用的权限机制
/var/log/userlog 所有等级账号信息日志
/var/log/vftpd.log FTP 日志
/var/log/lastlog 登录的账号,也可以使用命令 lastlog 查看
/var/log/secure 大多数应用输入的账号和密码,以及登录成功与否
/var/log/faillog 登录系统失败的账号信息

日志分析

grep

sed

sort

awk

常用日志文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
1./var/log/boot.log
  记录了系统在引导过程中发生的事件,其实就是Linux系统开机自检过程显示的信息可在终端输入命令“cat /etc/log/boot.log”进行查看

2./var/log/cron
  该日志文件记录crontab守护进程crond所派生的子进程的动作,前面加上用户登录时间和PID以及派生出的进程的动作CMD的一个动作是cron派生出一个调度进程的常见情况REPLACE替换动作记录用户对它的cron文件的更新该文件列出了要周期性执行的任务调度 RELOAD动作在REPLACE动作后不久发生这意味着cron注意到一个用户的cron文件被更新而cron需要把它重新装入内存该文件可能会查到一些反常的情况

3./var/log/maillog
  该日志文件记录了每一个发送到系统或从系统发出的电子邮件的活动它可以用来查看用户使用哪个系统发送工具或把数据发送到哪个系统

4. /var/log/lastlog
  该日志文件记录最近成功登录的事件和最后一次不成功的登录事件,由login生成在每次用户登录时被查询,该文件是二进制文件,需要使用lastlog命令查看根据UID排序显示登录名端口号和上次登录时间如果某用户从来没有登录过就显示为"Never logged in"该命令只能以root权限执行简单地输入lastlog命令后就会看到类似如下的信息
  注:系统账户诸如bindaemonadmuucpmail等决不应该登录的,如果发现这些账户已经登录就说明系统可能已经被入侵了若发现记录的时间不是用户上次登录的时间则说明该用户的账户已经泄密了

5. /var/log/messages
  记录Linux操作系统常见的系统和服务错误信息该日志文件是许多进程日志文件的汇总,从该文件可以看出任何入侵企图或成功的入侵

6. /var/log/secure
  Linux系统安全日志,该日志文件记录与安全相关的信息

7. /var/log/btmp
  记录Linux登陆失败的用户时间以及远程IP地址使用last命令可以查看btmp文件例如:last -f /var/log/btmp | more

8. /var/log/syslog
  只记录警告信息,常常是系统出问题的信息,使用 lastlog 查看它和 /etc/log/message s日志文件不同,它只记录警告信息,常常是系统出问题的信息,所以更应该关注该文件。默认CentOS、Fedora不生成该日志文件,但可以配置/etc/syslog.conf或者rsyslog.conf,让系统生成该日志文件,在配置文件中加上*.warning /var/log/syslog,该日志文件能记录当用户登录时login记录下的错误口令Send mail的问题su命令执行失败等信息

9. /var/log/wtmp
  该日志文件永久记录每个用户登录注销及系统的启动停机的事件,使用last命令查看该日志文件永久记录每个用户登录注销及系统的启动停机的事件因此随着系统正常运行时间的增加,该文件的大小也会越来越大,增加的速度取决于系统用户登录的次数该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户终端tty或时间显示相应的记录

10. /var/run/utmp
  该日志文件记录有关当前登录的每个用户的信息如 whowusersfinger等就需要访问这个文件该日志文件记录有关当前登录的每个用户的信息因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录系统中需要查询当前用户状态的程序,如 whowusersfinger等就需要访问这个文件该日志文件并不能包括所有精确的信息,因为某些突发错误会终止用户登录会话,而系统没有及时更新 utmp记录,因此该日志文件的记录不是百分之百值得信赖的其中,/var/log/syslog或/var/log/messages存储所有的全局系统活动数据,包括开机信息基于Debian的系统如Ubuntu在/var/log/syslog中存储它们,而基于RedHat的系统如 RHEL或CentOS则在/var/log/messages中存储它们

11. /var/log/auth.log或/var/log/secure
  存储来自可插拔认证模块(PAM)的日志,包括成功的登录失败的登录尝试和认证方式Ubuntu和Debian在/var/log/auth.log中存储认证信息,而RedHat和CentOS则在/var/log/secure中存储该信息

12.(/var/log/wtmp、/var/run/utmp、/var/log/lastlog)
  这三个文件是日志子系统的关键文件,都记录了用户登录的情况这些文件的所有记录都包含了时间戳这些文件是按二进制保存的,故不能用lesscat之类的命令直接查看这些文件,而是需要使用相关命令通过这些文件而查看其中,utmp和wtmp文件的数据结构是一样的,而lastlog文件则使用另外的数据结构,关于它们的具体的数据结构可以使用man命令查询每次有一个用户登录时,login程序在文件lastlog中查看用户的UID如果存在,则把用户上次登录注销时间和主机名写到标准输出中,然后login程序在lastlog中记录新的登录时间,打开utmp文件并插入用户的utmp记录该记录一直用到用户登录退出时删除utmp文件被各种命令使用,包括whowusers和finger下一步,login程序打开文件wtmp附加用户的utmp记录当用户登录退出时,具有更新时间戳的同一utmp记录附加到文件中wtmp文件被程序last使用

在CentOS 7上,你可以使用systemd的功能来实现对SSH登录失败次数进行监控,并拉黑IP。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
在CentOS 7上,你可以使用fail2ban工具来实现对SSH登录失败次数的监控,并将IP永久拉黑,并将IP及其地域记录到文本文件。
首先,安装epel-release扩展软件包:
sudo yum install epel-release -y
接下来,安装fail2ban工具:
sudo yum install fail2ban -y
然后,配置Fail2Ban来监控SSH登录失败情况。编辑Fail2Ban的主配置文件:
sudo vim /etc/fail2ban/jail.local
找到并修改以下行:
[sshd]
enabled = true # 将false改为true
maxretry = 5 # 设置最大重试次数(默认是6)
bantime = permanent # 拉黑时间设置成permanent(永久)

# 如果需要适用于ipv6,请取消注释并更改为:action_ = %(action_)s-iptables[name=ssh, port="ssh", protocol=tcp_ipv6]
action = firewallcmd-ipset # 使用Firewalld添加防火墙规则

# 加入以下配置以执行自定义脚本
banaction = iptables-multiport # 使用iptables作为封禁动作
findtime = 3600 # 设定触发封禁条件的时间窗口(单位秒)
backend=auto # 自动选择fail2ban后端,默认即可(auto)
# stemail = your_email@example.com # 报警邮件地址,如果不需要可以删除或注释掉
# a = sendmail # 发送报警邮件的方法,如果不需要可以删除或注释掉
action_ = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s]
保存并关闭文件。

接下来,创建一个用于记录IP和地域的脚本。创建一个名为record_ip.sh的新文件,并添加以下内容:

#!/bin/bash

ip=\$1
location=\$(curl -s ipinfo.io/\$ip | jq -r '.country + " " + .region + " " + .city')
time=\$(date +"%Y-%m-%d %H:%M:%S")

echo "\$ip \$time \$location" >> /path/to/log/file.txt
将上述代码中的/path/to/log/file.txt替换为你希望存储IP和地域信息的文本文件的实际路径。
设置脚本文件可执行权限:
chmod +x record_ip.sh
最后,重新启动Fail2Ban服务:
sudo systemctl restart fail2ban
现在,当一个IP地址通过SSH登录失败达到设定的阈值(这里是10次),Fail2Ban将永久禁止该IP访问SSH服务,并将其添加到IP和地域日志文件中。
请注意,请确保你安装了jq命令工具,它被用于解析IP信息请求返回的JSON数据。使用以下命令安装jq:
sudo yum install jq -y
此外,还应该正确配置您系统上的FirewallD以允许SSH连接。