护网笔记(四)-Linux基础及入侵排查

声明:
本文内容均来自互联网,旨在提高网络安全水平,请遵守网络安全法规,不要将技术用于非法用途。本文严禁转载。

Linux

介绍

选择Linux的原因:

低风险:使用闭源软件无疑把命运交付给他人,一旦封闭的源代码没有人来维护,您将进退维谷。而且相较于商业软件公司,开源社区很少存在倒闭的问题。并且,源代码一旦公布于世,任何人或组织都可以接手进行新的维护工作。

高品质:相较于闭源软件产品,开源项目通常是由开源社区来研发及维护的,参与编写、维护、测试的用户数量众多,一般的bug还没有等暴发就已经被修补。另外,在灵感不断碰撞、代码不断迭代的交流氛围中,程序员也不可能将“半成品”上传到开源社区中。

低成本:开源工作者大多都是在幕后默默且无偿地付出劳动成果,为美好的世界贡献一份力量,因此使用开源社区推动的软件项目可以节省大量的人力、物力和财力。

更透明没有哪个笨蛋会把木马或后门代码放到开源项目中,这样无疑是把自己的罪行暴露在阳光之下,很容易被他人发现。

常见的Linux系统版本

  1. CentOS
  2. Fedora
  3. Debian
  4. ubuntu
  5. openSUSE
  6. Kali Linux
  7. Gentoo
  8. Deepin

安装

Kali Linux官网:
https://www.kali.org/get-kali/#kali-virtual-machines

在这里插入图片描述
我们直接下载VM文件解压就可以在VM中使用已经配置好的Linux了,比起自己配会方便许多。

Kali Linux的配置

修改root密码

sudo passwd root

更换新源
文件位置:

/etc/apt/sources.list

#中科大
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
 
#阿里云
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
 
#清华大学
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
 
#浙大
deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
deb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
 
#东软大学
deb http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
deb-src http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
 
#官方源
deb http://http.kali.org/kali kali-rolling main non-free contrib
deb-src http://http.kali.org/kali kali-rolling main non-free contrib
 
deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib

更新包列表&&更新包

apt-get update && apt-get upgrade

更新系统

apt-get dist-upgrade 

修改中文包

dpkg-reconfigure locales
#找到en_US.UTF-8 UTF-8选项,按空格键将其进行取消
#找到[ ]zh_CN.GBK_GBK 和[ ] zh-CN.UTF-8.UTF-8两个选项,
#使用空格将[ ]zh_CN.GBK_GBK 和[ ] zh-CN.UTF-8.UTF-8其两项勾选上
#勾选完毕以后,在<0k> 处按下空格,进行下一步
#选择zh_CN.UTF-8字符编码,在<0k> 处按空格键进行确认 ,并完成相关配置操作
#reboot命令重启系统使其生效

基础命令

Linux指令手册

https://www.linuxcool.com/

目录指令

命令格式

命令名称 [命令参数] [命令对象]

注意:命令名称、命令参数、命令对象之间请用空格键分隔。

命令对象:一般是指要处理的文件、目录、用户等资源。

命令参数:长格式(完整的选 项名称),也可以用短格式(单个字母的缩写),两者分别用--与-作为前缀。

长短格式 例如:
长格式 man --help
短格式 man -h 

命令名称:man

命令英文原意:manual

命令所在路径: /usr/bin/man

执行权限:所有用户

语法: man [命令或配置文件]

功能描述:获得帮助信息

例: man ls

查看ls命令的帮助信息

命令名称:pwd

命令英文:print working directory

命令所在路径:/bin/pwd

执行权限:所有用户

功能描述: 显示当前所在的工作目录

语法 pwd

pwd 和$PWD(变量,不需要定义),都可以表示当前目录,如
直接执行命令 pwd
echo $PWD
其它系统变量  $HOME $SHELL $USER

命令名称:cd

命令英文:change directory

命令所在路径:shell内置命令

执行权限:所有用户

功能描述: 切换目录文件

语法: cd【目录】

cd / 切换到根目录

cd .. 回到上一级目录

cd -      			进入上次的目录位置
cd 后面什么都不加    进入用户家目录
cd / 				进入根目录
cd ~ 			进入用户家目录,比如root用户就进入到/root,比如zzz用户,就进入到/home/zzz

系统工作指令

命令名称:echo

功能描述:用于在终端输出字符串或变量提取后的值。

echo命令是linux中最基础的命令,也是很常用的命令,特别是在写shell脚本的时候

语法:echo [字符串 | $变量]

例:

echo hello

echo $demo ##没有此变量,就没有回显

echo -n "www.baidu.com"  #添加了-n选项,文本直接连着命令提示符输出了,并没有换行
echo `ifconfig` #可以输出命令执行后的结果,保持原格式可以  echo "`ifconfig`"  注意是反引号

命令名称:date

功能描述:用于显示及设置系统的时间或日期

在日常工作常常有备份数据的命令结合使用,如 “backup-2017-9-1.log"

语法:date [选项] [+指定的格式]

参数 功能
%H 小时(00~23)
%I 小时(00~12)
%M 分钟(00~59)
%S 秒(00~59)
%j 今年中的第几天

例:

date -s "20210423 13:30:00"         # 将时间设置为 2021 年 1 月 23 日 8 点 30 分
date "+%Y-%m-%d %H:%M:%S"       #按照“年-月-日 小时:分钟:秒”的格式查看  24小时制
date "+%Y-%m-%d %I:%M:%S"       #按照“年-月-日 小时:分钟:秒”的格式查看  12小时制

date "+%j"     					#查看今天是当年中的第几天
Linux中的时钟分为硬件时钟和系统时钟两种
1、硬件时钟即BIOS时钟,就是CMOS设置时能看到的时间
2、系统时钟即Linux系统Kernel时间

date -s "2021-04-23 13:30:00" #校准时间
hwclock --systohc	#将系统时间和硬件时间同步
hwclock --show      #查看硬件时钟

命令名称:ps

语法:ps [参数]

使用权限:所有使用者

功能描述:显示瞬间行程 (process) 的动态,适用于进程的一次性的查看,如果想对进程时间连续性的监控,可以用top命令
在这里插入图片描述

参数 作用
-a 显示所有进程(包括其他用户的进程)
-u 用户以及其他详细信息
-x 显示没有控制终端的进程
USER 进程的属主;
PID 进程的ID;
PPID 父进程;
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
VSZ 进程虚拟大小;
RSS 驻留中页的数量;
TTY 终端ID
STAT 进程状态(有以下几种)
    (1)R运行状态(runing):并不意味着进程一定在运行中,也可以在运行队列里;
    (2)S睡眠状态(sleeping):进程在等待事件完成;(浅度睡眠,可以被唤醒)
    (3)D磁盘睡眠状态(Disk sleep):不可中断睡眠
    (深度睡眠,不可以被唤醒,通常在磁盘写入时发生)
    (4)T停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止进程,
    可以发送SIGCONT信号让进程继续运行
    (5)X死亡状态(dead):该状态是返回状态,在任务列表中看不到;
    (6)Z僵尸状态(zombie):子进程退出,父进程还在运行,但是父进程没有读到子进程的退出状态,
    子进程进入僵尸状态;
    (7)t追踪停止状态(trancing stop)
    < 优先级高的进程
    N 优先级较低的进程
    L 有些页被锁进内存;
    s 进程的领导者(在它之下有子进程);
    l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
    + 位于后台的进程组;
	WCHAN 正在等待的进程资源;
START 启动进程的时间;
TIME 进程消耗CPU的时间;
COMMAND 命令的名称和参数;

命令名称:top

功能描述:用于动态地监视进程活动与系统负载等信息

在这里插入图片描述

top 命令执行结果的前 5 行为系统整体的统计信息:

第 1 行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小意味着负载越低)。

第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程 数。

第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源 百分比、空闲的资源百分比等。 注: 第 3 行中的数据均为 CPU 数据并以百分比格式显示,例如“97.1 id”意味着有 97.1% 的 CPU 处理器资源处于空闲。

第 4 行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。

第 5 行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。

命令名称:uptime

语法:uptime

功能描述:用于查看系统的负载信息
在这里插入图片描述

它可以显示当前系统时间、系统已运行时间、启用终端数量以 及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、5 分钟、15 分钟内的压力情 况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过 1,在生产环境中不要 超过 5。

命令名称:free

语法:free [-h]

功能描述:用于显示当前系统中内存的使用量信息
在这里插入图片描述

# free -h 

命令名称:who

语法:who [参数]

功能描述:用于查看当前登入主机的用户终端信息

命令名称:kill

语法:kill [参数] [进程 PID]

功能描述:用于终止某个指定 PID 的服务进程,配合着pidof命令使用

[root@linuxprobe ~]# kill -9 2156	#表示进程被终止,进程会立即退出。 运维常用,但是很危险,慎用

命令名称:wget

语法:wget [参数] 下载地址

功能描述:在终端中下载网络文件

参数 作用
-b 后台下载
-O 下载到指定目录,同时重命名下载的文件
-t 最大尝试下载次数
-c 断点续传下载文件
-p 下载页面内所有资源
-r 指定递归下载
例:
wget  http://www.baidu.com		#下载到当前位置
wget -O /home/test/www.baidu  http://www.baidu.com	#下载到指定位置,并重命名
wget -b http://www.baidu.com		#当前目录下生成一个web-log记录下载的详细信息。
wget -rb  http://www.baidu.com		#会生成日志文件

命令名称:scp

语法:scp [参数] [原路径] [目标路径]

位置:/usr/bin/scp

功能描述:scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令

常用参数: 
-B  使用批处理模式(传输过程中不询问传输口令或短语)  
-C  允许压缩。(将-C标志传递给ssh,从而打开压缩功能)  
-r  递归复制整个目录。  
-v  详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。
	这些信息用于调试连接,验证和配置问题。 
-l limit  限定用户所能使用的带宽,以Kbit/s为单位。     
-P port  注意是大写的P, port是指定数据传输用到的端口号
-1  强制scp命令使用协议ssh1  
-2  强制scp命令使用协议ssh2  
-4  强制scp命令只使用IPv4寻址  
-6  强制scp命令只使用IPv6寻址 

例子:
从本地复制到远程:
scp 本地文件 远程主机用户@远程主机IP:远程主机目录
1、从本地服务器复制到远程服务器:复制文件
scp local_file remote_username@remote_ip:remote_folder 
2、从本地服务器复制到远程服务器:复制目录
scp -r local_folder remote_username@remote_ip:remote_folder
从远程复制到本地:
scp  远程主机用户@远程主机IP:远程主机目录  本地主机文件
scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3

命令名称:uname

语法:uname [-a]

功能描述:用于查看系统内核与系统版本等信息
在这里插入图片描述

一般会固定搭配上-a 参数来完整地查看当前系统的内核名称、主 机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统 名称等信息。

文件处理命令

命令名称:touch

命令所在路径:/usr/bin/touch

执行权限:所有用户

功能描述: 用于创建空白文件或设置文件的时间

语法 touch 【选项】【文件】

#可以一次创建多个文件,
例如touch a1 a2
stat a1  #查看时间结果
##Access: 2017-02-27 00:00:00.000000000 -0800    文件的最近一次访问时间
##Modify: 2016-12-25 22:48:47.523724399 -0800      文件的最近内容修改时间
##Change: 2017-02-03 19:34:56.273575429 -0800   文件的最近元数据修改时间,与系统时间挂钩

touch a1     #文件的访问时间及修改时间都是同时被改变成当前系统时间
touch -a a1  #改变了文件的访问和修改时间, a 即是单词 access 的缩写。
####cat 、more、 less、只会改变文件的访问时间。
touch -d '2025-03-01 01:10:03' a1	#将文件的时间戳改为一个将来时间
touch -d '2020-03-01 01:10:03' a1  #将文件的时间戳改成一个过去的时间

总结:只要访问时间,修改时间,或文件权限有一个修改,Ctime时间都会修改

修改元数据修改时间,只能通过修改系统时间来自定义,但是一般情况下修改系统时间需要root权限
date -s "2018-03-01 01:10:03" >>a1   #此时发现系统时间已经改变
hwclock --hctosys					#将硬件时间同步到系统时间

命令名称:mkdir

命令英文:make directories

命令所在路径:/bin/mkdir

执行权限:所有用户

功能描述: 创建新目录

语法 mkdir 【目录名】
在这里插入图片描述

在这里插入图片描述

例:mkdir onedir
mkdir -p a/b/c/d   #递归创建出具有嵌套叠层关系的文件目录。

命令名称:cp

命令英文:copy

命令所在路径:/bin/cp

执行权限:所有用户

功能描述: 复制文件或目录

语法 cp -R 【源文件或目录】【目的目录】

例:
cp  file1 file2  onedir		#将文件file1,file2 复制到目录dir1
cp -R dir1 dir2				#将dir1复制到dir2目录下,   cp dir1/* dir2
cp file1 file2				#将文件file1复制一份命名为file2

命令名称:mv

命令英文:move

命令所在路径:/bin/mv

执行权限:所有用户

功能描述: 用于剪切文件或将文件重命名

语法 mv 【源文件或目录】【目的目录】

mv file1 file3		#将当前目录下文件file1更名为file3
mv file2 dir2		#将文件file2移动到目录dir2下

命令名称:rm

命令英文:remove

命令所在路径:/bin/rm

执行权限:所有用户

功能描述: 删除文件

语法 rm -r 【文件或目录】

​ -r 删除目录,不带参数删除文件

​ rm -rf 强制删除,不在提示是否确认删除

例:
rm file1 		#删除文件file1
rm -r dir1		#删除目录dir1

命令名称:cat

命令英文:concatenate and display files

命令所在路径:/bin/cat

执行权限:所有用户

功能描述: 显示文件内容

语法 cat 【文件名】

cat主要有三大功能:
1.一次显示整个文件。
cat   /etc/services
2.从键盘创建一个文件。同时编辑内容,但是只能创建新文件,不能编辑已有文件.以ctrl+d作为输入结束:
cat  >  filename
3.将几个文件合并为一个文件。
cat   file1   file2  > file

其它参数:
-n 或 –number 由 1 开始对所有输出的行数编号
-b 或 –number-nonblank 和 -n 相似,只不过对于空白行不编号

命令名称:more

命令所在路径:/bin/more

执行权限:所有用户

功能描述: 分页显示文件内容

语法 more 【文件名】

​ 空格或f 显示下一页

​ enter 显示下一行

​ q或Q 退出

例:
more  /etc/services
+n	从笫 n 行开始显示   more +100 /etc/services

命令名称:less

命令所在路径:/bin/less

执行权限:所有用户

功能描述: 是对文件或其它输出进行分页显示

语法 less [选项] 文件

常用参数
-i 	#忽略搜索时的大小写
-m	#显示类似于more 
-N	#显示每行的行号
例如: less -mN /etc/services
常用操作
/字符串	#向下搜索“字符串”的功能 
?字符串	#向上搜索“字符串”的功能
 N和n向前向后查找搜索的匹配项
 回车下一行,f和空格向下翻页  q退出

命令名称:ln

命令英文:link

命令所在路径:/bin/ln

执行权限:所有用户

功能描述:针对某一个文件在另外一个位置建立一个同步的链接。好处:不必重复的占用磁盘空间。

语法 :

ln -s【源文件名称】【目标文件名称】 --建立软连接

ln 【源文件名称】【目标文件名称】 --建立硬链接

必要参数:
-b 覆盖以前建立的链接,之前存在的软连自动重命名
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接) (重点,这个常用)
-v 显示详细的处理过程
例:
ln -s test  test.soft		#创建文件test 的软链接 test.soft
ln test  test.hard		#创建文件test的硬链接test.hard
我们需要知道不管对源文件或者链接文件进行修改内容时,两者都是同步同时性的更改。

硬链接和软链接区别:
软链接:前面是 l 开头的(link),具有全部操作的权限,rwxrwxrwx
1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
2.软链接可以 跨文件系统 ,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接
5.有自己的i节点,一旦删除源文件,则链接消失
硬链接: - 开头,表示文件,受限的权限 rw-r--r--
1.硬链接,以文件副本的形式存在。但不占用实际空间。
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建
4.删除源文件,无影响
不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的空间。

目录/链接个数

  • 对于目录文件,表示它的第一级子目录的个数。注意此处看到的值要减2才等于该目录下的子目录的实际个数。

  • 对于其它文件,表示指向它的链接文件的个数。

文件搜索命令

命令名称: find

命令所在路径: /usr/bin/find

执行权限:所有用户

语法: find [搜索路径] [搜寻关键字]

功能描述:你可以用它找到任何你想找的文件。

-name   filename               #查找名为filename的文件
-perm                                #按执行权限来查找
-user    username             #按文件属主来查找
-group groupname            #按组来查找
-mtime   -n +n                   #(modify time)按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime    -n +n                   #(access time)按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime    -n +n                  #(change time)按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup                          #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                            #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-type    b/d/c/p/l/f             #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]                  	  #查长度为n块[或n字节]的文件
-mount                            #查文件时不跨越文件系统mount点
-follow                            #如果遇到符号链接文件,就跟踪链接所指的文件
-prune                            #忽略某个目录

在这里插入图片描述

简单例子:
find /etc -name init	#在目录/etc中查找文件init
find /home -size +1M	#在home下查找大于1MB的文件   
find / -user root	#在根目录下查找所有者为root的文件
find /etc -ctime -1	#在/etc下查找24小时内被修改过属性的文件和目录
find /etc -size +80M -a -size -100M #在/etc下查找大于80MB小于100MB的文件
 #####   dd if=/dev/zero of=test.log bs=1M count=500  #创建一个大小为500M的文件
下面通过一些简单的例子来介绍下find的常规用法: 
1、按名字查找 
      在当前目录及子目录中,查找大写字母开头的txt文件 
       $ find . -name '[A-Z]*.txt'    

2、按目录查找   
      在当前目录除aa之外的子目录内搜索 txt文件   
      $ find . -path "./aa" -prune -o -name "*.txt"   
      
3、按权限查找     
      在当前目录及子目录中,查找属主具有读写执行,其他具有读执行权限的文件   
      $ find . -perm 755 

4、按类型查找  (b/d/c/p/l/f ) 

      在当前目录及子目录下,查找符号链接文件   
      $ find . -type l  

5、按属主及属组   
      查找属主是www的文件   
      $ find / -user www -type f   
6、按时间查找   
      查找2天内被更改过的文件 
       $ find . -mtime -2 -type f 
7、按文件新旧        
      查找比 aa.txt 新的文件 
      $ find . -newer "aa.txt" -type f 

8、按大小查找   
      查找超过1M的文件 
      $ find / -size +1M -type f 

命令名称:grep

命令所在路径:/bin/grep

执行权限:所有用户

语法: grep [指定字串]

功能描述:在文件中搜寻字串匹配的行并输出,是一种强大的文本搜索工具
在这里插入图片描述

格式及主要参数
    grep [options]
    主要参数:  grep --help可查看
        -c:只输出匹配行的计数。
        -i:不区分大小写。
        -n:显示匹配行及 行号。
        -s:不显示不存在或无匹配文本的错误信息。
        -v:显示不包含匹配文本的所有行。
例:  grep ftp /etc/services

压缩解压命令

常用压缩命令 gzip 和 zip,zip 压缩后文件是 *.zip ,而 gzip 压缩后的文件 *.gz
相应的解压缩命令则是 gunzip 和 unzip

命令名称: zip和unzip

命令所在路径: /usr/bin/

执行权限:所有用户

语法: zip [参数] [压缩后文件名称] [要压缩的文件或目录]

功能描述:压缩文件或目录

例子:
zip test.zip test.txt	#它会将 test.txt 文件压缩为 test.zip
unzip test.zip	#它会默认将文件解压到当前目录,如果要解压到指定目录,可以加上 -d 选项
unzip test.zip -d /root/

命令名称:gzip和gunzip

命令所在路径: /bin/gzip

执行权限:所有用户

语法: gzip 选项[文件]

功能描述:压缩文件,,其名称后面会多出".gz"的扩展名

例子:
gzip test.txt		#它会将文件压缩为文件 test.txt.gz,原来的文件则没有了,解压缩也一样
gunzip test.txt.gz	
#为了保留原有的文件,我们可以加上 -c 选项并利用 linux 的重定向
gzip -c test.txt > /root/test.gz
gunzip -c test.gz > ./test.txt

命令名称: tar

命令所在路径: /bin/tar

执行权限:所有用户

语法: tar 选项[cvf] [目录]

​ -c 产生.tar打包文件

​ -z 打包同时压缩

​ -v 显示详细信息

​ -f 指定压缩后的文件名

功能描述:打包目录 其名称后面会多出".tar.gz"的扩展名

#压缩文件 非打包
touch a.txt       
tar -czvf test.tar.gz a.txt   #压缩 a.txt文件为test.tar.gz
tar -tvf test.tar.gz 		#列出压缩文件内容
tar -xzvf test.tar.gz 		#解压文件

#打包目录
tar -czvf small.tar.gz small(目录名)
解压同上

网络通信命令

命令名称: ping

语法: ping IP地址或域名

功能描述:测试网络连通性

例: # ping www.baidu.com

命令名称: ifconfig

语法: ifconfig 选项[-a] [网卡设备标识]

-a 显示所有网卡信息

功能描述:查看网络设置信息

例: # ifconfig -a

命令名称: traceroute

语法: traceroute hostname

功能描述:路由跟踪命令,是一个检测路由节点数的一个网络命令

apt install traceroute -y
traceroute www.baidu.com

指令名称: write

语法: write <用户名>

功能描述:向另外-个用户发信息, 以Ctrl+D作为结束

范例:

$ write tom

指令名称: wall

语法: wall [message] [文件名]

功能描述:向所有用户广播信息,以Ctrl+D作为结束

例:

$ wall Happy New Year!

Linux用户类型

​ 管理员 UID 为 0:系统的管理员用户。

  • 系统用户(伪用户) UID 为 1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
  • 普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。

需要注意的是,UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000 开始的(即使前面有闲置的号码)

注:将普通用户UID改为0,权限和root一样

用户组:以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。

基本组:创建新用户时,自动创建一个与其同名的用户组

扩展组:该新用户被加入的除基本组外的其他组

一个用户只有一个基本用户组,但是可以有多个扩展用户组。

用户信息保存在/etc/passwd文件,可以直接用vim编辑器也可以使用命令控制

字段 含义
用户名 用户登录系统用户名
密码 密码位
UID 用户标识号
GID 缺省组标识号
注释性描述 例如存放用户全名等
宿主目录 用户登录系统后的缺省目录
命令解释器 用户使用的Shell

命令名称: useradd userdel

命令所在路径: /usr/sbin/

执行权限:超级管理员用户

语法:useradd [选项] 用户名 userdel [选项] 用户名

功能描述:新建用户 删除用户

useradd常用参数
-d 新账户的主目录
-m 创建用户的主目录 不加-m默认不创建用户主目录
-e 新账户的过期日期,格式为 YYYY-MM-DD. 
-u 指定该用户的默认 UID 
-g 指定一个初始的用户基本组(必须已存在)
-G 指定一个或多个扩展用户组
-s 指定用户的默认shell解释器
例子:
useradd tom -m -d /home/tom -e 2022-05-05 -u 8888 -G root

useradd  -s /sbin/nologon tom1   ##指定解释器 /sbin/nologon,此时该用户不能登录
如果一个用户的默认shell设置为/sbin/nologin 则这个用户是禁止登陆系统的
比如日常可以将 nginx mysql php-fpm这些应用的用户默认shell设定为/sbin/nologin
提升安全性

useradd  -s /bin/bash tom2   ##用户使用su 可以正常切换

userdel常用参数
-f 强制删除用户,即使用户当前已登录
-r 同时删除用户及用户家目录,用户在线提示

命令名称: groupadd

语法:groupadd [选项] 群组名

功能描述: 用于创建用户组

groupadd ronny    #新建ronny组

命令名称: usermod

语法:usermod [选项] 用户名

功能描述: 用于修改用户的属性

###用户信息保存在/etc/passwd文件,可以直接用vim编辑器 也可以用 usermod 命令修改
常用参数:
-e 账户的到期时间,格式为 YYYY-MM-DD 
-L 锁定用户禁止其登录系统
-U 解锁用户,允许其登录系统
-u 修改用户的 UID 
-g 变更所属用户组
-G 变更扩展用户组
例子:
usermod -u 8888 tom  #修改用户的UID
usermod -L username   #禁止其登录系统
usermod -U username  #恢复其登录系统
id tom  #查看tom用户默认信息

passwd 命令

功能描述:用于修改用户密码、过期时间、认证信息等,

格式 passwd [选项] [用户名]

注:普通用户只能使用 passwd 命令修改自身的系统密码,而 root 管理员则有权限修改其他所有人的密码

参数 作用
-l 锁定指定账户的密码。此选项通过将密码更改为一个不可能与加密值匹配的值
来禁用。
-u 解锁指定用户的密码。此操作通过将密码改回先前值(改回使用 -l 之前的值)重新启用密码。
-d 删除用户密码(让它为空)。这是禁用一个用户密码的快速方法。
-e 强制用户在下次登录时修改密码
-S 显示账户状态信息。状态信息包含 7
个字段。首个字段是用户的登录名,第二个字段表示用户账户是否已经锁定密
码(L)、没有密码
(NP)或者密码可用(P),第三个字段给出最后一次更改密码的日期。接下来的四个字段分别是密码的最小年龄、最大年龄、警告期和禁用期。这些年龄以天为单位计算。

例:

passwd -l tom #锁定用户,禁止其登录

passwd -u tom #解除锁定,允许用户登录

passwd -S tom #显示用户的密码是否被锁定

/etc/shadow文件格式

用户名 用户登录系统时使用的用户名
密码 加密密码
最后一次修改时间 上一次修改密码的日期与1970-1-1相距的天数
最小时间间隔 两次修改密码之间的最小天数
最大时间间隔 密码保持有效的最多天数
警告时间 从系统开始警告到密码失效的天数
账号闲置时间 账号闲置的时间
失效时间 密码失效的绝对天数

su 命令

功能描述:解决切换用户身份的需求,当前登录不用退出

格式: su [用户名]

su tom 	  # 只是切换了用户,其它还是原来用户的
su - tom  # - 完全切换到新的用户,包括环境变量信息

sudo 命令

功能描述:用于给普通用户提供额外的权限来完成原本 root 管理员才能完成的任务

格式: sudo [参数] 命令名称

注:暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码。
sudo的配置文件/etc/sudoers 。命令行直接输入visudo也可以直接打开

查看用户信息 w命令

w显示信息的含义

JCPU:以终端代号来区分,该终端所有相关的进程执行时,所消耗的CPU时间会显示在这里

PCPU: CPU执行程字耗费的时间

WHAT:用户正在执行的操作

load average: 分别显示系统在过去1、 5、15分钟内的平均负载程度。

FROM: 显示用户从何处登录系统,“:0”的显示代表该用户时从X Window下,打开文本模式窗口登录的

IDLE:用户闲置的时间。这是个计时器,-旦用户执行任何 操作,该计时器便会被重置

在这里插入图片描述

查看个别用户信息: W 用户名

在 Linux 系统中,每个文件都规定了文件的所有者、 所有组以及其他人对文件所拥有的可读(r)、可写(w)、可执行(x)等权限。

l rwx rwx rwx. 1 root root 7 1月 6 09:17 bin -> usr/bin

l rwx rwx rwx root root 09:17
文件类型 拥有者的权限 所属组的权限 其他人权限 拥有者 所属组 最后修改的时间
字符 mode 权限 对文件的含义 对目录的含义
r 4 读权限 可以查看文件内容 可以列出目录中的内容
w 2 写权限 可以修改文件内容 可以在目录中创建,删除文件
x 1 执行权限 可以执行文件 可以进入目录

若某个文件的权限为 7 则代表可读、可写、可执行(4+2+1);若权限为 6 则代表可读、 可写(4+2)

有个文件的权限是 rwxrw-r--,数字法表示即为 764。

命令名称:chmod

命令英文:change the permissions mode of a file

命令所在路径:/bin/chmod

执行权限:所有用户

语法:chmod 【{ugo}{+-=}{rwx}】 【文件或目录】

​ chmod 【mode=421】【文件或目录】

功能描述:改变文件或目录权限

+ - =
增加权限 减少权限 等于权限
例子:
chmod ugo+r file.txt  # 将文件 file.txt 设为所有人皆可读取
chmod u+x man.py       #为 man.py 文件拥有者增加可执行权限:
chmod -R test 	       #对目前目录下的所有文件与子目录进行相同的权限变更
						#(即以递归的方式逐个变更)
chmod 777 file  	   #用数字来表示权限

命令名称: chown

功能描述:将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID

参数

​ -R : 处理指定目录以及其子目录下的所有文件

chown root file1.txt       #file1.txt的所有者设置 root
chown :tomgroup file1.txt  #file1.txt的所属组设置 tomgroup
chown tom:tomgroup file1.txt
chown -R tom:tomgroup *    #将当前前目录下的所有文件与子目录的所有者设为 tom,
							#所属组设为tomgroup

命令名称:umask

功能描述:指定在建立文件时预设的权限掩码。

语法:umask [-S]【权限掩码】

参数说明:-S以文字的方式来表示权限掩码

实例:

一,
$ umask    #获取当前权限掩码

0002

$ mkdir test                       #创建目录  
$ ls -dl test                      #显示目录的详细信息 
drwxrwxr-x 2 ntesqiu ntesqiu 4096 12月 29 11:34 test

注意:在上面的输出信息中,drwxrwxr-x"="777-002=775"。


二,修改建立文件时预设的权限掩码
$ umask 0001     #修改建立文件时预设的权限掩码

$ mkdir test1
$ ls -dl test1
drwxrwxrw- 2 ntesqiu ntesqiu 4096 12月 29 12:00 test1

注意:在上面的输出信息中,drwxrwxr-x"="777-001=776"。

计划任务

systemctl status crond (查看状态)		#查看计划任务是否正常运行

###如果没有,如下安装设置
apt install cron(安装 cron)
systemctl start cron(启动crond服务)
systemctl enable cron (设为开机启动)

crontab 命令

位置:/usr/bin/crontab

功能:定时执行脚本、或者程序。

场景:

  • 1、系统层面:系统周期性所要执行的工作,如定期备份系统数据、清理缓存
  • 2、用户层面:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新消息,定期监控服务器运行状况。
常用参数:
-e : 执行文字编辑器来设定时程表,vi /etc/crontab # vi打开并编辑也可以
-u user 设定指定 user 的时程表,如果不使用 -u user ,默认设定自己的时程表
-r : 删除目前的时程表
-l : 列出目前的时程表

crontab /etc/crontab   # 生效  (vi 命令新增定时任务时,需要执行)

ubuntu开启cron日志

1,修改配置文件 /etc/rsyslog.d/50-default.conf

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-06K5w2tW-1641555728837)(images/image-20211215113411672.png)]

2,重启rsyslog服务

service rsyslog restart

3,重启cron服务

service cron restart

时间格式如下:

f1 f2 f3 f4 f5 program
*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 7) (星期天为0或7)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
星号(*):代表所有可能的值,例如day字段如果是星号,则表示在满足其它字段的制约条件后每天都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。

实例

#打开定时任务列表文件,进行编辑 保存 (注意:这里一定要写成全路径)
*/1 * * * * date >> /home/date_log.txt 

tail-f /home/date_log.txt   #查看任务运行结果

在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup:

0 6-12/3 * 12 * /home/脚本.sh

重定向 、管道符

linux标准输入设备指的是键盘,标准输出设备指的是显示器,标准错误输出指的是显示器。

在解释什么是重定向之前,再来说说什么是文件描述符

文件描述符:可以理解为 Linux 系统为文件分配的一个数字,它是个很小的非负整数

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

输入重定向:是指不使用系统提供的标准输入端口,而进行重新的指定。(重定向简单理解就是使用 “<”符来修改标准输入设备)

比如,默认情况下,cat命令会接受默认标准输入设备键盘的输入,并显示到控制台,但是可以通过“<”符号修改标准输入设备,指定文件作为标准输入设备,那么cat命令将指定的文件作为输入设备,并将文件中的内容读取并显示到控制台。

输出重定向

符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
man ls > readme		# 将ls命令帮助文档写入到readme文件中
man cp >> readme	# 将cp命令帮助文档追加写入到readme文件中

管道:将一个命令的输出传送给另一个命令,作为另一-个命令的输入。

使用方法:

命令1命令2|命令3..... |命令n

范例:


ls -l /etc | more

ls -l /etc | grep init

 grep  "/sbin/nologin"  /etc/passwd | wc -l    

#被限制登录用户个数 

#wc计算指定文件的行数

含义:通配符就是通用的匹配信息的符号

通配符 作用
* 匹配零个或多个字符
? 匹配单个字符
[0-9] 代表匹配 0~9 之间的单个数字的字符
[abc] 代表匹配 a、b、c 三个字符中的任意 一个字符
匹配所有在/dev 目录中且 以 sda 开头的文件
 ls -l /dev/sda* 

常用转义字符

字符 含义
反斜杠 \ 使反斜杠后面的一个变量变为单纯的字符串
双引号 ” “ 保留其中的变量属性,不进行转义处理
单引号 ‘ ’ 转义其中所有的变量为单纯的字符串
反引号 `` 把其中的命令执行后返回结果
文本编辑
vim
awk

SSH服务

Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。

kali设置SSH参考:
https://zhuanlan.zhihu.com/p/113141126

docker

Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。
Docker的三个概念

  1. 镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
  2. 容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
  3. 仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

更详细的解释:
https://ruanyifeng.com/blog/2018/02/docker-tutorial.html

安装docker
https://docs.docker.com/engine/install/

查看Docker的帮助信息:

 docker --help

入侵排查

日志基础

日志文件

日志文件对于诊断和解决系统中的问题很有帮助,因为在 Linux 操作系统中运行的程序通常会把系消息和错误消息写入相应的日志文件,这样系统一旦出现问题就会“有据可查”。
此外,当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹。

日志功能

用于记录系统或程序运行过程中发生的各种事件
通过阅读日志有助于诊断解决系统故障

日志分类

内核及系统日志
由系统服务syslog统一管理格式大致相同
用户日志
用于记录用户登录及退出系统的相关信息
程序日志
各种应用程序独立管理的日志文件,记录格式不一

日志 保存位置

默认位于 /var/log

日志配置文件

/etc/rsyslog.conf

主要日志文件介绍

/var/log/messages  #内核及公共消息模块,记录系统或服务程序运行的状态信息 和 错误信息
/var/log/cron      # 计划任务日志
/var/log/dmesg     # 系统引导日志
/var/log/maillog   # 邮件系统日志
用户日志
/var/log/wtmp      
/var/log/btmp     
/var/log/lastlog   
/var/log/secure    

rsyslogd:系统日志程序

ps -aux|grep rsyslogd   #查看相关进程
tail -f /var/log/messages    #动态查看日志文件,尾部显示

日志消息级别

作用:设置不同级别的日志等级,日志文件记录相应 日志信息,级别越大记录日志越详细

日志消息的级别

0 EMERG (紧急):会导致主机系统不可用的情况
1 ALERT (警告):必须马上采取措施解决的问题
2 CRIT (严重):比较严重的情况
3 ERR(错误):运行出现错误
4 WARNING (提醒):可能会影响系统功能的事件
5 NOTICE(注意):不会影响系统但值得注意
6 INFO 一般值思
7 DEBUG(调试)程序或系统调试信息等

日志一般格式

时间标签   主机名   子系统   消息字段

用户日志

/var/log/wtmp      #用户登录,注销,系统开关机事件
/var/log/btmp      #当前登录用户详细信息
/var/log/lastlog   #最近登录用户事件
/var/log/secure    #用户验证相关安全事件
分析命令
users, who, w, last, lastb

程序日志

apache&nginx日志分析
日志管理策略

1 ,备份和归档

2,延长日志保存期限

3,控制日志访问权限

​ 日志中可能会包含各类敏感信息,如账户、口令等

4,集中管理日志

将服务器的田志文件发到统一的日志文件服务器便于日志信息的统一收集、整理和分析

杜绝日志信息的意外丢失、恶意篡改或删除

应急响应

排查用户相关的信息

whoami           #查看当前用户身份
who              #查看当前登录系统的所有用户
w                #显示已经登陆系统的用户列表,并显示用户正在执行的指令
users            #显示当前登录系统的所有用户的用户列表
id               #当前用户信息
id || (whoami && groups) 2>/dev/null     #当前用户信息
cat /etc/passwd | cut -d: -f1            #查看所有的用户名
cat /etc/passwd | grep "sh$"             #查看拥有bash的用户
awk '/\$1|\$6/{print $1}' /etc/shadow   #查看可以远程登录的用户
cat /etc/shadow  #查看密码
cat /etc/group   #查看组信息
last             #查看登录历史
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"    #查看拥有sudo权限的用户
sudo -l             #列出目前用户可执行与无法执行的指令

排查进程端口

top                          #动态查看进程
ls -l /proc/18176/exe        #查看PID为18176的进程的可执行程序
lsof -p 18176                #查看PID为18176的进程打开的文件
lsof -c sshd                 #查看进程sshd打开的文件
lsof -i:33946                #查看33946端口对应的一些进程
ps -p PID -o lstart          #查看进程的启动时间点
netstat -pantu | grep 18176  #查看端口连接情况,过滤含有18176的行,就可以查看连接的端口
fuser -n tcp 33946           #查看33946端口对应的进程PID
ps aux  /  ps -ef            #静态查看进程
pstree                       #查看进程树
ps aux --sort -pcpu          #静态查看进程,根据cpu使用情况排行,从高到低
ps aux --sort -pmem          #静态查看进程,根据内存使用情况排行,从高到低

判断入侵方式,修复漏洞

可参考《应急响应实战笔记》
GitHub地址:
https://github.com/Bypass007/Emergency-Response-Notes
GitBook地址:
https://bypass007.github.io/Emergency-Response-Notes/

黑客入侵主机有下列几种情况:

  • 通过 redis 未授权漏洞入侵(好多挖矿程序是通过这个)
  • ssh 弱口令暴力破解
  • Web 程序漏洞入侵
posted @ 2022-01-07 22:53  CK_0ff  阅读(376)  评论(0编辑  收藏  举报