3、操作系统安全加固:Linux内核参数调优、最小化安装原则、账户与权限管理

各位同学,咱们今天聊点实在的。操作系统安全加固,说白了就是给你的风电Agent系统穿上一件“防弹衣”。我见过太多项目,业务逻辑写得飞起,结果操作系统裸奔,最后被攻击者从系统层面直接捅穿。嗯,这可不是危言耸听。

咱们分三块来讲:内核参数调优最小化安装账户与权限管理。这三板斧砍下去,你的系统至少能挡住80%的初级攻击。

3.1 内核参数调优:别让系统“裸奔”

Linux内核默认配置,说白了是为了通用性设计的。但咱们风电系统,对实时性、安全性要求极高。默认配置往往太“宽容”了。

我个人习惯,拿到一台新机器,第一件事就是改/etc/sysctl.conf。你想想看,如果内核允许任意IP伪造、允许未授权的网络连接,那你的Agent系统就是个大筛子。

3.1.1 网络层加固

先看几个关键参数:

# 禁止IP源路由欺骗
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# 开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 忽略ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

# 禁止发送重定向
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

我在项目中遇到过,某风场的内网被人植入了恶意程序,利用IP源路由欺骗绕过了防火墙。当时排查了三天,最后发现就是accept_source_route没关。你说冤不冤?

⚠️ 警告: 修改内核参数后,记得执行 sysctl -p 使其生效。别问我为什么强调这个——我曾经在客户现场改完参数忘了重载,结果被安全审计打了个0分。

3.1.2 资源限制与防DoS

风电Agent系统经常要处理大量传感器数据。如果内核不限制资源,一个异常进程就能把整个系统拖垮。

参数 推荐值 说明
net.ipv4.tcp_syncookies 1 开启SYN Cookie,防SYN Flood攻击
net.ipv4.tcp_max_syn_backlog 2048 限制半连接队列大小
net.core.somaxconn 1024 限制监听队列长度
vm.swappiness 10 减少swap使用,提升响应速度

这里有个小技巧:tcp_syncookies一定要开。我曾经在测试环境模拟过SYN Flood攻击,没开这个参数时,系统CPU直接飙到100%,Agent完全失联。开了之后,系统稳如老狗。

3.2 最小化安装原则:少即是多

这个原则,说白了就是“能不安的包,坚决不装”。你想想看,每多装一个软件包,就多了一个被攻击的入口。

我建议,安装操作系统时,只选最小化安装选项。比如CentOS/RHEL选“Minimal Install”,Ubuntu Server选“Minimal”。装完之后,再按需添加必要的包。

📌 核心原则: 一个运行中的风电Agent系统,应该只包含:操作系统内核 + 必要的系统工具 + Agent运行环境 + 监控代理。其他一切,都是多余的。

3.2.1 卸载不必要的服务

装完系统后,第一件事就是检查并禁用不必要的服务:

# 查看所有运行的服务
systemctl list-units --type=service --state=running

# 禁用常见的不安全服务
systemctl disable cups.service      # 打印服务,风电系统用不到
systemctl disable avahi-daemon.service  # 零配置网络,有安全风险
systemctl disable postfix.service    # 邮件服务,除非你需要发告警邮件

我记得有一次,一个风场的服务器被人挖矿了。排查下来,居然是avahi-daemon的漏洞被利用。你说一个风电系统,要什么零配置网络?

3.2.2 包管理器的安全配置

包管理器本身也要加固。以yum/dnf为例:

# 在 /etc/yum.conf 中添加
gpgcheck=1
localpkg_gpgcheck=1
repo_gpgcheck=1

为什么要开gpgcheck?说白了就是防止你从非官方源下载到被篡改的包。我见过有人图省事,直接关了gpgcheck,结果装了个带后门的openssh。嗯,那画面太美我不敢看。

3.3 账户与权限管理:谁该做什么,清清楚楚

账户管理,核心就一句话:最小权限原则。每个账户只给够用的权限,不多给一分。

3.3.1 账户分类与清理

我建议把系统账户分为三类:

  • 管理员账户:仅限运维人员使用,必须使用SSH密钥登录
  • 服务账户:运行Agent、数据库等服务的专用账户,不能登录shell
  • 系统账户:系统内置账户,如root、daemon等,非必要不启用

清理无用的账户:

# 查看所有可登录账户
awk -F: '($7 != "/sbin/nologin" && $7 != "/bin/false") {print $1}' /etc/passwd

# 锁定不用的账户
usermod -L 用户名
# 或者直接删除
userdel -r 用户名
💡 提示: 我习惯给每个服务创建一个独立的系统账户。比如运行Agent就用 agent 账户,运行数据库就用 db 账户。这样即使某个服务被攻破,攻击者也拿不到其他服务的权限。

3.3.2 SSH安全配置

SSH是远程管理的命门,必须重点加固。我的/etc/ssh/sshd_config配置如下:

# 禁止root直接登录
PermitRootLogin no

# 仅允许密钥登录
PasswordAuthentication no
PubkeyAuthentication yes

# 限制登录用户
AllowUsers admin1 admin2

# 修改默认端口(可选)
Port 2222

# 登录超时设置
ClientAliveInterval 300
ClientAliveCountMax 2

我曾经在项目上遇到过,有人用弱口令爆破SSH,几分钟就进去了。从那以后,我所有项目都强制要求密钥登录,密码登录直接关掉。你想想看,一个8位纯数字密码,暴力破解需要多久?不到1分钟。

3.3.3 sudo权限控制

sudo权限要精细化管理,别给所有人root权限。我推荐的做法:

# 在 /etc/sudoers.d/ 下创建专用文件
# 例如:给运维人员只允许执行特定命令
Cmnd_Alias AGENT_CMDS = /usr/bin/systemctl start agent, /usr/bin/systemctl stop agent, /usr/bin/systemctl restart agent
%ops ALL=(ALL) NOPASSWD: AGENT_CMDS

这里要注意,NOPASSWD虽然方便,但降低了安全性。我个人建议,除非是自动化脚本需要,否则都要求输入密码。

3.4 知识体系总览

为了让你更直观地理解这三块内容的关系,我画了一张图:

操作系统安全加固知识体系 内核参数调优 最小化安装原则 账户与权限管理 网络层加固 · 资源限制 · 防DoS 卸载无用服务 · 包管理器加固 账户分类 · SSH加固 · sudo控制 安全稳固的风电Agent系统 三者缺一不可,共同构成操作系统安全防线

你看,这三个模块是环环相扣的。内核参数调优解决的是“系统层面”的安全漏洞;最小化安装解决的是“攻击面”的问题;账户与权限管理解决的是“人为因素”的风险。缺一个,你的系统就不完整。

📌 总结: 操作系统安全加固,没有捷径。我见过太多人只做了一两项,就觉得万事大吉了。结果呢?被攻击了才后悔。记住:安全是设计出来的,不是检查出来的。

好了,这一章的内容就到这里。下一章咱们聊聊网络层面的安全防护,那又是另一番天地了。


专注资料整理