0

马哥Linux高端运维云计算SRE就业班-教学总监老王主讲

四分卫
1月前 22

获课:xingkeit.top/10240/


聊了这么多应用层的技术,今天我们深入到操作系统层面——Linux安全加固。说实话,很多开发者的Linux安全意识停留在"设个密码、关掉root登录"就以为万事大吉了。但真正的生产环境,黑客不看你的密码复杂度,他们看的是配置漏洞、权限滥用、未打补丁的内核漏洞

我在过去几年参与过不少等保测评和渗透测试,发现90%的安全事故,根源不是0day漏洞,而是基线没做、审计没开、权限给大了。今天咱们就把Linux安全加固拆成四个维度——权限、审计、基线、漏洞防护,聊聊怎么让你的服务器从"纸糊的"变成"铁打的"。


权限管理:最小化原则,别当"老好人"

Linux权限模型的核心是"谁、能干什么、对谁干",但大部分团队的权限配置,基本是"能跑就行"——开发要root就给root,运维要sudo就给ALL。这是典型的"开门揖盗"。

权限加固的第一条铁律:root账号只用来做系统管理,应用程序禁止用root跑。 你见过MySQL用root启动的、Nginx用root跑的吗?一旦这些服务有RCE漏洞,攻击者直接拿到系统最高权限,等于把服务器拱手让人。正确的做法是为每个服务创建专用的系统账号,比如mysqlnginxtomcat,只给它们最小必要的文件系统权限——能读日志就别给写,能写缓存就别给执行。

第二个容易被忽略的是SUID和SGID位passwd命令需要SUID权限才能修改/etc/shadow,但很多程序根本不需要这种特权位。你定期扫一遍find / -perm -4000 -type f,把那些不必要的SUID位去掉。比如ping命令,没必要让它带着root权限跑,关掉SUID后功能完全不受影响。

第三个是sudo权限的精细化控制。千万别在/etc/sudoers里写username ALL=(ALL) ALL,这是把整把钥匙都交给了别人。应该精确到具体命令:username ALL=(ALL) /usr/bin/systemctl restart nginx,只允许重启Nginx,其他一概不给。还要加上NOPASSWD时慎重——免密虽然方便,但一旦账号泄露,攻击者可以直接执行高危命令。


审计:让每一次操作都"雁过留痕"

安全里面有个血泪教训:不怕被黑,怕被黑了你还不知道。 而审计的目的,就是让入侵者每一步操作都留下脚印,让你在事后能回溯"谁、什么时候、干了什么"。

Linux自带的审计系统是auditd,它能记录文件访问、系统调用、用户登录等全量事件。很多人觉得"审计日志太占磁盘"就关掉了——这是因噎废食。正确的做法是配置合理的审计规则,只记录关键操作:

  • 所有对/etc/passwd/etc/shadow/etc/sudoers的访问和修改

  • 所有setuidsetgid的系统调用

  • 所有susudo的执行记录

  • 所有对外网络连接的建立(connect系统调用)

审计日志的存储也要规划好:单独挂载一个分区给/var/log/audit,防止日志写满把系统分区撑爆。同时配置auditdmax_log_filenum_logs做轮转,保留至少90天的日志。等保三级要求日志留存180天,如果磁盘不够,可以配置远程日志服务器,把审计日志实时发到另一台机器。

还有一个骚操作:把审计日志和HIDS(主机入侵检测)结合起来。 比如osquery可以把审计事件转成SQL查询,或者用wazuh做实时告警——有人连续3次sudo失败就发钉钉通知,有人半夜2点登录就触发高危告警。审计不光是"秋后算账",更应该是"即时预警"。


基线加固:把系统配置拧到"安全出厂设置"

基线,说白了就是"安全的最低标准"。Linux安装完默认配置是为"兼容性"考虑的,不是为"安全性"考虑的。所以你需要手动收紧。

最经典的基线加固项:

  • 禁用不安全的服务telnetrshrlogin这些明文传输协议,一个不留全干掉。用systemctl停掉并禁用开机自启。

  • 修改SSH配置PermitRootLogin noPasswordAuthentication no(改用密钥登录)、Protocol 2(禁用不安全的SSHv1)、MaxAuthTries 3(限制重试次数)、ClientAliveInterval 300(闲置超时断开)。这几项改完,SSH暴破攻击基本废了。

  • 设置umask 027:让新建文件的默认权限是750,同组可读可执行,其他人啥也看不到。防止开发者随手创建的文件被别的用户偷看。

  • 禁用ICMP重定向和源路由net.ipv4.conf.all.accept_redirects=0net.ipv4.conf.all.accept_source_route=0,防止中间人攻击。

  • 设置密码策略/etc/login.defs里设置PASS_MAX_DAYS 90PASS_MIN_DAYS 7PASS_WARN_AGE 14,配合pam_cracklib强制密码复杂度。

基线的终极形态是自动化巡检。你可以用OpenSCAP这个工具,它内置了CIS Benchmark标准,一键扫描系统,生成合规报告:"哪些项合规了,哪些项还开着风险"。然后根据报告逐项修复,直到扫描结果全绿。大厂的运维团队每个月跑一次,出报表,给老板看——这叫"安全可视化"。


风险漏洞防护:打补丁不是"可做可不做"

安全里面有个术语叫"漏洞利用窗口"——漏洞被公开到你的系统被打上补丁之间的时间。这个窗口越短,你越安全。

Linux漏洞防护有三层:

第一层:内核和系统包热补丁。 生产环境不能随便重启,所以ksplicekpatch这类热补丁工具就很有价值——在不重启的情况下给内核打补丁。虽然现在很多云厂商提供了"内核热升级"功能,但别忘了定期手动检查:yum check-update或者apt list --upgradable,至少每周跑一次。

第二层:应用层漏洞屏蔽。 不是所有漏洞都能靠系统包修复。比如Log4j漏洞,你得自己升级应用的依赖库。这时候软件物料清单(SBOM)就很重要——你得清楚自己的系统里装了哪些第三方组件、版本号多少、有没有已知CVE。可以用TrivyClair做镜像扫描,把漏洞扼杀在CI流水线里。

第三层:网络层访问控制。 即便系统有漏洞,只要攻击者打不进来就没事。所以要用iptables或firewalld做白名单策略——只开放必须的端口(80、443、SSH的特定IP段),其他全部DROP。同时开启fail2ban,把SSH暴破的IP自动封禁,这个组合拳能挡住99%的自动化扫描攻击。

还有一个容易被忽略的点:系统里有漏洞的软件包,你根本没用,但它就在那儿躺着。 比如你装了httpd但没用,它就是一颗定时炸弹。所以定期执行rpm -qadpkg -l,把不需要的包统统remove掉。系统越精简,攻击面越小。


安全加固是"过程"不是"结果"

最后说句掏心窝的话:Linux安全加固不是一次性的项目,是持续迭代的工程。 你今儿把基线调好了,三个月后新上线一个服务,又开了一堆端口;你今儿把审计配好了,半年后磁盘满了,运维为了腾空间把审计日志清了。

所以成熟团队的做法是"自动化+流程化"

  • 用Ansible或SaltStack把加固配置写成代码,每次新机器上线自动执行,不留人工操作空间。

  • 用Zabbix或Prometheus监控关键安全指标——SSH登录失败次数、/etc/passwd的mtime变化、异常进程启动——异常就告警。

  • 每季度做一次渗透测试或红蓝对抗,用真实的攻击手段验证加固效果。别光看配置,要看"真打起来扛不扛得住"。

我记得一个老安全专家的口头禅:"没有绝对安全的系统,只有相对安全的人。" 你装再多的防火墙、配再多的审计规则,如果运维图省事把密钥存在代码仓库里、开发者把root密码设成123456,那所有加固都是摆设。

安全是意识、流程、工具三位一体的。工具是最后一道防线,而意识和流程,决定了这道防线能不能真正站住。你的Linux服务器,值得你花点时间好好"锁"上它。



本站不存储任何实质资源,该帖为网盘用户发布的网盘链接介绍帖,本文内所有链接指向的云盘网盘资源,其版权归版权方所有!其实际管理权为帖子发布者所有,本站无法操作相关资源。如您认为本站任何介绍帖侵犯了您的合法版权,请发送邮件 [email protected] 进行投诉,我们将在确认本文链接指向的资源存在侵权后,立即删除相关介绍帖子!
最新回复 (0)

    暂无评论

请先登录后发表评论!

返回
请先登录后发表评论!