原子网络科技 原子网络科技

企业级Linux服务器初始化安全基线配置指南:系统安装到权限收敛的全流程规范

a169kai 2026年11月12日 · 阅读约 6 分钟

新交付的Linux服务器默认是易于使用的而不是抗攻击的,在生产环境中公开网络之后,自动扫描和暴力破解会在几分钟内开始。安全基线并不是要增加更多的参数来防御攻击,而是要把攻击面缩小到业务所必需的最小范围,并且建立起可以审计、可以重现、可以回滚的安全收敛机制。

安装的时候要注意安全,要从镜像做起

  • 发行版与镜像:固定使用企业级LTS版本(RHEL/Rocky/Alma、Debian Stable、Ubuntu LTS),通过内部黄金镜像或PXE/Kickstart/Ansible统一分发,避免手工差异。
  • 最小化安装:仅选“Base System + 必要工具”,不装桌面、打印、邮件、编译链(生产无构建需求时移除gcc/make)。
  • 磁盘与分区:
  • 单独挂载 /、/boot、/var、/tmp、/home、/var/log
  • 在物理机或者符合规定的情况下使用LUKS对整个磁盘进行加密
  • /tmp、/var/tmp、/dev/shm 等目录的挂载参数中包含了 nodev,nosuid,noexec
  • 引导防护:设置GRUB密码,限制单用户模式;云主机配合平台“串行控制台”应急。
  • 时区与时钟:timedatectl set-ntp true,chrony/ntpd同步,日志时间戳准确是审计前提。

系统补丁和内核参数

系统落地之后第一个操作并不是修改配置,而是填补漏洞:

# Debian/Ubuntu
apt update && apt full-upgrade -y
apt install -y unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades

# RHEL/Rocky
dnf update -y
dnf install -y dnf-automatic
systemctl enable --now dnf-automatic.timer

开启自动安全更新功能,但是内核的大版本更新采用灰色重启的方式。

内核收敛(/etc/sysctl.d/99-hardening.conf):

net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
kernel.randomize_va_space = 2
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
fs.protected_symlinks = 1
fs.protected_hardlinks = 1
fs.suid_dumpable = 0

非路由节点要关掉IP转发功能,IPv6不使用的话要把整个协议栈都关掉而不仅仅是关闭网卡。

账户体系和权限收束

1. 禁止使用共享的root账户,创建有名字的账户

adduser deploy
usermod -aG sudo deploy
passwd -l root        # 锁root密码
  • 不允许多人使用同一个账户,每个人都有自己的标识符,方便进行审计和追踪
  • 查看有异常权限的用户:awk -F: '$3==0' /etc/passwd
  • 删除无用的账户,把休眠的账户锁起来

2. 最小化sudo权限

不允许使用 ALL=(ALL) NOPASSWD: ALL 命令,把文件放到 /etc/sudoers.d/ 中:

# /etc/sudoers.d/deploy
Cmnd_Alias DEPLOY_CMDS = /usr/bin/systemctl restart nginx, \
                         /usr/bin/journalctl, \
                         /usr/bin/tail /var/log/*
deploy ALL=(ALL) PASSWD: DEPLOY_CMDS

Defaults logfile=/var/log/sudo.log
Defaults timestamp_timeout=5
  • 提权要输入密码
  • 不允许使用可以跳出shell的命令,如su、visudo、vi等
  • 所有的sudo命令都要记录到日志中

3. 密码和当地策略

/etc/login.defs 和 PAM pam_pwquality

  • 最少要有12到14个字符
  • 90-180天轮转(以密钥为主可以放宽)
  • 失败锁定用 pam_faillock
  • 会话空闲超时:TMOUT=900

SSH:关闭最容易被攻破的地方

采用drop-in的方式而不是修改主配置文件:

# /etc/ssh/sshd_config.d/99-hardening.conf
Port 22222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers deploy

采用Ed25519算法

ssh-keygen -t ed25519 -C "deploy@host"

公钥权限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

修改之后要开启一个新的会话来测试一下,然后断开原来的连接。可以加上fail2ban或者在ssh前面加一个防火墙限制速度:

# fail2ban jail.local

[sshd]

enabled = true maxretry = 3 bantime = 3600

网络边界和最小化服务

主机防火墙默认不允许外部连接,只允许内部访问:

# ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow from 10.0.1.0/24 to any port 22222 proto tcp
ufw allow 80,443/tcp
ufw enable

# firewalld
firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --permanent --add-port=22222/tcp
firewall-cmd --permanent --add-service={http,https}
firewall-cmd --reload

服务收敛:

systemctl list-unit-files --state=enabled
systemctl disable --now cups bluetooth avahi-daemon rpcbind postfix

数据库和缓存(MySQL/Redis/Mongo)只能绑定到127.0.0.1或者内网网卡上,不能对外公开访问。

使用 ss -tlnp 来检查监听端口,没有说明的端口就关闭掉。

强制访问控制和文件系统的关系

  • RHEL系列:SELinux开启模式为enforcing(修改/etc/selinux/config文件、执行setenforce 1命令)
  • Debian/Ubuntu: AppArmor aa-enforce 全部配置文件
  • 不允许为了图方便而设置 permissive 或者 setenforce 0,异常情况要走审计规则、白名单

文件系统:

# 排查危险SUID/SGID
find / -xdev -perm /6000 -type f

# 默认umask
echo "umask 027" > /etc/profile.d/umask.sh

关键文件权限:

  • /etc/shadow → 640 root:shadow
  • SSH私钥 → 600
  • 配置文件目录→644/755,敏感信息更加严格

审计、日志和完整性

安装auditd

apt install -y auditd   # 或 dnf install -y audit

规则示例(/etc/audit/rules.d/security.rules):

-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/sudoers -p wa -k sudoers_changes
-w /etc/ssh/sshd_config -p wa -k sshd_config
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_exec

日志要发送到外部:rsyslog、filebeat等工具可以将日志推送到远程的SIEM或者日志集群中,本地的日志也可以被清除掉。

journald 持久化:

# /etc/systemd/journald.conf
Storage=persistent
SystemMaxUse=1G

文件完整性用 AIDE 或 Wazuh:

aideinit
aide --check

每天对 /etc、/usr/bin、/usr/sbin 进行对比。

验收和持续收敛

上线之前要进行基线扫描

  • Lynis:lynis audit system(目标评分 80+)
  • CIS Benchmark:用 OpenSCAP / CIS-CAT 对齐 Level 1
  • 自研脚本核对:SSH、防火墙、SELinux、sudo、审计、端口、账号

将整个安装过程做成Ansible Role,在装机模板中自动注入,每周一执行一次来防止配置发生变动。

运维节奏:

  • 每月:端口/服务/账号复查
  • 每三个月进行一次:Lynis、CIS和权限回收
  • 发生重大变化之后马上重新扫描基线

总结

Linux的安全基线并不是简单地更改一些设置,而是包括镜像、补丁、账户、SSH、网络、内核以及审计等在内的一个完整的链条。其中最重要的就是:能够不安装的就不要安装,可以隐藏起来就不要暴露出来,有权限的地方都要留下痕迹。在初始化阶段控制好权限要比后来去补救要便宜得多。

0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
最旧
最新 最多投票