平时我拿到一台需要排查的 Linux 服务器,脑子里会快速过一遍一串“Linux 安全常用命令”清单:先看谁登录过、再看谁在跑、然后看连了哪里、最后翻权限和定时任务。这套顺序不是随便定的,它对应的是攻击者的完整行为链——“入口从哪里进、进来后做了什么、怎么做到长期存活、依赖哪些暴露面”。很多刚上手运维的人喜欢单点突击,比如看到 CPU 飙高就去 top 找进程,找到就 kill,结果第二天进程又回来了。问题就出在没按链路排查,只处理了现象,没处理根因。
所以这篇不讲零散的命令大全,而是把安全排查看成一条流水线:从登录审计到进程分析,从网络外联到文件后门,从自启服务到防火墙策略,每个环节给你我能直接“抄作业”的命令,也解释为什么选这条命令、有哪些坑。适合刚接手服务器的新手,也适合已经被安全事件折腾过、想系统化建立排查思路的人。
1. 安全排查的底层逻辑:先看入口、再看内部、最后封门
1.1 服务器被入侵的四个典型信号
绝大多数服务器被入侵,不会像电影里那样弹个警告窗口。真实场景往往是先出现一些“小异常”,比如:CPU 突然飙到 90% 以上但业务流量没涨;登录日志里出现大量 Failed password;某个服务端口莫名其妙多了一个监听;或者 /tmp 目录下出现了一堆名字很怪的文件。
这四个信号分别对应攻击链上的不同环节:异常登录说明入口已经被试探甚至攻破,CPU 异常说明有进程在跑不明负载,异常端口说明可能有东西在等待连接或主动外联,异常文件说明攻击者试图留下持久化后门。排查的时候不能只针对一个信号做局部操作,否则很容易陷入“按下葫芦浮起瓢”的循环。
我习惯把排查命令分成四个层级:入口层(登录记录)、运行层(进程和网络)、持久层(文件、定时任务、自启动服务)、收敛层(防火墙和暴露面)。这套分法不是理论框架,而是我实际处理问题时用顺手了的路径,下面每个章节都围绕这个路径展开。
1.2 排查顺序和现场保护原则
安全排查最重要的原则是“先保现场,再动手术”。这句话怎么理解呢?比如你发现 CPU 飙高,第一反应是直接把可疑进程 kill 掉,但进程没了,它打开的端口、它留下的文件路径、它的父进程关系,这些证据就全都断了。更稳妥的做法是先把系统信息完整记录下来,再做处置。
具体操作上,我会先执行一条“取证”命令链,把当前状态固化下来:
bash复制date
uptime
last -20
ps -ef > /tmp/ps_before.txt
ss -antp > /tmp/ss_before.txt
lsof -i > /tmp/lsof_before.txt 2>/dev/null
这些输出会告诉你“在哪个时间点、有哪些用户登录过、系统里跑了哪些进程、网络上有哪些连接”。保存下来之后,后续所有对比和分析都有据可依。很多运维新手忽略这一步,等处置完了才想起来要复盘,但日志和进程快照已经刷新了,只能干瞪眼。
另外要注意,排查阶段尽量不要重启服务和系统。重启会导致内存里的恶意进程被清掉,一些不落地的后门也随之消失。如果确实需要重启,一定要在重启前把进程状态、内存信息、网络连接先保存好,否则等于自己销毁证据。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 用户与登录审计:从入口堵住风险
2.1 账号体系体检:找出不该存在的特权账号
攻击者拿到一台服务器后,最常做的一件事就是创建一个新账号或者把已有账号提权,方便以后随时回来。所以排查的第一个重点就是账号体系。先看 /etc/passwd 和 /etc/shadow 两个文件,重点检查三类情况:UID 为 0 的账号、空密码账号、最近被修改过密码的账号。
UID 为 0 的账号拥有和 root 完全相同的权限,这是最需要警惕的。用一条 awk 就能筛出来:
bash复制awk -F: '{if($3==0)print $1":"$3}' /etc/passwd
正常情况下,输出应该只有 root 一行。如果出现了第二个用户名,基本可以判定是后门账号。
空密码账号和异常密码修改时间同样值得关注。检查空密码可以用:
bash复制awk -F: '{if($2=="")print $1}' /etc/shadow
正常系统里不应该存在空密码账号,出现就要立刻排查。密码最近被修改过也可能是个信号,尤其是普通业务账号的 password 字段时间戳异常靠前,说明有人近期重置过密码,需要确认是不是管理员自己做的。
2.2 登录记录分析:揪出暴力破解和异常登录
登录记录是最直观的入口审计数据。last 命令读取 /var/log/wtmp,告诉你哪些 IP 在什么时间段成功登录过:
bash复制last -20
last -i -a
lastb 命令则读取 /var/log/btmp,记录的是所有失败的登录尝试,也就是暴力破解的来源统计:
bash复制lastb | head -50
对失败登录做来源聚合,是判断是否正在被扫描或爆破的关键操作。不同发行版的日志路径不一样,CentOS/RHEL 系看 /var/log/secure,Ubuntu/Debian 系看 /var/log/auth.log。我在 CentOS 上常用的统计命令是这样:
bash复制grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head
输出会直接告诉你“哪个 IP 尝试了多少次失败登录”。如果某个 IP 在一小时内尝试了几百次,那基本可以断定是爆破来源,后续可以直接加入防火墙封禁列表。
除了失败记录,成功登录的记录同样重要。不仅要看时间、来源 IP,还要看登录后是不是立刻有异常操作。比如 root 在凌晨三点从陌生 IP 登录,即使只有一次,也值得高度重视。我一般会配合查看当前在线用户:
bash复制who
w
如果发现有不该存在的在线会话,可以通过 pkill -u 用户名 或 kill PID 直接踢掉。
2.3 用户态提权风险检测
登录入口没问题不代表内部就安全,还要看普通用户有没有可能提权到 root。sudo 配置是最常见的提权入口。先用 sudo -l 查看当前用户能执行哪些特权命令:
bash复制sudo -l
如果输出里允许某个账号“无密码执行所有命令”,那这个账号的安全级别跟 root 没什么区别。还要检查 /etc/sudoers 和 /etc/sudoers.d/ 目录下有没有异常规则:
bash复制grep -v '^#\|^$' /etc/sudoers
cat /etc/sudoers.d/*
这里特别提醒一个细节:攻击者经常利用用户目录下可写的脚本文件提权。比如某个用户在 /usr/local/bin 下有写权限,攻击者就可以把恶意脚本放到这个目录,等待 root 用户执行。检测这类风险可以扫描全局可写文件:
bash复制find / -type f -perm -0002 2>/dev/null
这些文件不一定是被植入的后门,但它们为提权提供了便利条件。看到结果里出现 /tmp、/var/tmp、/usr/local/bin 下的异常文件,就要单独检查内容。
3. 异常进程与网络连接:抓正在发生的坏事
3.1 用 top 和 ps 定位可疑进程
登录审计解决的是“进来过没有”的问题,而进程排查解决的是“现在在干什么”的问题。接到 CPU 异常告警时,我的第一站通常是 top,按 CPU 占用排序,看看谁在消耗资源:
bash复制top -b -n 1 | head -20
-top 非交互式模式适合一次性抓取,-n 1 表示只刷一次,结果直接返回到终端。不过 top 显示的进程名可以轻易伪装,真正发现问题后要立刻用 ps 拿完整命令行:
bash复制ps -ef --sort=-%cpu | head -20
ps aux --sort=-%cpu | head -20
排查进程时有几个关键细节要牢记。第一,进程名带中括号、比如 [kthreadd]、[rcu_gp] 这类,是内核线程,属于正常现象,别去 kill。第二,攻击者常用 apache2、mysql、systemd 这类名字伪装进程,因为名字看起来“眼熟”反而容易被忽略。判断方法很简单:查看它的可执行文件路径是不是真的在标准目录下。
我经常用这个组合来检查单个进程的完整信息:
bash复制ls -l /proc/PID/exe
cat /proc/PID/cmdline | tr '\0' ' '
ls -l /proc/PID/cwd
/proc/PID/exe 指向进程的可执行文件真实路径。如果它指向 /tmp 或 /dev/shm 下的文件,哪怕进程名写着 systemd,也基本能判定是木马。类似的,/proc/PID/cwd 指向进程的工作目录,恶意程序经常把工作目录设在 /tmp,这就是一个非常明显的异常指标。
3.2 用 lsof 看进程背后的小动作
ps 告诉你进程是什么名字,但很多恶意进程会把自己伪装得和正常进程几乎一样,这时候就需要 lsof 来揭底。lsof 可以列出进程打开的所有文件,从中能看到日志写入、配置读取、临时文件操作等细节:
bash复制lsof -p PID
我特别推荐检查“被删除但仍打开”的文件。攻击者经常把木马文件运行后立即删除,以为这样就能消灭证据,但进程既然还在运行,文件就被进程保持着打开状态。用 lsof +L1 可以直接把这些文件筛出来:
bash复制lsof +L1 | grep deleted
这个命令的操作原理很简单:+L1 表示列出 link count 小于 1 的文件,也就是已经在文件系统里被删除、但仍有进程握住的那些。如果 output 里出现 /tmp 下的可执行文件,或者 /var/tmp 下的脚本,同时又有对外的网络连接,那基本可以确定它在做坏事。
lsof 还能查看某个进程建立的网络连接:
bash复制lsof -i -a -p PID
这样可以把进程名、PID、协议、本地端口、远端地址一次性列全。拿到这些数据时,先把可疑进程的父进程也查一下,用 ps -fp PPID,因为绝大多数恶意启动链里,父进程往往是触发它执行的 shell 或定时任务。
3.3 用 ss 审计外联连接和监听端口
网络连接是判断“这个进程是否在偷偷外联”的关键。我习惯先看完整连接列表,再按条件和状态过滤:
bash复制ss -antp
参数解释一下:-a 显示所有连接,-n 不做域名解析、输出数字 IP 端口,-t 只看 TCP,-p 显示占用进程信息。输出里重点关注两个状态:ESTABLISHED 表示已建立的连接,SYN-SENT 表示主动外连但还没握手成功。如果某个进程每分钟建立几十条 SYN-SENT 连接,说明它在持续尝试连接外部服务器,可能是回连控制端或者被用于发起攻击。
按状态统计可以用一行命令:
bash复制ss -ant state established '( dport = :443 )'
这个写法可以快速筛选出所有发往 443 端口的已建立连接。正常业务往外连 443 并不奇怪,但如果你看到一台 Nginx 反向代理服务器突然有几百条到陌生 IP 的 443 连接,那就该查一查是哪个进程发起的了。
监听端口同样要重点审计。一个只跑 Web 业务的服务器,不该同时监听 4444、6667、7777 这类非常规端口。用 ss 查看所有监听端口:
bash复制ss -tlnp
对比当前业务应该开放的端口,凡是多出来的监听项都要追查。还要注意监听地址,0.0.0.0 和 : 表示对所有网卡开放,如果某个内部服务监听在这个地址上,等于对公网暴露了入口。数据库、Redis、监控端口这类敏感服务,至少要限定内网 IP 范围,不能默认监听所有接口。
4. 文件系统与隐藏后门:找到长期潜伏的马
4.1 SUID 权限文件排查
文件权限里的 SUID 位是 Linux 系统一个特殊机制。简单说,设置了 SUID 的程序在运行时,会以文件属主的权限执行。如果 root 属主的程序带 SUID,普通用户运行它就能临时获得 root 权限。这相当于系统里藏了一批“特权钥匙”,一旦有陌生程序混进来,就等于把 root 权限拱手送人。
排查所有带 SUID/SGID 位的文件:
bash复制find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null
正常系统里的 SUID 文件通常就那么几个,比如 /usr/bin/passwd、/usr/bin/sudo、/usr/bin/mount 等。如果结果里出现 /tmp 目录下的二进制、或者名字看起来像系统工具但路径不对的文件,就要立刻检查。一个常见的检查方式是 stat 查看它的修改时间,再对比同目录下系统文件的时间模式。
这部分的原理值得多说一句:SUID 后门为什么被攻击者偏爱?因为它不需要你创建新的特权账号,也不会在 /etc/passwd 里暴露行踪,只要把一个小程序放到目标位置,谁运行它谁就是 root。所以即便没有发现异常账号,SUID 排查也是不可跳过的一步。
4.2 最近修改的文件与高危目录
攻击者在植入后门、修改配置、写入脚本时,都会留下文件时间痕迹。排查最近几天内被修改过的文件,是还原攻击路径的有效手段:
bash复制find / -mtime -3 -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/dev/*" 2>/dev/null
这里排除 /proc、/sys、/dev 是因为这三个虚拟目录的内容会实时变化,不排除会产生大量误报。输出的文件列表里,重点观察几个高风险目录:/tmp、/var/tmp、/dev/shm、/usr/bin、/usr/sbin、/etc/init.d、/etc/systemd/system。如果这些目录下出现近期新增的可执行脚本或动态库,必须逐一查看内容。
这里也涉及一个判断时间戳的进阶技巧。攻击者会用 touch 命令伪造文件的修改时间,但 touch 只能改 mtime 和 atime,改不了 ctime。ctime 是 inode 状态改变时间,只要文件的权限、属主、链接数发生变化,内核就会自动更新。用 stat 命令就能看到完整的三项时间:
bash复制stat /usr/bin/ls
如果发现一个文件的 mtime 完全正常,但 ctime 非常新,说明它的元数据被改动过,这本身就是可疑信号。
4.3 自启动项与计划任务里的后门
排查过文件后,还要确认攻击者有没有设置“自动复活”机制。定时任务是最常用的持久化方法,我排查时按这个顺序处理:
bash复制crontab -l
ls -la /var/spool/cron/
cat /etc/crontab
ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/
计划任务里如果出现 curl、wget、base64 -d、/dev/tcp 这些特征,基本可以直接断定是下载执行型后门。遇到过写得很狡猾的任务,把命令编码成 base64 字符串放在 crontab 里,crontab -l 看到的是一串乱码,解码之后才发现是下载脚本。判断这种隐藏任务可以用 grep 直接扫描:
bash复制grep -r "curl\|wget\|base64" /etc/cron* /var/spool/cron 2>/dev/null
除了 crontab,shell 初始化文件也是重点隐藏区域。比如 ~/.bashrc、/etc/profile、/etc/profile.d/ 下的脚本,用户每次登录都会加载。攻击者如果往这些文件里塞几行反弹连接命令,你就很难用进程排查抓到它,因为它只在登录瞬间执行。检查方法:
bash复制grep -n "curl\|wget\|nc \|/dev/tcp\|bash -i" /etc/profile /etc/bashrc ~/.bashrc 2>/dev/null
另外 systemd 自启动服务也不能放过。查看所有开机自启的 service 文件,重点检查启动命令和描述信息里有没有可疑内容:
bash复制systemctl list-unit-files --type=service --state=enabled
systemctl cat 服务名
5. 防火墙、服务与日常加固:收敛暴露面
5.1 自启服务审计
安全排查到了最后阶段,要解决的是“未来怎么防”的问题。第一步是审计当前开启自启的服务列表:
bash复制systemctl list-unit-files --type=service --state=enabled
输出会列出所有开机启动的系统服务。对照业务需求,凡是多出来的不该存在的服务,都要进一步用 systemctl status 服务名 查看它的状态和启动命令。很多攻击者会把自己的后门伪装成一个正常名字的 systemd 服务,比如新增一个名为 “network-monitor.service” 的单元,ExecStart 指向 /tmp 下的脚本。检查的时候尤其要注意 ExecStart 的路径,服务描述里写着 Network Monitor、System Update 这类通用词但实际路径很可疑的,要盯紧。
确定没问题的服务可以保留,长期不用的服务建议直接禁用:
bash复制systemctl disable --now 服务名
这里顺便说一句,自启服务的清理不只是安全问题,性能上也有收益。我曾经在一台老服务器上发现十来个废弃服务开机自启,每次启动要多花好几分钟,禁掉之后整台机器清爽很多。
5.2 防火墙策略检查与快速封禁
防火墙是收敛暴露面的决定性手段。排查时先看当前生效的策略,再针对异常来源做封锁。CentOS/RHEL 7 以上用 firewalld 的话:
bash复制firewall-cmd --list-all
iptables 用户可以直接看规则链:
bash复制iptables -L -n --line-numbers
发现暴力破解来源 IP 后,最快的手动封禁命令是:
bash复制iptables -I INPUT -s 203.0.113.10 -j DROP
firewalld 下的长效封禁则写成:
bash复制firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" reject'
firewall-cmd --reload
防火墙策略的核心原则是默认拒绝。很多服务器默认策略是放行所有流量,只靠业务层的密码保护,一旦密码泄露就门户大开。合理的做法是,明确放行需要的端口,其余一律拒绝。这个思路在配置云安全组和本机防火墙时都适用。
5.3 SSH 与基础服务的最小加固配置
SSH 是服务器最重要的管理入口,也是最常被爆破的目标。以下配置我建议直接落地到 /etc/ssh/sshd_config:
bash复制PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 0
PermitRootLogin no 禁止 root 直接登录,PasswordAuthentication no 强制使用密钥认证。这两条加在一起,能在很大程度上解决暴力破解问题。但改动之前务必先确认自己有可用的密钥登录方式,否则改完把自己锁在外面就尴尬了。我习惯的做法是:先开一个新会话测试密钥登录 OK,再 reload SSH 服务。
如果暂时没办法关闭密码登录,至少要做好失败尝试锁定。通过 PAM 的 pam_faillock 模块,可以配置连续失败几次后锁定账号:
bash复制auth required pam_faillock.so preauth audit silent deny=5 unlock_time=1800
查看锁定状态用 faillock --user 用户名,管理员可以在确认安全后通过 faillock --user 用户名 --reset 解锁。另一个更自动化的方案是 fail2ban,它能监控 SSH 登录日志,自动把爆破 IP 拉黑一段时间,配置示例:
bash复制[sshd]
enabled = true
port = ssh
maxretry = 3
bantime = 1h
fail2ban 的优点是全程自动,不需要人工盯着日志。缺点是新版本对日志格式变化敏感,升级系统后偶尔会失效,需要自查 filter 是否匹配到日志。这类细节只能靠平时监控积累,没有一劳永逸的办法。
6. 一次完整的攻击排查实操复盘
6.1 场景描述与第一步动作
光讲命令容易散,我把一次完整的排查过程复盘出来,带你走一遍时间线。场景是这样的:一台用来部署演示网站的测试服务器,Nginx 和 PHP 服务常驻,某天收到 CPU 持续 90% 以上的告警,同时登录日志里出现大量失败尝试。
我接到告警后的第一步并不是急着找进程,而是先保存现场。执行了前面提过的取证命令链,把 ps、ss、last 的输出都存到 /tmp 下。然后运行 uptime 和 top,发现高 CPU 的确实有一个叫 apache2 的进程,PID 是 32041,占了 98% CPU,但服务器装的是 Nginx,根本不应该有 apache2 进程。到这里已经初步锁定目标。
6.2 从日志到进程的顺藤摸瓜
锁定可疑进程后,我开始查它的完整身份。首先看可执行文件路径:
bash复制ls -l /proc/32041/exe
cat /proc/32041/cmdline | tr '\0' ' '
/proc/32041/exe 指向了一个已被删除的文件,cmdline 里是迷惑性的字符串,内容很长但核心是下载一段脚本并执行。随后使用 lsof 检查它打开的端口:
bash复制lsof -p 32041
果然发现它建立了大量到外部 IP 的 TCP 连接,目标端口是 6667。结合 CPU 占用和持续外联,这基本可以确认是一台被控肉鸡,用来做扫描或者流量转发。
接下来查它的资金来源。我查看父进程:
bash复制ps -fp $(ps -o ppid= -p 32041)
父进程是 systemd 下的一个服务,定睛一看才发现 /etc/systemd/system 下多了一个名字很正经的 service 文件,启动命令指向 /tmp/.update.sh。再翻 /tmp 目录,看到隐藏文件确实存在,脚本内容里写着 base64 解码后执行下载逻辑。同时 crontab -l 里也发现了一条每三分钟执行的规则,命令指向同一个隐藏脚本。到这里,持久化链路已经完全浮出水面。
6.3 清理与处置的完整过程
确认链路之后才能动手,我的处置顺序是:先封外联、再杀进程、最后清持久化。封外联是为了防止它在被清理时继续回传数据,封禁命令就用前面写的 iptables 规则。然后杀掉进程:
bash复制kill -9 32041
删除可疑的 service 文件和 crontab 规则,清理 /tmp 下的隐藏脚本。再检查一遍所有登录记录,逐个确认没有异常账号被创建。最后修改 SSH 配置,关闭密码登录并禁止 root 远程登录,重启 SSH 服务。
整套流程下来大约半小时。关键不是命令本身多复杂,而是顺序不能乱:先取证、后隔离、再清除、最后加固。如果一开始就杀进程、删文件,很多攻击链路信息就断了,后续想搞清楚“它怎么进来的”会非常困难。
7. 高频问题与经验陷阱速查
7.1 命令被替换或日志被清空怎么办
真遇到高级攻击者时,ls、ps、netstat 这些命令本身可能已经被替换成“阉割版”,输出结果里故意隐藏恶意进程。检测命令是否被替换,最朴素的做法是使用绝对路径调用,比如 /bin/ls /usr/bin/ps,因为大部分替换发生在 PATH 路径优先级层面。想进一步确认命令二进制是否被篡改,可以用 stat 查看核心命令的 ctime,或者用包管理器校验文件完整性,RHEL/CentOS 用 rpm -Va,Debian/Ubuntu 用 dpkg -V。
日志被清空也是常见情况。攻击者清理了 /var/log/secure、/var/log/wtmp,last 和 lastb 输出自然为空。这时候不要慌,先检查 shell 历史、临时目录残留、系统 user 目录下的 .bash_history,这些地方经常有没清干净的痕迹。否则只能从防火墙连接日志、外部威胁情报平台这些旁路数据还原攻击轨迹。
7.2 各发行版日志路径与字段差别
安全排查中到处是“发行版差异”,最典型的就是登录日志。CentOS/RHEL 系是 /var/log/secure,Debian/Ubuntu 系是 /var/log/auth.log。排查命令里涉及的字段位置也会因 SSHD 版本变化出现差异。比如 awk '{print $(NF-3)}' 这个取 IP 的写法,在某些老版本里取到的不是源 IP,而是端口号。解决办法是先看一条原始日志长什么样:
bash复制grep "Failed password" /var/log/auth.log | head -1
确认字段位置后再套统计命令,不要在没看样例的情况下盲目运行 awk,否则统计结果会误导整个排查方向。还有一个容易被忽略的点:日志轮转会把历史日志压缩成 .gz 文件,排查时要用 zcat 或 zgrep 才能读到,只看明文文件会漏掉大量历史记录。
7.3 高价值排查命令组合
最后整理几个高频组合,建议直接收藏:
bash复制# 统计暴力破解来源 Top 10(CentOS)
grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -10
# 查看当前所有已建立的外联连接
ss -ant state established | awk '{print $4, $5}' | sort | uniq -c | sort -rn | head
# 查找可疑隐藏执行文件
find /tmp /var/tmp /dev/shm -type f -exec ls -l {} \; 2>/dev/null
# 检查所有用户最近登录记录(含来源 IP)
last -ai | head -50
# 扫描定时任务里的下载执行特征
grep -rE "curl|wget|base64|/dev/tcp" /etc/cron* /var/spool/cron 2>/dev/null
这些命令组合覆盖了入口、运行、持久化三个层面的核心检测。实际排查中不需要背全,只要记住几个入口命令,根据现场发现再一层层深入就够了。能把上面几条组合跑一遍,服务器的安全水位基本可以做到心中有数。
这里顺便提醒:组合命令尽量先保存输出到文件再分析,不要直接在终端一页页翻。因为命令输出可能会很长,翻屏过程中容易错过关键信息,保存到文件后可以反复 grep 和对比,明显更高效。
结尾
说实话,我第一次独立处理这类告警时也手忙脚乱,没保存现场就把可疑进程杀了,后来才发现定时任务里还有一条后门规则,只能重新翻日志找线索,浪费了很多时间。后来我养成了两个习惯:一是接到告警先打包原始记录再动手,二是把今天提到的这些 Linux 安全常用命令整理成一份本地巡检脚本,定期自动生成报告。安全排查这件事,本质不是比谁命令背得熟,而是比谁能在最短时间内还原事实、缩小影响范围。希望这篇内容能在你真遇到问题时,帮你少走几次弯路。
