Linux常见漏洞解决办法
上周帮朋友处理一台被挖矿的服务器,SSH端口开着22,洞解root密码是见漏决办admin123,cron里被塞了三个恶意脚本。洞解这种事我每年至少碰到五六回。见漏决办Linux漏洞利用往往不是洞解多高深的技术,而是见漏决办基础配置的疏忽。下面直接说几个高频漏洞和对应的洞解处理办法,全是见漏决办实战里踩过的坑。
1. SSH暴力破解与弱口令
这是洞解最老套也最有效的攻击方式。我见过一台机器日志里/var/log/secure有几十万条失败登录记录,见漏决办攻击者用字典跑了一个月。洞解解决办法就三件事:
- 改默认端口。见漏决办22换成
22222之类,洞解能过滤掉90%的见漏决办自动化扫描。别抬杠说端口扫描也能发现,脚本小子没那个耐心。 - 禁用密码登录,用密钥。在
/etc/ssh/sshd_config里设PasswordAuthentication no,然后重启sshd。 - 装
fail2ban。它监控日志,连续失败几次就自动封IP。配置/etc/fail2ban/jail.local,把maxretry设为3,bantime设3600秒。
# 快速检查当前失败登录次数 grep "Failed password" /var/log/auth.log | wc -l 如果输出数字超过100,你的机器已经在被持续攻击了。别犹豫,立刻改配置。
2. 内核提权漏洞(如Dirty Pipe、PwnKit)
2022年的Dirty Pipe(CVE-2022-0847)影响Linux 5.8以上内核,普通用户能覆写只读文件提权到root。PwnKit(CVE-2021-4034)更狠,pkexec默认装在所有主流发行版上,一条命令就能拿root。补丁出来那周,我连夜给手头十几台机器跑了更新。
处理方式:
- 立刻
uname -r看内核版本。5.16.11以下且大于5.8的,赶紧升级。 - Debian/Ubuntu:
apt update && apt upgrade linux-image-$(uname -r),然后重启。 - CentOS/RHEL:
yum update kernel,重启后grub2-set-default选新内核。 - 检查
pkexec是否被利用:ls -l /usr/bin/pkexec,如果权限是rwsr-xr-x且没打补丁,临时chmod 0755 /usr/bin/pkexec去掉suid位。
kexec之类的热补丁方案对提权漏洞不一定有效。别偷懒。 3. 配置错误:SUID/SGID滥用与计划任务
提权里最容易被忽略的是SUID文件。攻击者找到find / -perm -4000 -type f 2>/dev/null列出的可执行文件,只要有一个存在漏洞(比如老版本sudo、passwd),就能直接root。我习惯每季度跑一次这个命令,对照白名单删掉不必要的SUID位。
计划任务也是重灾区。/etc/cron.d/下多出陌生文件、/var/spool/cron/里用户crontab被改,都是入侵信号。用crontab -l和ls -la /etc/cron*定期检查。发现可疑脚本,先cat看内容,再chattr +i锁住文件防止被改回。
# 找出最近7天被修改过的计划任务文件 find /etc/cron* /var/spool/cron -mtime -7 -type f -exec ls -la { } \; 4. 服务暴露与未授权访问
Redis默认无密码、MongoDB监听0.0.0.0、Docker API开2375端口——这三个凑一块能直接让攻击者控制宿主机。去年有个客户,Redis绑在公网,攻击者写SSH公钥到/root/.ssh/authorized_keys,五分钟就登录进来了。
对策简单粗暴:
- Redis:
bind 127.0.0.1+requirepass 强密码,或者干脆用rename-command CONFIG ""禁用危险命令。 - MongoDB:启用认证
security.authorization: enabled,别用默认端口27017。 - Docker:
dockerd -H unix:///var/run/docker.sock,别监听TCP。要远程管理就用SSH隧道。 - 用
ss -tlnp看监听端口,发现0.0.0.0:*的非必要服务,立刻改配置或防火墙封掉。
我自己的习惯是装完系统先iptables -P INPUT DROP,然后按需放行。虽然粗暴,但省心。
漏洞利用和修补就是猫鼠游戏。上面这些办法不复杂,关键在定期执行。我见过太多人补丁打完就不管了,三个月后同一个漏洞又被利用。设个日历提醒,每月花半小时跑一遍检查脚本,比出事后再救火划算得多。
最后说个真实案例:有台机器被入侵后,攻击者留了/usr/bin/curl的替换版本,每次curl都会上报数据。用rpm -Va或debsums校验文件完整性才发现的。所以,别只盯着网络层,系统文件完整性也得查。
