基本介绍
- 在linux中,每一个执行的程序都称为一个进程,每一个进程都分配一个ID号(pid,进程号)
- 每个进程都可以以两种方式存在,前台和后台,所谓前台进程就是用户目前的屏幕上可以操作的,后台则是实际在操作的,但由于屏幕上无法看到,通城以后台方式执行
- 一般的系统的服务都是以后台进程的方式存在,而且会常驻在系统中
比如,在windows中就是:
显示系统执行的过程
指令 ps 查看系统进程
pgrep // 表明了这个命令是专门用于进程查询的grep
常用参数
-a 显示所有进程信息
-u 以用户格式显示进程信息
-x 显示后台进程运行参数
ps -aux后的意思
ps -aux | grep xxx // 筛选xxx的进程
显示系统执行的进程(父进程)
应用实例
要求: 以全格式显示当前所有的进程,查看进程的父进程,查看sshd的父进程信息
ps -ef
是以全格式显示当前所有的进程-e
显示所有进程。-全格式ps -ef l grep >oo
- 是BSD风格
- UID:用户ID
- PID:进程ID
- PPID:公进程D
- C: CPU用于计算执行优先级的图子。数值越大,表明进程是CPU密集型运算,执行优先级会降低,数值越小,表明进程是I/O密集型运算,执行优先级会提高
- STIME: 进程启动的时间
- TTY: 完整的终端名称
- TIME: CPU时间
- CMD:启动进程所用的命令和参数
父进程子进程
PPID为0说明是没有任何父进程的祖宗
PPID为2的,说明是pid为2的子进程
总结
ps -aux | grep xxx // 筛选xxx的以用户格式显示的进程
ps -ef | grep xxx // 筛选xxx的以全格式显示的进程
终止进程Kill和Killall
- 介绍
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务 - 其本语法
kili [选项]进程号 (功能描述: 通过进程号杀死进程)
killall 进程名称 (功能播迷: 通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用) - 常用选项
-9:表示强迫进程立即停止
最佳实践
注意,前提是有xshell可以连接kali,如果不能,需要花费时间折腾一下,教程:https://blog.youkuaiyun.com/qq_61901169/article/details/132201496
案列1: 踢掉某个非法登录用户
这里举例的非法登陆用户是用Xshell登陆的,所以用ps -aux | grep sshd
就可以筛选出来,之后kill 进程号即可
xshell连接Kali后
在虚拟机中输入ps -aux | grep sshd
杀死进程后
xshell也退出了
案例2: 终止远程登录服务sshd, 在适当时候再次重启sshd服务
输入 kill 1457 后
重启服务的指令:
/bin/systemctl start sshd.service
# /bin/systemctl start 服务名.service
案例3: 终止多个gedit
比如现在打开三个文件编辑器
退出的话,输入后,文本就被全部干掉了
案例4: 强制杀掉一个终端
tty查看当下终端名
kill -9 进程号
杀死xshell的进程可以杀掉,但是杀掉虚拟机的终端不会立刻消失,画面会继续显示,但是终端用不了
pstree指令
基本语法
pstree [选项] 可以直观的来看进程信息
常用选项
-p 显示进程PID
-u 显示进程的所属用户
应用实例
示例一:请你树状的形式显示进程的PID
pstree -p
示例二:请你树状的形式进程的用户
pstree -u
服务管理
眼务(serviee) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mwsql, sshd 防火墙等,我们又称为守护进程
service指令
- service 服务名 [start|stop| restart| reload | status]
- 在CentOS7.0后,很多服务不再使用service ,而是 systemctl (Kali也是)
- service指令管理的服务在 /etc/init.d 查看
ll /etc/init.d // 查看指令管理的服务
service networking status //查看服务networking状态,出现active (exited) 就是活跃
# kali的网络管理器是NetworkManager
# 关闭开启kali网络指令
systemctl stop NetworkManager // 关闭网络
systemctl start NetworkManager // 关闭网络
查看服务名
1. 方式1: 使用setup ->系统服务就可以看到全部 (kali没有)
- 方式2: /etc/init.d 看到 service 指令管理的服务Is -l /etc/init.d
服务的运行级别(runlevel):
Linux系统有7种运行级s(runlevel) : 常用的是级别3和5
运行级别0: 系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于亲统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS),不支持网络
运行级别3: 完全的多用户状态(有NFS),无界面,登陆后进入控制台命令行模式
温行级别4: 系统未使用,保留
运行级别5: X11控制台,登陆后进入图形GUI模式
运行级别6: 系统正常关闭井重启,默认运行级别不能设为6,否则不能正常启动
开机的流程说明
CentOS7后运行级别说明
在/etc/initab
进行了简化,如下:
multi-user.target: analogous to runlevel 3
graphical.target: anslogcus to runlenel 5
#查看当前默认运行级别:
systemctl get-default // 显示的是graphical.target则是运行级别5图形化
# 要设置默认运行级别:
systemctl set-default multi-user.target // 更改默认运行级别为3,重启后生效
chkconfig指令(kali没有)
介绍
- 通过chkconfig 命令可以给服务的各个运行级别设置自启动/关闭
- chconfig 指令管理的服务在/eto/init.d 查看
- 注意:Centos7.0后,很多服务使用systemdtl管理
chkconfig命令属于readhat第linux系统的命令。 如果系统属Debian系如ubuntu是没有这个命令的。 如果系统属于readhat系(如centos)但还没有这个命令 可能是chkconfig包没有被安装。
kali 正常安装chkconfig: apt-get install chkconfig 会不成功
chkconfig基本语法
- 查看服务 chikconfig --list [| grep xxx]
- chkconfig 服务名 --list [| grep xxx]
- chkconfig --level 5 服务名 on/off
chkconfig重新设置服务后自启动或关闭,需要重启机器
systemctl指令
- 基本语法: systemctl Istart| stop | restart | status] 服务名
- systemctl指令管理的服务在 /usr/lib/systemd/system 查看
# 设置开机启用防火墙
systemctl enable firewalld.service
# 设置开机禁用防火墙
systemctl disable firewalld.service
# 启动防火墙
systemctl start firewalld
# 关闭防火墙
systemctl stop firewalld
# 检查防火墙状态
systemctl status firewalld
systemctl设置服务的自启动状态
# [|grep 服务名] (查看服务开机启动状态, grep 可以进行过滴)
systemctl list-unit-files
# 设置服务开机启动
systemctl enable 服务名
# 关闭服务开机启动
systemct disable 服务名
# 查询某个服务是否是自启动的
systemctl is-enabled 服务名
应用案例 关闭防火墙和重启防火墙。=> firewalld.service
细节讨论
- 关闭或者启用防火墙后,立即生效。【telnet测试 某个端口即可】
- 这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置
- 如果希望设置某个服务自启动或关闭永久生效,要使用 systemctl [enable | disable] 服务名
telnet测试
windows开启telnet 教程:https://blog.youkuaiyun.com/funkstill/article/details/85330187
# 查看端口
netstat -anp | more
# 通过telnet去监听端口的指令
telnet ip地址 端口
# 通过telnet测试防火墙有没有生效
firewail指令
打开或者关闭指定端口
在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定的端口。比如80、22、8080等,这个又怎么做呢?
kali比较特殊,不可以直接利用iptables服务,因为没这个服务没法关闭。 所以你需要借助第三方软件(除非你想费半天力气自己一步一步写文件写命令)。 ufw命令可以帮助你管理防火墙,下面会写
# 协议通过netstat -apn 来查看
firewall-cmd --permanent --add-port=端口号/协议 // 打开端口
firewall-cmd --permanent --remove-port=端口号/协议 // 关闭端口
firewall-cmd --reload // 每次打开和关闭后都需要运行一下这个指令,这个指令是重新载入的意思
firewail-cmd query-port=端口/协议 // 查询端口是否开放
ufw教程 | kali本身有防火墙,但是在服务里是不显示的,需要安装ufw指令来管理防火墙
以下是kali系统的方法,CentOS则直接通过上面的指令就可以完成
# 安装ufw
apt-get install ufw
# 查看防火墙状态
ufw status
systemctl status ufw
# 开启和关闭防火墙
systemctl start ufw
systemctl stop ufw
# 开机自启和不自启防火墙
ufw enable
ufw disable
# 防火墙不允许所有服务(一)和运行所有服务(二)
default deny
ufw default allow
# 查看端口
netstat -anp | more
# 关闭端口号
ufw deny 端口号
# 开放端口号
ufw allow 端口号
ufw应用案例
首先开启防火墙
# 用了systemctl start ufw发现没效果,最后用了ufw enable,然后成功了
ufw enable
# 查看状态
ufw status
# 查看端口
netstat -anp | more
# 查看ip
ifconfig
# 然后window打开cmd,用telnet测试是否可以监听端口,如果没有则打开,文章上有教程链接
telnet 192.168.50.194 22
# 然后发现连接不上
# 然后我们打开端口22
ufw allow 22
# 然后我们再测试能不能连上
telnet 192.168.50.194 22
因为22端口在kali是ssh,所以好像进到了什么程序里,不过不用在意这些细节,我们只需要知道成功了即可
# 然后我们成功了,我们退出,然后再关闭端口再连一下
ufw deny 22
telnet 192.168.50.194 22
# 然后关闭端口又连不上了
ok,案例结束
# 新手建议关闭防火墙,指令:
ufw disable
ufw status
动态监控系统
介绍
top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程。
甚本语法
top [选项]
选项说明
运行top命令后
zombie是死掉的进程但是内存没有释放
交互操作说明
应用实例
案例1: 监视特定用户
top: 输入此命令,按回车键,查看执 行的进程。
u: 然后输入“u”回车,再输入用户名,即可
xshell6登陆普通用户kali后,再通过root top命令来动态监控kali用户
案例2: 终止指定的进程,加入我们结束kali用户的登陆
top:输入此命令,按回车键,查看执行的进程。
k: 然后输入 “k”回车,再输入要结束的进程ID号
输入进程号,可能要输入一个信号,输入9强制删除
案例3: 指定系统状态更新的时间(每隔10秒自动更新),默认是3秒
命令:top -d 10
监控网络状态
查看系统网络情况nestat
甚本语法
netstat [选顶]
选项说明
-an 按一定顺序排列输出
-P 显示哪个进程在调用
应用案例
请查看服务名为sshd的服务的信息
命令中 State 下的 ESTABLISHED意思是连接已建立,LISTEN是监听的意思。TINE_WAIT,超时等待,用户退出登陆后,网络不会立刻 销毁,协议会担心网络临时有问题,会有一个超时等待,一般会有一分钟左右,过一会就没了
netstat -anp | grep sshd
grep是过滤sshd
检测主机连接命令ping
种网络检测检测工具,它主要是用检测远程主机是否正常,或是两部主机闻的网线或网卡故障,如:ping 对方ip地址
netstat是一个很常用的指令,如果一个指令你没有启动,但是显示监听,就有可能是木马在监听