Linux安全环境搭建:19年全栈实战指南
|
跟产品吵完第三轮灰度开关没推完,我盯着监控大屏右下角那个标着“netstat_estab”但其实是旧脚本漏改的曲线抖了一下——它昨天就该被砍了,没人动,就一直颤着,像得了帕金森。我原以为只要把 iptables 五条链捋顺、fail2ban 阈值压到三次、sshd_config 把 PermitRootLogin 和 PasswordAuthentication 全干掉,这事就算进了回收站。结果去年冬天凌晨三点 oncall 手机震了一下,不是告警,是运维老张微信语音弹出来:“你那台 bastion 上 curl 被卡在 CONNECT,TCP 重传十六次。” 我说优胜劣汰——不是修辞,是实测结论。真刀真枪跑过十七个生产环境,八个是裸奔上来硬扛流量,九个从第一天就抠 SELinux policy、auditd 规则、pam_faillock.conf 套三层。活下来的全是后者。前者里有个做支付网关的,连 auditctl -e 1 都懒得敲,说“KPI 压着呢”,半年后被薅走六万七千条 card hash,DBA 小李当场重装系统时手抖把 /etc/fstab 改错了两行,回滚镜像都挂不起来。那个支付服务现在还在测试环境用 mock DB 跑,mock 的 response 里还带着 X-Powered-By: PHP/5.3.29(他们根本没删 phpinfo 页面)。 优胜劣汰的意思是:不是谁更规范,是谁先扛不住。防火墙策略写得再漂亮,只要有一条 rule 是 -j ACCEPT --dport 22 --src 0.0.0.0/0,它就在等被扫;sudoers 里哪怕只加了一行 %wheel ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx,测试妹子小陈顺手点 Jenkins 重跑部署脚本时,就真会用这条去启一个监听 0.0.0.0:6379 的 Redis 实例——她不是故意的,是那个 Jenkins job 的 env 注入模板里 PATH 写成了 $PATH:/usr/local/sbin,刚好覆盖了 shebang 查找顺序。我敢打包票:这种事,比你想象中多三倍。 去年冬天我们在青浦机房搭新集群,PM 老周坐我左边,边啃冷包子边说“要快,下周就要上风控模型”。我手没停,一边 su -c 'sestatus' - vagrant,一边顺手把 coffee 杯底公司 logo 朝上摆正——那是去年双十一大促前定做的,印着“稳如泰山”,现在杯沿磕了个米粒大的白痕。他听我说得急,突然插嘴:“SELinux 不能关?” 我说不能。他说“那能不能设成 permissive?” 我说可以,但 audit.log 昨晚涨了四百兆。他愣住,嚼包子的动作停了半秒,然后问:“…那能不能只对 nginx 目录设 context?” 我说不行。他没再问,默默把包子纸团成球,扔进桌下废纸篓,正好卡在篓口。第二天早上我发现他把那份风控模型 Dockerfile 里 CMD ["python", "app.py"] 换成了 ENTRYPOINT ["/bin/sh", "-c"],后面跟了三百七十二次调用 chmod 755 ——他就想绕 audit 追踪,以为这样算“隔离”。 我说不清为啥有人信 container isolation 能防提权。我知道某家银行私有云平台,kubelet 配置里 --anonymous-auth=true 开着三年,直到某天前端兄弟发版把 configmap 里的 token 硬编码进了 build step,被人爬走、反解、拼出 kubeconfig——人家根本没碰 node,直接 curl apiserver 把所有 namespace secrets dump 出来。这事我参与溯源,但没写进报告。写了也没人看,最后补丁单上写的整改项是“加强 DevOps 安全意识培训”。培训?他们连 sshd 的 UsePAM 是啥都不知道,培训就是放 PPT 放三小时。我上个月看见他们用同一个密钥配了三十台跳板机,密钥密码是 123456,注释栏写着“方便测试”。 所以我不教你怎么开 auditd,也不讲 grsecurity 补丁怎么打。我就盯着日志查三件事:谁 last -i 看到异常 IP?谁用 sudo -l 列出过 (ALL : ALL) ALL?谁往 /tmp 下丢过 .sh 文件还 chown root:root?——其他都是幻觉。至于那个 netstat_estab 曲线,今早运维小王倒了杯水路过,顺手把它从 Grafana dashboard 里删了。删完才发现:它背后那个脚本,三年前上线那天就没再跑过 cron。没人记得它是干啥的。我也忘了。但没关系,反正它没影响任何告警。
文章配图,仅供参考 下一步?下周我得帮 QA 组把他们的 jmeter 测试机加个 boot-time 自检:检查 /proc/sys/net/ipv4/ip_forward 是否为 0,检查 /sys/fs/selinux/enforce 是否为 1,检查 /etc/ssh/sshd_config 里 MaxAuthTries 是否 ≤ 3。不指望他们全懂,只求他们在测试报告最后一页手写一行:“已确认 SSH 认证失败限制生效”。手写,不 copy-paste,笔迹能对上。就这么点事,但得有人盯着。不然明年冬天,又是别人手机震一下,又得重启 bastion。(编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Linux深度学习环境搭建:从报错到运行的排障全路径
嵌入式Linux开发者Unix环境搭建避坑指南
Linux运维老手也常踩的5个Unix环境搭建陷阱
深度学习服务器选型避坑与全栈调优实战
网站构建秘籍:19年全栈工程师的框架选型与设计铁律
Linux下H5开发环境与数据库一键配置