Linux安全加固指南:账号、权限、服务、审计基线

新装的服务器暴露在公网,几小时内就会收到扫描和爆破------这不是危言耸听,是常态。安全加固不是「出了问题再补」,而是上线前的必修课。这一篇从账号、权限、服务、网络、审计五个维度,给出一份可落地的 Linux 安全加固清单,每一项都配上命令和配置,照着做就能把默认配置的「裸奔」状态升级为有基本防线的状态。

一、安全加固的四个维度

加固的本质是缩小攻击面。先建立清单框架:

维度 目标
账号 谁能登录,怎么登录
权限 能访问什么,权限是否最小
服务 对外开放哪些端口和服务
网络 谁能访问,访问控制
审计 出事了能不能查到

核心原则:最小权限(只给必要的)、最小暴露(只开必要的)、可追溯(记录能查)。

二、账号安全

账号是入侵的第一道门,也是爆破的主要目标。

1. 禁用或锁定不用的账号

bash 复制代码
# 查看所有可登录用户(看 shell 是否是 nologin/false)
awk -F: '$7 !~ /(nologin|false)$/ {print $1, $7}' /etc/passwd

# 查看有密码的账号
sudo awk -F: '$2 ~ /^[$]/ {print $1}' /etc/shadow

# 锁定账号
sudo usermod -L olduser
# 解锁
sudo usermod -U olduser

2. 清理 UID 为 0 的账号

UID 0 = root,除了 root 本身,其他 UID 为 0 的都是后门嫌疑:

bash 复制代码
awk -F: '$3==0 {print $1}' /etc/passwd

正常应只有 root 一行。

3. 设置密码策略

bash 复制代码
sudo vim /etc/login.defs
text 复制代码
PASS_MAX_DAYS   90      # 密码最长有效期
PASS_MIN_DAYS   7       # 最短修改间隔
PASS_MIN_LEN    12      # 最小长度
PASS_WARN_AGE   7       # 过期前警告天数

配合 pam_pwquality 强化复杂度:

bash 复制代码
sudo vim /etc/security/pwquality.conf
text 复制代码
minlen = 12
dcredit = -1     # 至少 1 个数字
ucredit = -1     # 至少 1 个大写
lcredit = -1     # 至少 1 个小写
ocredit = -1     # 至少 1 个特殊字符

4. 禁用 root 直接登录 + 密钥登录

bash 复制代码
sudo vim /etc/ssh/sshd_config
text 复制代码
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3

5. 防暴力破解

bash 复制代码
# fail2ban:多次失败登录后封 IP
sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 编辑 jail.local 启用 sshd
sudo systemctl enable --now fail2ban

# 查看封禁状态
sudo fail2ban-client status sshd

6. 登录超时与历史记录

bash 复制代码
# 命令行超时(空闲 5 分钟自动登出)
echo 'TMOUT=300' | sudo tee -a /etc/profile

# 记录所有用户的命令历史到统一日志
echo 'export PROMPT_COMMAND="history -a"' | sudo tee -a /etc/profile

三、权限与文件安全

1. 检查危险权限文件

bash 复制代码
# 全局可写的文件(除 /tmp、/var/tmp 外应极少)
sudo find / -xdev -type f -perm -0002 -print 2>/dev/null

# 无属主文件
sudo find / -xdev \( -nouser -o -nogroup \) -print 2>/dev/null

# 全局可写的 SUID 文件
sudo find / -xdev -perm -4000 -type f -print 2>/dev/null

2. SUID/SGID 审查

SUID 文件能以属主权限运行,是提权重点:

bash 复制代码
# 列出所有 SUID 文件
sudo find / -perm -4000 -type f 2>/dev/null

# 列出所有 SGID 文件
sudo find / -perm -2000 -type f 2>/dev/null

对应已知的 SUID 列表,多出来的要警惕。

3. 关键文件权限

bash 复制代码
sudo chmod 600 /etc/shadow        # 密码哈希
sudo chmod 644 /etc/passwd
sudo chmod 600 /etc/ssh/sshd_config
sudo chmod 700 /root

4. 设置 umask

bash 复制代码
# 默认新建文件权限:文件 644、目录 755
echo 'umask 022' | sudo tee -a /etc/profile
# 更严格:文件 640、目录 750
# umask 027

四、服务与端口收敛

用不到的服务和端口,就是攻击面。

1. 列出监听端口,逐个确认

bash 复制代码
sudo ss -tlnp
sudo ss -ulnp

对每一个 0.0.0.0 监听的端口问:这个真的需要对外开放吗?

2. 关闭不需要的服务

bash 复制代码
# 列出运行的服务
systemctl list-units --type=service --state=running

# 停用并禁用
sudo systemctl stop cups
sudo systemctl disable cups

3. 数据库只监听内网

bash 复制代码
# MySQL:bind-address = 127.0.0.1 或内网 IP
# Redis:bind 127.0.0.1  + 设置密码
# MongoDB:配置 bindIp + 开启认证

这是最容易被忽略、后果最严重的问题------裸奔的 Redis/MongoDB 是挖矿木马的最爱。

4. 最小化安装

装系统时选 minimal,不装图形界面、不装的软件包,从源头减少攻击面。

五、网络与访问控制

1. 防火墙默认拒绝入站

bash 复制代码
# ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw enable

2. SSH 限制来源

bash 复制代码
# 只允许特定网段访问 SSH
sudo ufw allow from 203.0.113.0/24 to any port 22

3. 限制服务访问源

数据库、缓存、内部 API 只允许内网访问,用防火墙 + 服务绑定双重限制。

4. 关闭不必要的 ICMP

视需求,可减少被探测:

bash 复制代码
# 屏蔽 ping(按需)
echo 1 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_all

5. 禁用 IPv6(如不用)

减少暴露面:

bash 复制代码
# /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1

六、审计与日志

「出事了查不到」是最尴尬的状态。

1. 系统日志

bash 复制代码
# systemd 系统
journalctl -u sshd --since "1 hour ago"

# 传统
tail -f /var/log/auth.log       # Debian/Ubuntu
tail -f /var/log/secure         # RHEL/CentOS

2. auditd:系统调用审计

auditd 能记录文件访问、命令执行、权限变更:

bash 复制代码
sudo apt install auditd -y

# 监控敏感文件
sudo auditctl -w /etc/passwd -p wa -k passwd_change
sudo auditctl -w /etc/shadow -p wa -k shadow_change

# 监控提权
sudo auditctl -a always,exit -F arch=b64 -S execve -F euid=0 -k root_cmd

# 查询审计日志
sudo ausearch -k passwd_change

3. 登录审计

bash 复制代码
# 最近登录
last
lastlog
# 失败登录
sudo lastb
# 当前登录
who
w

4. 日志集中化

重要的日志应发送到远程日志服务器 ,防止入侵者本地删日志掩盖痕迹。可以用 rsyslog 转发到远端(见第 91 篇)。

七、合规基线(CIS)

不想逐条手工检查,可以用自动化工具跑「安全基线」。

Lynis:系统安全审计

bash 复制代码
sudo apt install lynis -y
sudo lynis audit system

它会给出一份安全评分和改进建议,覆盖认证、内核、服务、文件权限等:

text 复制代码
[+] Hardening index : 68 [############        ]
[!] Suggestions:
    * Consider hardening SSH configuration [SSH-7408]
    * Set password aging for accounts [AUTH-9282]

OpenSCAP:合规扫描

面向 CIS、PCI-DSS 等标准的合规检查,适合企业:

bash 复制代码
sudo oscap xccdf eval --profile cis --results report.xml \
  --report report.html /usr/share/xml/scap/ssg/content/ssg-ubuntu2004-ds.xml

自动化的价值

手动加固容易漏、难复查、难审计。 用 Lynis/OpenSCAP 定期跑,把「是否合规」变成可量化、可追踪的指标。

八、⚠️ 常见错误

  1. 禁用密码登录前没配好密钥。直接把自己锁在门外,只能去控制台救。先验证密钥能登录再禁用。
  2. 数据库/缓存裸奔公网 。Redis 无密码 + 0.0.0.0,几分钟就被植入挖矿。这是最高频的入侵原因。
  3. 只改默认端口不开防火墙。改 SSH 端口只是「降低被扫频率」,不是安全措施,防火墙仍要配。
  4. 忽略 SUID 审查。攻击者拿到普通账号后,靠 SUID 提权到 root。
  5. 日志只留本地。入侵者第一步就是删日志,必须异地集中。
  6. umask 太宽松。默认 022 已够,配成 000 会让新建文件全局可写。
  7. 不做变更记录。加固完不记录改了什么,出问题无法回溯。
  8. 一次性加固不复查。软件升级、配置漂移会让加固失效,要定期复扫。

九、原理探究:攻击面与最小权限

攻击面(Attack Surface)

安全加固的本质,是缩小攻击面。攻击面 = 「外部可以从哪些入口接触系统」:

text 复制代码
攻击面 = 暴露的端口 + 可登录的账号 + 可访问的服务 + 已知漏洞 + 危险配置

加固就是逐项缩小:

  • 关掉不必要的端口 → 减少入口
  • 禁用不用的账号 → 减少爆破目标
  • 数据库只绑内网 → 减少暴露
  • 及时打补丁 → 减少已知漏洞
  • 收紧权限 → 减少提权可能

每减少一项,攻击者成功的概率就下降一分。

最小权限原则(Principle of Least Privilege)

每个账号、进程、服务都应该只拥有完成其职责所需的最小权限:

  • 服务不用 root 跑 → 被攻破也拿不到 root(用 User= 指定低权限用户)
  • 数据库账号只给必要库表的权限 → 拖库危害降低
  • 文件权限最小化 → 敏感数据不易被读
  • sudo 精细授权 → 不用「全开」的 sudoers

最小权限的核心逻辑:假设「一定会被攻破」,让攻破的后果尽可能小(纵深防御 defense in depth)。

分层防御(纵深防御)

没有任何单一措施是万无一失的。纵深防御是叠多层:

text 复制代码
第 1 层:网络防火墙(谁不能进)
第 2 层:SSH 密钥 + 禁密码(怎么进)
第 3 层:最小权限用户(进去能干多少)
第 4 层:SELinux/AppArmor(进程能碰什么)
第 5 层:auditd 审计(干了什么有记录)
第 6 层:异地日志(证据不被销毁)

攻击者要得手,得同时突破所有层,难度呈指数级上升。

一个现实提醒

安全加固没有「完成」一说,只有持续改进。 系统在变、漏洞在出、配置会漂移。把加固当作周期性动作(上线前 + 定期复扫),用 Lynis/OpenSCAP 量化,用 auditd 追溯,才能长期维持在一个可接受的安全水位。

十、加固清单速查

bash 复制代码
# 【账号】
awk -F: '$3==0 {print $1}' /etc/passwd                 # 检查 UID 0 账号
usermod -L 不用的账号
# sshd_config: PermitRootLogin no / PasswordAuthentication no

# 【权限】
find / -perm -4000 -type f 2>/dev/null                 # SUID 审查
find / -nouser -o -nogroup 2>/dev/null                 # 无属主文件

# 【服务】
ss -tlnp                                               # 逐个确认监听端口
systemctl disable 不需要的服务

# 【网络】
ufw default deny incoming && ufw enable

# 【审计】
apt install auditd && auditctl -w /etc/passwd -p wa -k passwd
last / lastb / ausearch -k passwd

# 【基线扫描】
lynis audit system

一句话收尾:账号收紧、权限最小、服务收敛、网络设防、审计留痕 ------五道防线叠加,才是可用的服务器安全基线。记住核心心法:假设一定会被攻破,让每层都尽量扛住、让后果尽量小。下一篇讲 SELinux 与 AppArmor,把「强制访问控制」这层更底层的防线讲透。

相关推荐
Mininglamp_27181 小时前
接口调用 vs 屏幕理解:两种 GUI 自动化架构的技术取舍
运维·架构·自动化
爱喝水的鱼丶3 小时前
SAP-ABAP:ECC→S/4HANA ABAP 迁移升级指南——程序改造、语法兼容与性能优化 导语
运维·开发语言·性能优化·sap·abap·经验交流·开发交流
木子欢儿3 小时前
openconnect Linux客户端安装 以及开机自启和登录
linux·运维·服务器
..Dauntless..4 小时前
【Linux】文件系统(一)
linux·运维·服务器
天空属于哈夫克34 小时前
企业微信API二次开发 赋能私域运营自动化
运维·自动化·企业微信
天远API5 小时前
零信任架构实战:基于天远运营商二要素V即时版构建自动化分时租赁出行会员身份一致性审核网关
运维·人工智能·架构·自动化
极光通讯5 小时前
液冷服务器对内存和SSD的适配要求:高密度部署下的散热与信号完整性
运维·服务器
数据库安全6 小时前
AI数据访问安全 |如何控制AI访问权限,防止越权
数据库·安全
2501_937767166 小时前
面向设计 / 研发部门:终端文件统一归档 + 服务器定时备份实践
运维·安全