ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

CentOS/Ubuntu服务器等保整改实战:从身份鉴别到入侵防范全流程

CentOS/Ubuntu服务器等保整改实战:从身份鉴别到入侵防范全流程 1. 从“过检”到“真安全”等保整改的实战视角最近几年但凡涉及政务、金融、医疗、教育等关键行业的项目服务器上线前绕不开的一个词就是“等保测评”。很多运维和开发的朋友一听到“等保”就头疼觉得那是一堆繁琐、死板的检查项是为了应付测评机构而做的“表面文章”。我经历过多次从CentOS到Ubuntu不同发行版的等保测评与整改从最初的懵懂应付到后来理解其背后的安全逻辑我的看法彻底改变了。等保整改绝不仅仅是为了墙上那张测评报告它是一次对服务器安全基线的系统性加固是逼着你把那些“知道应该做但一直没做”的安全配置落到实处的最佳契机。今天我就以CentOS 7/8和Ubuntu 20.04/22.04这两个最主流的Linux发行版为背景抛开那些晦涩的标准条文用一线运维的实战语言拆解一遍服务器等保整改的全流程。你会发现很多操作背后的原理是相通的而差异化的部分正是我们需要特别注意的“坑点”。2. 整改前必做的两件事资产梳理与差距分析在动手改任何一条配置之前盲目操作是最大的忌讳。等保整改不是一场漫无目的的“安全大扫除”而是一次有针对性的“外科手术”。手术前你必须清楚病人的全部情况。2.1 建立你的服务器“体检表”你需要为待整改的服务器建立一份详细的资产清单。这份清单远不止记录IP和主机名那么简单。我通常会用一个表格来梳理这能让你对整改范围一目了然资产类别具体内容获取命令/方法整改关联点系统信息发行版、内核版本、架构cat /etc/os-release,uname -a决定后续安全策略、软件源和补丁的适用性。网络信息IP地址公网/内网、网关、DNS、开放端口ip addr,netstat -tunlp或ss -tunlp安全审计、防火墙策略制定的基础。账户信息所有用户、UID/GID、登录Shell、所属组cat /etc/passwd,getent passwd身份鉴别、访问控制的核心需清理无用账户。权限信息SUID/SGID文件、777权限文件、sudo权限用户find / -perm /4000 2/dev/null,find / -perm /777 2/dev/null,cat /etc/sudoers权限最小化原则的检查重点。服务信息所有自启动服务、运行中服务systemctl list-unit-files --typeservice,systemctl list-units --typeservice --staterunning服务最小化关闭非必要服务。软件信息已安装的软件包及版本CentOS:rpm -qaUbuntu:dpkg -l评估漏洞风险制定升级或卸载计划。业务信息服务器承载的核心应用、数据库、中间件结合部署文档、进程监听端口判断决定哪些安全策略不能“一刀切”避免影响业务。提示获取网络端口信息时netstat在某些新版本中可能未预装而ss是更现代的工具。使用ss -tunlp可以清晰看到监听端口、对应进程和PID。2.2 基于“体检表”进行差距分析拿到“体检表”后不要急着对照等保条款逐条硬套。我建议先进行一轮快速的“安全卫生”自查这能解决80%的共性问题。问自己几个问题有没有默认的、弱密码的账户比如test、admin账户或者空密码账户。有没有开启根本用不到的服务例如一台纯Web服务器上是否开着bluetooth、cups打印服务端口是否开放得过于随意除了业务必需的80、443、22端口是否还有像23(telnet)、135-139(NetBIOS)这样的高危端口在监听系统补丁多久没打了运行yum check-update(CentOS)或apt list --upgradable(Ubuntu)看看。日志是否在正常记录检查/var/log/secure(CentOS)或/var/log/auth.log(Ubuntu)是否有近期记录。这一轮自查的目的是把那些明显的、低级的安全风险先排除掉。完成这一步你的服务器已经比大多数“裸奔”的机器安全多了也为后续针对等保条款的精细整改打下了清晰的基础。3. 身份鉴别与访问控制把好入口第一关这是等保测评中最容易丢分也最关键的环节。核心原则就两条你是谁身份鉴别和你能干什么访问控制。3.1 口令策略强化告别弱密码等保要求口令必须满足复杂度并定期更换。修改/etc/login.defs是基础但更有效的是使用pam_pwquality模块CentOS 7/Ubuntu 默认已集成。CentOS/Ubuntu 通用配置编辑/etc/security/pwquality.conf设置如下minlen 10 minclass 3 dcredit -1 ucredit -1 ocredit -1 lcredit -1minlen10密码最小长度10位。minclass3密码至少包含大写字母、小写字母、数字、特殊字符中的3类。dcredit-1至少包含1位数字。ucredit、ocredit、lcredit同理分别对应大写字母、特殊字符、小写字母。设置密码有效期/etc/login.defsPASS_MAX_DAYS 90 # 密码最长使用90天 PASS_MIN_DAYS 7 # 密码修改间隔最短7天防止频繁改回原密码 PASS_WARN_AGE 14 # 密码过期前14天提醒注意此配置仅对新创建的用户生效。对已存在用户需使用chage命令修改例如chage -M 90 -m 7 -W 14 username。3.2 强制使用SSH密钥登录禁用密码登录这是防止暴力破解最有效的一招。务必在配置前先在服务器上添加好你的公钥并测试密钥登录成功。生成并部署密钥对在客户端机器操作ssh-keygen -t rsa -b 4096 -C your_emailexample.com # 生成密钥对 ssh-copy-id -i ~/.ssh/id_rsa.pub useryour_server_ip # 将公钥上传至服务器修改SSH服务端配置/etc/ssh/sshd_configPubkeyAuthentication yes # 启用密钥认证 PasswordAuthentication no # 禁用密码认证 PermitRootLogin no # 禁止root直接登录等保强制要求重启SSH服务并保持连接千万不要直接关闭当前连接新开一个终端窗口用密钥登录测试确认无误后再在原来的连接里重启服务。systemctl restart sshd # 或 Ubuntu 使用: systemctl restart ssh3.3 权限最小化与sudo精细化控制清理无用账户userdel -r username。 检查特殊权限文件find / -perm /4000 -o -perm /2000 2/dev/null对于非必要的SUID/SGID文件使用chmod u-s, g-s filename移除权限。配置sudo权限/etc/sudoers 或 /etc/sudoers.d/永远不要直接编辑/etc/sudoers使用visudo命令。为普通用户分配权限时遵循最小权限原则。# 允许用户 alice 以root身份运行特定的服务管理命令且无需密码谨慎使用 alice ALL(ALL) NOPASSWD: /bin/systemctl restart nginx, /bin/systemctl status nginx # 允许运维组 members 以root身份运行所有命令但需要密码 %members ALL(ALL) ALL4. 安全审计与入侵防范留下“黑匣子”记录系统日志就是服务器的“黑匣子”当发生安全事件时它是回溯和定责的唯一依据。等保要求审计覆盖到每个用户的重要操作。4.1 启用并配置auditd审计服务auditd是Linux内核级的审计框架功能强大。CentOS通常默认安装Ubuntu可能需要手动安装apt install auditd audispd-plugins。关键审计规则配置/etc/audit/rules.d/audit.rules# 审计所有系统调用生产环境慎用日志量巨大 # -a always,exit -F archb64 -S all -F keyall-syscalls # 审计所有文件的读写、属性更改生产环境慎用 # -w / -p rwxa -k all-files-access # **实战推荐审计关键文件和目录** -w /etc/passwd -p wa -k identity # 监控用户账户变更 -w /etc/shadow -p wa -k identity # 监控密码文件变更 -w /etc/sudoers -p wa -k privilege # 监控sudo权限变更 -w /etc/ssh/sshd_config -p wa -k ssh-config # 监控SSH配置变更 -w /var/log/secure -p wa -k log-tamper # 监控安全日志文件本身 -w /usr/bin -p x -k binary-execution # 监控/bin目录下的程序执行 # 审计所有特权命令的执行sudo, su等 -a always,exit -F archb64 -S execve -C uid!euid -F keysetuid-exec -a always,exit -F archb64 -S execve -F path/bin/su -F keysu-exec -a always,exit -F archb64 -S execve -F path/usr/bin/sudo -F keysudo-exec # 审计所有失败的文件访问和系统调用 -a always,exit -F archb64 -S all -F success0 -F keysyscall-failed配置后重启审计服务systemctl restart auditd systemctl enable auditd。常用审计日志查询命令ausearch -k identity查看所有与“identity”关键规则相关的审计事件。aureport -l生成可登录事件的报告。aureport --failed生成失败事件的报告。4.2 配置系统日志持久化与轮转确保rsyslog或systemd-journald服务正常运行。重点配置日志轮转/etc/logrotate.conf及其/etc/logrotate.d/下的子配置防止日志塞满磁盘。一个安全的配置示例在/etc/logrotate.d/secure中/var/log/secure { missingok notifempty weekly rotate 52 compress delaycompress postrotate /bin/kill -HUP cat /var/run/syslogd.pid 2 /dev/null 2 /dev/null || true endscript }5. 入侵防范与恶意代码防范构建主动防御防火墙和入侵检测是服务器的“门卫”和“监控探头”。5.1 防火墙策略精细化Firewalld / UFWCentOS (Firewalld):systemctl start firewalld systemctl enable firewalld # 放行必要服务富规则更精细 firewall-cmd --permanent --add-servicessh firewall-cmd --permanent --add-servicehttp firewall-cmd --permanent --add-servicehttps # 或者直接放行端口 firewall-cmd --permanent --add-port8080/tcp # 设置默认区域为drop最严格但务必先放行SSH firewall-cmd --set-default-zonedrop firewall-cmd --reload # 查看规则 firewall-cmd --list-allUbuntu (UFW - Uncomplicated Firewall):ufw enable ufw allow ssh ufw allow 80/tcp ufw allow 443/tcp ufw deny 23/tcp # 显式拒绝高危端口 ufw status verbose重要心得防火墙规则一定要采用“白名单”模式。默认拒绝所有入站只放行业务必需的端口。修改默认策略前务必确保当前SSH连接不会被阻断可通过管理控制台或物理接触补救。5.2 部署主机级入侵检测系统HIDS仅靠防火墙是被动的。推荐部署开源HIDS如Wazuh或OSSEC。它们能监控文件完整性FIM、检测rootkit、分析日志并告警。以OSSEC为例其核心功能包括文件完整性监控监控/etc,/bin,/usr/bin等关键目录下文件的任何更改内容、权限、属性。日志分析实时分析/var/log/secure,audit.log等匹配预定义规则发现暴力破解、可疑登录等行为。主动响应检测到攻击后可自动执行命令如封锁攻击源IP通过防火墙或/etc/hosts.deny。部署虽有一定复杂度但对于等保三级及以上要求的系统几乎是必选项。它能将安全审计从“事后查看日志”提升到“事中实时告警”。5.3 定期漏洞扫描与补丁管理“漏洞扫描”不是等保的软指标。你需要一个流程工具扫描使用OpenVAS、Nessus商业或lynis系统审计工具对服务器进行定期扫描。风险评估根据扫描报告区分漏洞的紧急程度Critical, High, Medium, Low。制定计划安排维护窗口对高风险漏洞立即打补丁。中低风险漏洞评估业务影响后分批处理。执行更新CentOS:yum update --security(或使用yum-plugin-security)Ubuntu:apt update apt upgrade --only-upgrade或使用unattended-upgrades自动安全更新。验证与回滚更新后重启必要服务验证业务正常。重大更新前务必有回滚方案如快照。6. 资源控制与剩余信息保护安全闭环这部分关注系统运行时的稳定性和数据残留风险。6.1 资源控制防止DoS与资源滥用限制用户进程数与内存编辑/etc/security/limits.conf。# 限制用户最多启动100个进程防止fork炸弹 * hard nproc 100 # 限制用户打开文件数 * hard nofile 65535配置系统资源限制通过systemd为服务单元service unit设置限制更现代有效。编辑服务的.service文件在[Service]段添加LimitCPU10min # CPU时间限制 LimitASinfinity # 地址空间限制 LimitNOFILE1024 # 文件描述符限制会话超时退出在/etc/profile或/etc/bashrc全局设置或针对特定用户在其~/.bashrc中设置。export TMOUT900 # 设置15分钟900秒无操作超时 readonly TMOUT # 设置为只读防止用户修改6.2 剩余信息保护数据擦除与磁盘加密等保要求存储空间被释放或重新分配前必须完全清除原有信息。对于敏感数据这至关重要。安全删除文件不要用简单的rm它只删除文件指针。使用shred或wipe。shred -u -v -z /path/to/sensitive/file # -u:删除-v:显示进度-z:最后用零覆盖交换分区Swap加密交换分区可能包含内存中的敏感信息。建议在安装系统时就使用LUKS加密Swap。对于已存在的系统可以创建加密的Swap文件来替代分区。对于即将下线或报废的硬盘使用dd命令对整个磁盘写零。dd if/dev/zero of/dev/sdX bs1M statusprogress警告此操作不可逆会彻底销毁磁盘所有数据务必确认目标设备/dev/sdX正确无误7. 整改后的验证与持续运维所有配置修改完成后整改工作只完成了一半。验证和持续维护同样重要。7.1 系统性验证清单业务连通性测试确保所有必要的业务端口Web, DB, API等在防火墙规则生效后仍能正常访问。管理通道验证确认SSH密钥登录工作正常密码登录已被阻断。测试通过其他管理用户非root的sudo权限。审计功能验证执行一些被监控的操作如sudo ls /root, 修改/etc/passwd然后使用ausearch命令检查审计日志中是否有相应记录。安全策略验证测试会话超时TMOUT是否生效。尝试创建简单密码看是否被pam_pwquality拒绝。入侵检测验证如果部署了OSSEC/Wazuh尝试触发一条规则如多次错误登录查看管理端是否收到告警。7.2 建立持续运维机制等保不是“一次性工程”。你需要将安全实践固化到日常运维中配置基线化将本次整改确认的安全配置如sshd_config,audit.rules,firewalld规则进行备份和文档化形成该系统的安全基线。新部署服务器时应以此基线为模板。自动化检查编写Shell脚本或使用Ansible等自动化工具定期检查关键配置是否被篡改、密码策略是否合规、不必要的端口是否开放。日志集中与分析使用ELKElasticsearch, Logstash, Kibana或Graylog搭建日志集中分析平台将各服务器的安全日志、审计日志、应用日志统一收集、分析和告警。定期复查与演练每季度或每半年对照等保要求进行一次自检或内部扫描。每年至少进行一次完整的漏洞扫描和渗透测试可委托第三方。从我个人的经验来看最深的体会是等保整改的过程本质上是一次强迫性的、系统的安全左移。它把安全从“出事后的补救”变成了“上线前的标配”。刚开始你会觉得条条框框很麻烦但当你按照这个流程完整走一遍后服务器面对互联网常见攻击的“免疫力”会有质的提升。那些看似繁琐的配置比如精细的sudo权限、全量的审计日志、严格的防火墙白名单在真正遇到攻击溯源、权限纠纷或合规检查时会成为你最有力的证据和防线。记住安全没有终点等保测评只是一个开始真正的安全源于持续的关注和规范的运维习惯。
返回列表