[TOC]

Linux三剑客

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
文本分析AWK #
awk是一种编程语言,是一个文本处理工具,是一个强大的命令行解释器,用于在linux/unix下对文本和数据进行处理 ;awk 可以执行一系列的操作,包括从文件或管道中读取文本数据、解析文本中的字段和行、过滤和转换数据、执行计算和打印结果等。它是一种灵活的工具,可以通过编写脚本来控制其行为和操作。

awk 的名称来自于它的创建者 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏的首字母。

数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出;

它支持用户自定义函数和动态正则表达式;

awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势

基本语法: #
awk [options] 'Pattern{Action}' filename
command [选项 参数] '模式{动作}' 文件
其中:

pattern:是一个正则表达式,用于匹配文本中的特定行或数据。
action:是在匹配到 pattern 时要执行的一组命令。
file:是要处理的文本文件的名称或从标准输入读取的数据。
常用命令选项: #
-F fs #fs指定命令分隔符,如 -F: 如果没有指定分割符,默认使用空格作为分隔符(或使用-v FS,FS是内置变量)
-v var=value #赋值一个用户定义变量,将外部变量传递给awk,比如使用-v OFS="+",指定输出分隔符
-f script #从脚本文件中读取awk命令
最简单的用法:只用action #
$ echo "hello world" > test
$ awk '{print}' test
hello world
$ awk '{print $0}' test #$0表示所有域(默认用空格当作分隔符)
hello world
$ awk '{print $1}' test #$1表示第一个域,两个域用逗号隔开$1,$2,去掉逗号或换为空格输出时会没有分隔符显示在一列
hello
##############################
df -h | awk '{print $5}' #df显示磁盘使用情况,这里使用awk只打印每行的第五列,$NF可以只输出每行的最后一列
特殊模式的用法: #
BEGIN 模式指定了处理文本之前需要执行的操作:(BEGIN开始);不指定文件也能输出(但是后边指定操作也会卡住)

END 模式指定了处理完所有行之后所需要执行的操作:(END结束);不指定文件会卡住

$ awk 'BEGIN{print "wintrysec"} {print $0} END{print "1080"}' test
wintrysec
hello world
1080
AWK变量: #
常用内置变量:

FS #输入字段分隔符, 默认为空白字符
OFS #输出字段分隔符, 默认为空白字符
RS #输入记录分隔符(默认输入是换行符), 指定输入时的换行符
ORS #输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NF #number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
NR #行号,当前处理的文本行的行号。
FNR #各文件分别计数的行号,另一个文件从1开始计行数
ARGC #命令行参数的个数
ARGV #数组,保存的是命令行所给定的各参数,AGRV[0]是awk
FILENAME#当前文件名
自定义变量的两种用法:

$ awk -v name="wintrysec",age=19 'BEGIN{print name}' #第一种方法用-v选项,多个参数用逗号分隔 不加BENGIN会卡住
wintrysec
$ awk 'BEGIN{name="wintrysec";age=18;print name,age}' #第二种方法,直接在程序中定义,多个参数用分号分隔
wintrysec 18
举例 #
例如,如果你想要从一个名为 example.txt 的文件中提取第二列(使用空格作为分隔符),可以使用以下命令:

awk '{print $2}' example.txt
如果您想要计算文件中第一列的总和,则可以使用以下命令:

awk '{sum += $1} END {print sum}' example.txt
这将把第一列的值相加,并在处理完整个文件后输出总和。

文本批量处理sed #
sed -- Stream EDitor

主要用来自动编辑一个或多个文件;简化对文件的反复操作;

命令格式: #
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
常用选项: #
-e<script> #以选项中的指定的script来处理输入的文本文件;
-f<script文件> #以选项中指定的script文件来处理输入的文本文件;
-n #仅显示script处理后的结果;
替换标记: #
g #表示行内全面替换;即替换每一行中的所有匹配
p #表示打印行。
w #表示把行写入一个文件。
x #表示互换模板块中的文本和缓冲区中的文本。
y #表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\1 #子串匹配标记
& #已匹配字符串标记
常用命令: #
d 删除,删除选择的行。 s 替换指定字符 p 打印模板块的行。 P (大写) 打印模板块的第一行。

常见用法: #
替换文本中的字符串 (如linux日志处理,伪造IP)

sed -i 's/192.168.1.3/192.168.1.4/g' xxx.log #-i选项表示直接编辑文件
定界符:

以上命令中字符 / 在sed中作为定界符使用,也可以使用任意的定界符:

sed 's|test|TEXT|g'
定界符出现在样式内部时,需要进行转义:

sed 's/\/bin/\/usr\/local\/bin/g'
删除操作(d命令):

sed '/^$/d' file #删除空白行
sed '2d' file #删除文件的第二行
sed '2,$d' file #删除文件的第2行到末尾所有行
sed '$d' file #删除文件最后一行
sed '/^test/'d file #删除文件中所有开头是test的行
常见面试题 #
把/oldboy目录以及子目录下所有以扩展名为.sh结尾的文件包含oldboy的字符串全部替换为oldgirl

find /oldboy -type f -name "*.sh"|xargs sed "s#oldboy#oldgirl#g"
grep文本正则匹配 #
grep #正则匹配,搜索文本."Global Regular Expression Print"这是一个用于在文本中查找和过滤匹配字符串或正则表达式的命令.帮助用户快速定位关键信息。 常见用法:

grep "text" file_name #返回一个包含text的文本行
grep "text" file1 file2 #在多个文件中查找
grep -v "text" file_name #-v选项,输出排除text之外的所有行
grep -E "[1-9]+" #-e选项,使用正则表达式
grep -c "text" file_name #统计文件中匹配字符串的行数

Linux基础命令

1
2
3
4
5
6
7
8
9
10
11
12
pwdcdls -al、touchmkdir
cpmvrm、find / -name xx* 、du(计算目录容量)
cat、more (逐页阅读,空格下一页,b返回上一页)
head -n 2 xx.txt #查看前两行
tail -n 3 ca.* #查看ca开头的文件的后3行
echo #用于在shell中打印shell变量的值,或者直接输出指定的字符串
ln -s 源文件 目标文件 #(-s软链接、不可删除源文件;硬链接时,源文件只能为文件不能是目录)

wc #显示文件的行、单词、字节统计信息(-l、-w、-c)

Vim工作模式:普通模式、插入模式(i)、命令模式(:)
Vim查找替换:普通模式下-> /向下查找 ?向上查找 n跳到下一个匹配处

账户管理

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
id  #打印用户的UID和GID,root组的GID号是:0,bin组GID号是:1,daemon组GID号是:2,sys组GID号是:3
passwd #后单跟用户名跟改密码
-l #锁定用户不能跟改密码
-d #清除用户密码
-S #查询用户密码状态

useradd #添加用户,-d指定家目录,-g指定主要组,-G指定次要组,-s指定缺省shell
groupadd #添加组,-g指定组ID
usermod #修改用户信息,-e有效期,-f宽限天数,-l账户名称,-L锁定用户,-u修改用户ID
userdel #删除用户,-f强制删除 即使用户已登录,-r同时删除用户相关所有文件
groupdel #删除工作组

#账户信息文件:/etc/passwd
root:x:0:0:root:/root:/bin/bash
用户名:密码:用户ID:组ID:用户说明(描述):用户主(家)目录:缺省shell(登陆后的shell)
注意:无密码只允许本机登陆,远程不允许登陆

#账户密码文件:/etc/shadow
root:$Gs1qhL2p3ZetrE4.kMHx6qgbTcjQSt.Ft7ql1WpkopY/:16809:0:99999:7:::
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:
密码有效期:密码到期的警告天数:密码过期宽限天数:账号失效时间:保留

#组账户信息文件:/etc/group
root:x:0:
组名:口令:组标识号:组内用户列表

who #查看当前登录用户(tty本地登陆 pts远程登录)
w #查看系统信息,想知道某一时刻用户的行为
uptime #查看登陆多久、多少用户,负载

文件和目录权限管理

1
2
3
4
5
drwx-rwx-rwx #d代表目录、读、写、执行(4、2、1) -> user、group、other -> 所有者用户、组、其他用户的权限
chmod #改变文件和目录权限
chown #改变文件和目录所有者和组
chmod +x Test.sh #增加执行权限
chmod -x Test.sh #去除执行权限

计划任务

都是以当前用户的权限去执行计划任务的

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
## at一次性计划任务 [#](https://wiki.wgpsec.org/knowledge/base/linux-cmd.html#at一次性计划任务)

需要开启`atd`服务(需要root权限)

```bash
sudo /etc/init.d/atd restart
```

**at的运行方式**

事实上我们仅使用at命令来生成所要运行的工作,并将这个工作以文本文件的方式写入/var/spool/at目录内

该工作就可以被`atd`服务取用并执行,at的实际工作情况是这样的:

> 1:先查找`/etc/at.allow`文件,写在这个文件中的用户才可以使用at,没有在`at.allow`文件中的用户就不可以使用,即使`at.deny`中也没有
>
> 2:如果`at.allow`不存在,就查找`/etc/at.deny`,写在这个文件中的用户都不能使用at,而其他用户都可以使用at
>
> 3:如果两个文件都不存在,那么就只有root用户可以执行at

**选项参数:

-l #相当于atq,列出系统上该用户的所有at调度
-d #相当于atrm,取消一个在at中调度的工作
-v #使用较明显的时间格式列出at调度中的任务列表
-c #查看at计划任务的具体内容,后接job名

$ at 18:00
at>sh cmd.sh
at>(输入ctrl+d)

crontab 周期性计划任务

(user权限不能查看www-data权限的任务)

1
2
3
4
5
6
7
8
9
10
11
12
-u #只有root用户可以执行这个任务,也即帮其他用户新建、删除任务
-e #edit user's crontab
-l #list user's crontab
-r #delete user's crontab
-i #prompt before deleting user's crontab

#================#
#======例子======#
#================#

0 12 * * * sh shell.sh
#上边这条任务代表每天12点执行一次 sh shell.sh

前面5个字段分别表示分钟小时日期月份,后面接的是命令

代表意义 分钟 小时 日期 月份 命令
数字范围 0-59 0-23 0-31 0-12 0-7 要执行的命令

其中周里面的0和7都代表周日,注意周与日月不可并存

特殊字符:

特殊字符 代表意义
*(星号) 任意时刻,如0 12 * * * sh shell.sh的*代表每个月的每个周中的每一天
,(逗号) 代表分割时段,例如0 3,6 * * * command,表示在3点和6点时执行任务,注意不要有空格符
-(减号) 代表时间段范围,例如在凌晨1点到6点的30分的时候执行command命令则应该是 30 1-6 * * * command
/n 表示每隔n个单位间隔执行一次的意思,*/11-23 * * * command表示凌晨1到晚上23点时间段内每隔1分钟执行一次

网络监控netstat

1
2
3
4
5
6
7
8
9
netstat #打印网络连接、路由表、网络接口统计信息
-a #显示所有socket,包括正在监听的
-n #使用数字形式的IP
-t #查看tcp连接信息
-p #显示进程及对应ID号

-l #显示正在监听的sockets接口信息
-u #查看udp连接信息
-s #显示各种协议统计信息

查看当前端口连接

1
2
netstat -antp
ss -l

ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

Windows平台netstat详解 #

netstat 用于显示与IP 、TCP 、UDP 和ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况.

1
2
3
4
5
6
-a  显示所有连接和监听端口
-n 以数字形式显示地址和端口号,显示所有已建立的有效连接
-o 显示进程 PID

-p proto ,指定协议TCP、UDP
-r 打印路由表,通route print

状态列表

1
2
3
4
5
LISTEN  #在监听状态中
ESTABLISHED #已建立联机的联机情况
TIME_WAIT #该联机在目前已经是等待的状态
CLOSE_WAIT #被动关闭的一方,收到FIN包后,协议层回复ACK(阻塞住了)
FIN_WAIT_2 #主动关闭的一方等待对方关闭

对外发包还是被连接? 高端口连接低端口

进程监控 PS #

1
2
3
4
5
6
7
8
#grep表示在这些里搜索,而ps aux是显示所有进程和其状态
ps aux | grep amoeba #查到amoeba的进程
kill -s 9 pid #杀死进程


a #显示现行终端机下的所有程序,包括其他用户的程序
u  #以用户为主的格式来显示程序状况。
x  #显示所有程序,不以终端机来区分

Linux上进程有5种状态:

  1. 运行 (正在运行或在运行队列中等待)
  2. 中断 (休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  3. 不可中断 (收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  4. 僵死 (进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  5. 停止 (进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps aux输出格式:

1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

1

格式说明:

USER: 行程拥有者

1
PID: pid

%CPU: 占用的 CPU 使用率

%MEM: 占用的记忆体使用率

VSZ: 占用的虚拟记忆体大小

RSS: 占用的记忆体大小

TTY: 终端的次要装置号码 (minor device number of tty)

STAT: 该行程的状态,linux的进程有5种状态:

  • D 不可中断 uninterruptible sleep (usually IO)
  • R 运行 runnable (on run queue)
  • S 中断 sleeping
  • T 停止 traced or stopped
  • Z 僵死 a defunct (”zombie”) process

注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页)

START: 行程开始时间

TIME: 执行的时间

COMMAND:所执行的指令

wget和curl命令 #

wget

1
2
3
4
wget命令用来从指定URL下载文件,稳定、支持断点续传。

-O #重命名下载的文件
-c #断点续传

curl

1
2
3
4
5
6
7
8
9
10
curl命令是一个利用URL规则在命令行下工作的文件传输工具

-O #把服务器响应输出到指定文件
-L #自动跳转到重定向链接
-i #输出包含响应头的信息
-I #仅输出响应头
-v #显示http通信过程,包括端口连接和http request头信息
-X #指定请求方式(GET|POST|PUT)
-H #添加请求头('key:value')
-d #指定POST请求体

Linux后台执行命令 #

1
2
3
4
5
6
7
8
9
1、ctrl + z     #将一个正在前台执行的命令放到后台,并且处于暂停状态
2、bg #将一个在后台暂停的命令,变成在后台继续执行 (配合上边的1在后台运行)
3、& #命令后加个&符号
4、nohup ./task
#命令前添加nohup,让程序始终在后台执行,即使关闭当前的终端也执行(用exit退出账户)
#ps查看此进程,jobs无法查看

5、jobs #查看后台运行的命令
6、fg #将后台中的命令调至前台继续运行

获取/proc目录信息 #

1
ls /proc #系统信息,硬件信息,内核版本,加载的模块,进程;可以用来提升权限

其中的部分文件分别对应正在运行的进程,可用于访问当前进程的地址空间。

它是一个非常特殊的虚拟文件系统,其中并不包含“实际的”文件,而是可用以引用当前运行系统的系统信息,

如CPU、内存、运行时间、软件配置以及硬件配置的信息,这些信息是在内存中由系统自己产生的。

/proc/net 其中的文件分别表示各种网络协议(如TCP、UDP以及ARP等)的状态与统计信息。 /proc/sys 这个目录不仅存有各种系统信息,而且也包含系统内核与TCP/IP网络的可调参数。

其中的kernel子目录含有共享内存和消息队列的可调参数,net子目录中含有TCP/IP的各种可调参数。

Centos系统设置 #

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#Centos最小化安装时没有ifconfig等命令
yum provides ifconfig #查看那个组件包,包含了 ifconfig 命令
yum -y install net-tools #安装组件包

#配置静态 IP 地址并访问互联网
vi /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=dhcp/static #静态 IP
IPADDR=192.168.1.11 #本机地址
NETMASK=255.255.255.0 #子网掩码
GATEWAY=192.168.1.255 #默认网关

vi /etc/resolv.conf
nameserver 114.114.114.114 #配置DNS

service network restart #重启网络

防火墙 FireWall 和 SELinux 打开和关闭 #

1
2
3
4
firewall-cmd --state    #查看防火墙状态
systemctl start firewall.service #开启防火墙
systemctl stop firewall.service #停止防火墙
systemctl disable firewall.service #禁止开机启动

SELinux是「Security-Enhanced Linux」的简称,是Linux的一个扩张强制访问控制安全模块

1
2
3
4
5
6
7
8
#临时关闭SELinux,1启用
setenforce 0

#永久关闭
vim /etc/selinux/config/ --> SELINUX=disabled

# SELINUX参数enforcing代表打开,disabled代表关闭
# 查看selinux状态: getenforce

systemctl 命令使用详解 #

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#列出当前系统服务的状态
systemctl list-units

#列出服务的开机状态
systemctl list-units-files

#列出指定服务的状态
systemctl status sshd

#重启服务
systemctl restart sshd

#设定指定服务开机开启
systemctl enable sshd

systemctl set-default multi-user.target #开机不开启图形
systemctl set-default graphical.target #开机启动图形

配置防火墙 #

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
#查询端口是否开放
firewall-cmd --query-port=80/tcp

#开放80端口
firewall-cmd --permanent --add-port=80/tcp

#移除端口
firewall-cmd --permanent --remove-port=80/tcp

#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

#参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;

#针对某个 IP开放端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.189.128" port protocol="tcp" port="80" accept"

#删除某个IP
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.189.128" accept"

#针对一个ip段允许访问
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/16" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="9200" accept"

#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

iptables工作在TCPIP模型中的第七层,应用层 #

目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关。

对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测。

但是对于七层的防火墙,不管你源端口或者目标端口,源地址或者目标地址是什么,都将对你所有的东西进行检查。

所以,对于设计原理来讲,七层防火墙更加安全,但是这却带来了效率更低。

所以市面上通常的防火墙方案,都是两者结合的。

而又由于我们都需要从防火墙所控制的这个口来访问

所以防火墙的工作效率就成了用户能够访问数据多少的一个最重要的控制

配置的不好甚至有可能成为流量的瓶颈。

linux应急响应

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
账号安全 #
先查看基础用户信息文件(/etc/passwd,/etc/shadow,/etc/group)
1、查询特权用户特权用户(uid 为0)
awk -F: '$3==0{print $1}' /etc/passwd

2、查询可以远程登录的帐号信息
awk '/\$1|\$6/{print $1}' /etc/shadow

3、除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"

4、禁用或删除多余及可疑的帐号
usermod -L user #禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头
userdel -r user #将删除user用户,并且将/home目录下的user目录一并删除

查看历史命令 #
cat ~/bash_history >> history.txt

检查网络连接 #
netstat -antlp|more

#查看 PID 所对应的进程文件路径
file /proc/$PID/exe

检查异常进程 #
ps aux | grep pid
检查开机启动项 #
系统运行级别示意图:

运行级别 含义
0 关机
1 单用户模式,可以想象为windows的安全模式,主要用于系统修复
2 不完全的命令行模式,不含NFS服务
3 完全的命令行模式,就是标准字符界面
4 系统保留
5 图形模式
6 重启动

#系统默认允许级别
vi /etc/inittab
id=3:initdefault #系统开机后直接进入哪个运行级别
当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在/etc/init.d目录下,然后在/etc/rc.d/rc*.d中建立软链接即可

ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
#S开头代表加载时自启动
检查定时任务 #
ls -al /var/spool/cron/*
cat /etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/

#查看目录下所有文件
more /etc/cron.d/*

/etc/anacrontab
/var/spool/anacron/*

检查服务 #
chkconfig --list #查看服务自启动状态,可以看到所有的RPM包安装的服务

#源码包安装的服务位置
/user/local/
检查异常文件 #
1、查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性

2、针对可疑文件可以使用stat查看创建修改时间

3、发现WebShell、远控木马的创建时间

如何找出同一时间范围内创建的文件?

find ./ -iname "*" -atime 1 -type f
#找出 ./ 下一天前访问过的文件
检查系统日志 #
日志默认存放位置:/var/log/

查看日志配置情况:more /etc/rsyslog.conf

日志文件 说明
/var/log/cron 记录系统定时任务相关的日志
/var/log/message 记录Linux操作系统常见的系统和服务错误信息(首要检查对象)
/var/log/btmp 记录错误登录(登陆失败)日志;使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次成功登录时间,使用lastlog命令查看
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件;用last命令来查看
/var/log/utmp 只记录当前登录用户的信息;使用w,who,users等命令来查询
/var/log/secure 记录验证和授权方面的信息,如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码
#查询ssh登录记录
more /var/log/secure

#安装软件的日志-> Centos
/var/log/yum.log
#安装软件的日志-> Ubuntu
/var/log/apt/
/var/log/syslog:只记录警告信息,常常是系统出问题的信息;

syslog是Linux系统默认的日志守护进程

默认的syslog配置文件是/etc/sysctl.conf文件

syslog不可以使用vi等工具直接查看,它是二进制文件,使用 lastlog 查看

默认Centos,Fedora不生成该日志文件,但可以配置让系统生成该日志文件

/etc/rsyslog.conf文件中加上:*.warning /var/log/syslog

该日志文件能记录当用户登录时login记录下的错误口令、Sendmail的问题、su命令执行失败等信息

正确清空syslog日志的方式

cat /dev/null > /etc/init.d/syslog

Windows应急响应

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
检查系统账号 #
#查询当前登录系统的会话
query user

#把用户踢出会话
logoff ID
打开lusrmgr.msc,查看是否有新增/可疑的账号

用D盾 -> 查看服务器是否存在隐藏账号、克隆账号

查看网络连接 #
#查看本机所有的tcp,udp端口连接及其对应的pid
#可用findstr过滤,类似Linux的grep命令
netstat -ano

#打印路由表
route print

#查看网络代理配置情况
REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
检查进程 #
#列出所有进程
tasklist

#强制停止某进程
taskkill /T /F /PID
检查启动项 #
#查看系统开机时间
net statistics workstation

#查看系统计划任务
schtasks /query /fo LIST /v

#查看程序启动信息
wmic startup get command,caption

#查看主机服务信息
wmic service list brief
检查浏览器访问记录 #
直接打开浏览器查看

杀软工具 #
火绒-火绒剑:https://www.huorong.cn/

卡巴斯基:http://devbuilds.kaspersky-labs.com/kvrt/latest/full/

系统日志审计 #
运行框输入eventvwr.msc,打开事件查看器

系统日志

记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。 系统日志中记录的时间类型由Windows NT/2000操作系统预先定义。 默认位置:%SystemRoot%System32WinevtLogsSystem.evtx

应用程序日志

包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件 例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件。 如果某个应用程序出现崩溃情况,那么我们可以从程序事件日志中找到相应的记录,也许会有助于你解决问题。 默认位置:%SystemRoot%System32WinevtLogsApplication.evtx

安全日志

记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、帐号管理、策略变更、系统事件。 安全日志也是调查取证中最常用到的日志。 默认设置下,安全性日志是关闭的,管理员可以使用组策略来启动安全性日志 或者在注册表中设置审核策略,以便当安全性日志满后使系统停止响应。 默认位置:%SystemRoot%System32WinevtLogsSecurity.evtx

系统和应用程序日志存储着故障排除信息,对于系统管理员更为有用。

安全日志记录着事件审计信息,包括用户验证(登录、远程访问等)和特定用户在认证后对系统做了什么,对于调查人员而言,更有帮助。

事件日志分析 #
对于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 缓存交互(CachedInteractive) 以一个域用户登录而又没有域控制器可