当怀疑Linux服务器可能被入侵时,系统管理员需要快速而全面地检查系统状态。以下是11个关键步骤的详细排查流程:
# 查看当前登录用户
who -a
# 显示详细的登录信息
last -a
# 检查异常SSH会话
netstat -tnpa | grep 'ESTABLISHED.*sshd'
# 查看所有运行进程的完整命令行
ps auxf
# 按CPU使用率排序
top -c
# 检查异常进程名或路径
ps aux | grep -E '(\.tmp|/var/tmp|/dev/shm)'
# 查看所有网络连接
netstat -anp
# 使用ss命令(更现代)
ss -tulnp
# 检查异常外连IP
lsof -i | grep ESTABLISHED
# 查找最近修改的文件(24小时内)
find / -type f -mtime -1 -print
# 检查系统关键目录
ls -la /etc /bin /sbin /usr/bin /usr/sbin | grep '^...x..x..x'
# 检查隐藏文件
find / -name ".*" -type f -print
# 查看所有用户的crontab
ls /var/spool/cron/crontabs/
cat /var/spool/cron/crontabs/*
# 检查系统级计划任务
ls -la /etc/cron*
# 检查/etc/passwd和/etc/shadow
ls -l /etc/passwd /etc/shadow
# 查看新增用户
awk -F: '$3 >= 1000 {print $1}' /etc/passwd
# 检查sudo权限变更
cat /etc/sudoers | grep -v '^#\|^$'
# 检查SSH授权密钥
cat ~/.ssh/authorized_keys
# 检查SSH配置文件
cat /etc/ssh/sshd_config | grep -v '^#\|^$'
# 查找异常SSH密钥
find / -name "id_*" -o -name "*.pub" -type f
# 查看认证日志
cat /var/log/auth.log | grep -i 'fail\|accept'
# 检查系统日志
journalctl -xe
# 检查最近重启记录
last reboot
# 使用rkhunter检查rootkit
rkhunter --check
# 使用chkrootkit检查
chkrootkit
# 检查LD_PRELOAD劫持
echo $LD_PRELOAD
# 查看已加载内核模块
lsmod
# 检查异常模块
cat /proc/modules | awk '{print $1}'
# 检查系统二进制文件完整性(需预先有基准)
rpm -Va # 对于RPM系统
debsums -a # 对于Debian系统
# 检查SUID/SGID文件
find / -perm -4000 -o -perm -2000 -type f -exec ls -la {} \;
记住,预防胜于治疗。定期更新系统、实施最小权限原则、启用入侵检测系统(如AIDE或OSSEC)可以大大降低入侵风险。