前两篇掌握了 Linux 命令行和权限机制,这一篇进入系统运维与安全排查的实战层。进程是黑客的藏身之处,端口是攻击的入口,防火墙是最后一道防线。学会查看进程、分析端口、配置防火墙,你就能从"会用命令"进阶到"能排查入侵、能加固系统"。
一、进程和服务管理
1.1 进程管理基础
查看进程
| 命令 | 说明 |
|---|---|
ps | 查看当前用户进程 |
ps aux | 查看所有进程(含 CPU、内存占用) |
pstree | 以树形结构展示进程间父子关系 |
top | 动态实时查看进程(系统自带) |
htop | top 增强版,界面更友好,支持鼠标操作(需手动安装) |
渗透视角:
ps aux是应急响应的第一步,恶意进程常伪装成系统服务名。注意内核线程名带[],不要误杀。
进程控制
| 命令 | 说明 |
|---|---|
kill PID | 优雅终止进程(发送 SIGTERM 信号) |
kill -9 PID | 强制终止进程(发送 SIGKILL 信号,进程无法忽略) |
pkill 进程名 | 按名称批量终止进程 |
killall 进程名 | 按名称终止所有匹配进程 |
重要提示:按名称匹配容易误杀同名进程。建议先执行
pgrep 进程名列出所有匹配的 PID,确认无误后再执行终止操作。
优先级调整
- 优先级数值范围:
-20 ~ 19,数值越小优先级越高 - 默认优先级为 0
-20(最高)|19(最低)
# 为新进程设置优先级
nice -n 10 sleep 100
# 修改已运行进程的优先级
renice -5 -p 1234 # 提高优先级(需 root)
renice 10 -p 1234 # 降低优先级
1.2 systemd 服务管理
现代 Linux 系统中,systemctl 是与 systemd 交互、管理后台服务的核心命令。
| 命令 | 说明 |
|---|---|
systemctl start 服务名 | 启动服务 |
systemctl stop 服务名 | 停止服务 |
systemctl restart 服务名 | 重启服务 |
systemctl reload 服务名 | 不停止服务,重新加载配置 |
systemctl status 服务名 | 查看服务运行状态 |
systemctl enable 服务名 | 设置开机自启 |
systemctl disable 服务名 | 禁止开机自启 |
systemctl list-units --type=service | 列出所有服务 |
systemctl --failed | 列出失败的服务 |
服务单元文件路径:
- 系统服务:
/usr/lib/systemd/system/ - 用户自定义:
/etc/systemd/system/ - 修改后需执行
systemctl daemon-reload重新加载
1.3 实战演示:管理 SSH 服务
# CentOS / RHEL 系统
systemctl status sshd # 查看状态
systemctl start sshd # 启动
systemctl stop sshd # 停止
systemctl enable sshd # 开机自启
# Kali / Ubuntu 系统
systemctl status ssh # 注意服务名是 ssh 不是 sshd
SSH 连接不上的排查三步:
- 检查 SSH 服务状态:
systemctl status sshd - 检查 SSH 配置文件默认端口是否为 22:
vim /etc/ssh/sshd_config - 检查防火墙是否拦截 22 端口
二、网络配置与端口监听
2.1 网络配置命令
IP 地址配置
| 操作 | 现代命令(推荐) | 传统命令(需 net-tools) |
|---|---|---|
| 查看 IP | ip addr show | ifconfig |
| 临时配置 IP | ip addr add IP/掩码 dev 网卡名 | ifconfig 网卡名 IP netmask 掩码 |
| 删除 IP | ip addr del IP/掩码 dev 网卡名 | - |
| 启用/禁用网卡 | ip link set 网卡名 up/down | ifconfig 网卡名 up/down |
路由配置
# 查看路由表
ip route show
route -n
# 添加默认网关
ip route add default via 网关IP
# 添加静态路由
ip route add 目标网络 via 网关IP dev 网卡名
DNS 配置
# 查看当前 DNS 配置
cat /etc/resolv.conf
# 临时修改(推荐追加,避免覆盖)
cp /etc/resolv.conf /etc/resolv.conf.bak
echo "nameserver DNS服务器IP" >> /etc/resolv.conf
# 永久修改(CentOS / RHEL)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 添加:DNS1=DNS服务器IP
疑难杂症:如果
/etc/resolv.conf无法修改,用lsattr /etc/resolv.conf查看文件特殊属性。输出中的i表示文件被设置为不可变,任何用户(包括 root)都无法修改。执行chattr -i /etc/resolv.conf移除不可变属性后即可正常编辑。
2.2 端口监听分析
| 命令 | 说明 |
|---|---|
ss -tulnp | 查看所有监听端口(现代推荐,更快) |
netstat -tulnp | 查看所有监听端口(传统命令) |
ss -tulnp | grep 端口号 | 查看特定端口监听状态 |
ss -tup | 查看已建立连接的端口 |
ss -an | 查看所有网络连接 |
netstat -an | grep :端口号 | wc -l | 统计特定端口连接数 |
渗透视角:
ss -tulnp是排查后门端口和 C2 通信的关键命令。需要 root 权限才能看到进程名。
2.3 实战演示:分析 Web 服务器端口
# 启动 Web 服务
systemctl start httpd # CentOS / RHEL
systemctl start apache2 # Kali / Ubuntu
# 查看 80 端口监听
ss -tulnp | grep :80
# 查看 80 端口网络连接状态
netstat -an | grep :80
三、firewalld / ufw 防火墙
3.1 firewalld(CentOS / RHEL)
基本管理
# 查看防火墙状态
systemctl status firewalld
# 启动 / 停止 / 重启
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld
# 启用 / 禁用开机自启
systemctl enable firewalld
systemctl disable firewalld
# 立刻启动并设置开机自启
systemctl enable firewalld --now
Zone(区域)概念
firewalld 将网络划分为不同的区域,每个区域有不同的信任级别:
| Zone | 描述 | 默认规则 |
|---|---|---|
drop | 丢弃所有流入包 | 只允许流出 |
block | 拒绝流入包 | 返回 icmp-host-prohibited |
public | 公共区域(默认) | 允许 ssh、dhcpv6-client |
external | 外部网络 | 允许 ssh |
dmz | 非军事区 | 允许 ssh |
work | 工作区域 | 允许 ssh、dhcpv6-client、ipp-client |
home | 家庭区域 | 允许 ssh、dhcpv6-client、samba-client、ipp-client |
internal | 内部网络 | 同 home |
trusted | 信任区域 | 允许所有连接 |
Zone 常用操作
# 查看默认 zone
firewall-cmd --get-default-zone
# 设置默认 zone
firewall-cmd --set-default-zone=public
# 查看所有 zone
firewall-cmd --get-zones
# 查看指定 zone 的规则
firewall-cmd --zone=public --list-all
# 把网卡绑定到指定 zone
firewall-cmd --zone=public --change-interface=eth0 --permanent
规则配置
- 临时规则:立即生效,重启 firewalld 后失效
- 永久规则:加
--permanent,必须执行--reload才生效
# 添加端口(临时)
firewall-cmd --zone=public --add-port=80/tcp
# 添加端口(永久)
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 添加服务(临时 / 永久)
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --add-service=http --permanent
# 移除端口 / 服务
firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --zone=public --remove-service=http --permanent
# 重新加载规则(使永久规则生效)
firewall-cmd --reload
# 查看所有永久规则
firewall-cmd --list-all --permanent
富规则(Rich Rules)——防火墙高级规则,用于复杂流量控制:
# 允许特定 IP 访问 SSH
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept'
# 拒绝特定 IP 访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.200" drop'
# 查看富规则
firewall-cmd --list-rich-rules
3.2 ufw(Kali / Ubuntu)
基本管理
# 查看状态
ufw status
# 启用 / 禁用
ufw enable
ufw disable
# 重新加载
ufw reload
重要提示:ufw 默认处于禁用状态,所有配置的规则只有在执行
ufw enable后才会真正生效并拦截流量。
规则配置
# 允许端口
ufw allow 22
ufw allow 80/tcp
# 允许服务
ufw allow ssh
ufw allow http
# 拒绝端口
ufw deny 23
# 允许特定 IP
ufw allow from 192.168.1.100
# 允许特定 IP 访问特定端口
ufw allow from 192.168.1.100 to any port 22
# 查看添加的规则
ufw show added
# 删除规则
ufw delete allow 22
ufw 的 allow/deny 规则默认立即生效且永久保存,无需额外参数。
3.3 firewalld vs ufw 差异对比
| 功能 | CentOS / RHEL (firewalld) | Kali / Ubuntu (ufw) |
|---|---|---|
| 服务名称 | firewalld | ufw |
| 配置文件 | /etc/firewalld/ | /etc/ufw/ |
| zone 概念 | 有(9 个 zone) | 无 |
| 临时规则 | firewall-cmd --add-xxx | ufw allow/deny |
| 永久规则 | 加 --permanent 参数 | ufw 命令默认永久 |
| 重新加载 | firewall-cmd --reload | ufw reload |
| 服务管理 | systemctl 管理 firewalld 服务 | ufw enable/disable |
| 默认状态 | 默认启用 | 默认禁用 |
| 图形界面 | firewall-config | gufw(需安装) |
| 复杂规则 | 支持富规则(rich rules) | 有限支持 |
3.4 systemctl 差异对比
| 功能 | CentOS / RHEL | Kali / Ubuntu |
|---|---|---|
| 服务名后缀 | .service 可省略 | .service 可省略 |
| SSH 服务名 | sshd | ssh |
| 防火墙服务 | firewalld | ufw(实际是 iptables 前端) |
| 网络服务 | NetworkManager | systemd-networkd 或 NetworkManager |
3.5 修改 SSH 端口的"保命"操作流程
修改 SSH 端口是最容易把自己锁在服务器外的操作,必须按以下顺序执行:
CentOS / RHEL 示例:
- 防火墙放行新端口:
firewall-cmd --zone=public --add-port=2222/tcp --permanent - 重新加载防火墙:
firewall-cmd --reload - 修改 SELinux 策略:
setenforce 0 - 修改 SSH 配置:
vim /etc/ssh/sshd_config,将Port 22改为Port 2222 - 重启 SSH 服务:
systemctl restart sshd - 验证端口监听:
ss -tulnp | grep 2222 - 不要关闭当前会话,新开终端测试新端口连接
Kali / Ubuntu 示例:
- 防火墙放行新端口:
ufw allow 2222/tcp - 修改 SSH 配置:
vim /etc/ssh/sshd_config,将Port 22改为Port 2222 - 重启 SSH 服务:
systemctl restart ssh - 验证端口监听:
ss -tulnp | grep 2222
核心原则:先放行端口,再改配置;改完不关闭当前连接,新开窗口测试。
四、知识小结
| 知识模块 | 核心内容 | 一句话速记 |
|---|---|---|
| 查看进程 | ps aux、pstree、top/htop | 应急响应第一步 |
| 终止进程 | kill PID、kill -9 强制、pkill/killall 按名 | 先 pgrep 确认再杀 |
| 进程优先级 | nice/renice,-20~19,越小越高 | 抢 CPU 资源用 |
| systemctl | start/stop/restart/reload/status/enable | 服务管理万能命令 |
| SSH 服务名 | CentOS 用 sshd,Ubuntu 用 ssh | 记清别输错 |
| 网络配置 | ip addr、ip route、/etc/resolv.conf | 现代命令替代 ifconfig |
| 端口监听 | ss -tulnp(推荐)、netstat -tulnp | 后门排查关键命令 |
| firewalld | zone 区域、--permanent 永久、--reload 生效 | 加 permanent 别忘 reload |
| ufw | 默认禁用,allow/deny 默认永久 | 配置后记得 enable |
| 改 SSH 端口 | 先放行端口,再改配置,不关闭当前会话 | 保命操作流程 |