加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.0577zz.cn/)- 应用程序、AI行业应用、CDN、低代码、区块链!
当前位置: 首页 > 服务器 > 安全 > 正文

服务器安全审计:90%漏洞源于3类配置疏漏

发布时间:2026-10-22 11:23:03 所属栏目:安全 来源:DaWei
导读:  跟产品吵完第三轮灰度开关没推完,我盯着监控大屏右下角那个标着“netstat_estab”但实际早停采的曲线抖了一下——就一下,像有人拿指甲刮了下玻璃。PM蹲在工位隔板边剥橘子,瓣儿挤得汁水溅到测试提的bug单上,那张单子

  跟产品吵完第三轮灰度开关没推完,我盯着监控大屏右下角那个标着“netstat_estab”但实际早停采的曲线抖了一下——就一下,像有人拿指甲刮了下玻璃。PM蹲在工位隔板边剥橘子,瓣儿挤得汁水溅到测试提的bug单上,那张单子标题写着“登录态失效概率性复现”,底下一行小字:“前端说后端没返set-cookie”。我说这单先挂起,等我把去年国庆那个审计报告翻出来。他含着橘络点头,唾液腺都比我的KPI诚实。


  90%漏洞源于三类配置疏漏——不是扫描器报的,是去年国庆我连熬四十八小时在两百台机器里扒出来的。不是渗透结果,是安全组半夜发来告警邮件时,DBA老张正用sshuttle把测试库流量偷偷导到自己笔记本跑ETL,他顺手改了/etc/ssh/sshd_config里的PermitRootLogin yes,还加了注释:“临时,明早回滚”,回滚记录里压根没这条。我敢打包票,这个配置在七十六台生产节点里活过三天以上。你猜怎么着?扫描器扫它不报高危,因为Banner没暴露;WAF不拦,因为压根没进流量;就它自己安静地蹲在systemctl status ssh里,像个退休的守门员。


  第一类,SSH配置裸奔。不是密码弱,是根本没配key强制、没关X11Forwarding、没禁root直接登。我们查的时候发现运维同学为图快,在Ansible playbooks里写了个template:‘{{ 'yes' if env == 'prod' else 'no' }}’——结果env变量在某次灰度切流时被覆盖成空字符串,yes/no全变成no,所有节点ssh服务启动时fallback默认值……PermitRootLogin又亮了。这事我说不准是不是他们有意为之,但那个template文件最后修改时间是去年八月二十七号下午三点十七分,而八月二十八号凌晨三点的oncall手机震了一下,震得我枕头边半杯凉透的速溶咖啡晃出一圈浅褐色涟漪。


  第二类,日志权限反常识。/var/log/nginx/access.log属主是www-data,权限644——看起来人畜无害对吧?可nginx master进程是root起的,worker才降权。某个版本更新后,logrotate配置里加了sharedscripts,但忘记在prerotate脚本里chown回root:adm。结果access.log滚动后新文件属主变成www-data:www-data,权限644……然后开发顺手在日志里打印了一行调试信息:“token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9……” 前天我还在某台ES节点里grep到这个token续签失败的痕迹,来源IP是研发自建的JumpBox。咖啡杯上印的公司logo裂了条细缝,从“云”字右上角斜着劈到“计”字中间一横,我舔了舔杯沿尝到一点苦涩的塑料味。


  第三类最气人:SELinux或AppArmor处于permissive模式,但系统日志里没有任何auditd记录——不是没开,是auditd.service本身被systemd mask了。为啥?因为某次上线前运维执行了一段复制粘贴的加固脚本,其中一行写着‘systemctl mask auditd’,说是为了‘避免日志干扰监控指标’。没人去翻journalctl -u auditd的状态,反正监控大盘上那个红色报警框只盯disk_full和cpu_95%,连auditd是否存在都不在巡检项里。前端同事上周来找我问为什么他本地联调突然跨域失败,我说你检查下CORS header里Access-Control-Allow-Origin有没有写死,他敲着键盘说:“不可能啊,我们Nginx配置里明明写了具体的域名”,——后来发现那台Nginx是三年前的老镜像,docker build时COPY进去的conf文件压根没被CI覆盖,configmap挂载也因命名空间拼错失效了。我原以为这是部署链路问题,结果追到K8s集群层,发现etcd里有三百七十二次调用指向一个已注销的ServiceAccount token——这玩意儿三个月前就该自动轮换,却因RBAC RoleBinding里一个apiGroups字段写成空数组,被kube-apiserver默默忽略,一直活到现在。


文章配图,仅供参考

  说到KPI……今年Q3的“配置合规率”指标从92%拉到98%,靠的是自动化巡检工具每六小时扫一次sshd_config、logrotate.d和selinux config,然后把那些“未生效但语法合法”的配置打成灰色低危。安全组说这样更真实。我听着没吭声,只把上周刚写的那个检查脚本删了——它会遍历所有running container的/proc//cmdline,揪出带—privileged且没限制--cap-drop=ALL的Docker run命令。这玩意儿上线第一天就被测试同学在验收环境里干掉了,因为他要用–privileged跑eBPF demo。他说:“又不是生产,你至于吗?” 我说不至于,真不至于,反正去年国庆那天晚上,我一边改着Ansible inventory一边往速溶咖啡里倒第三包奶精时,DBA老张正用curl在内网调我们鉴权服务的/test/debug接口,那个接口后面接的是硬编码的JWT密钥生成逻辑,而密钥字符串就藏在他自己笔记本的VS Code工作区设置里,名字叫“jwt_debug_key”。


  不扯了。我现在要重跑一遍lastpass_export.json解析脚本,看里面有没有谁还在用ssh-rsa算法存的密钥——这玩意儿OpenSSH 8.8之后就禁用了,但我们有十四台主机还没升级。要是真有,我得先问问老张,他上周借走的那台备用JumpBox,BIOS里Secure Boot开了没。水冷风扇突然哼了一声,像只疲倦的鸟在机柜顶上扑棱翅膀。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!