当前位置:首页>Linux>linux安全加固实践

linux安全加固实践

  • 2026-10-11 07:42:47
linux安全加固实践

一、整体原则与落地顺序

总体思路:先减少攻击面 → 再加固身份与权限 → 补齐日志与审计 → 建立持续检查机制。

推荐执行顺序:

  1. 账号与认证安全
  2. SSH 与远程管理加固
  3. 系统与服务最小化(关闭无用服务)
  4. 防火墙与网络访问控制
  5. 文件权限与特权控制
  6. 日志与审计
  7. 漏洞与补丁管理

二、账号与认证安全

2.1 禁用或删除无用账号

# 查看所有本地账号

cut -d: -f1 /etc/passwd

# 锁定不需要登录的账号

usermod -L 用户名

# 或直接删除(确认无业务依赖)

userdel 用户名

要点:

  • 禁用 games、lp、news 等历史遗留账号;
  • 核查是否存在 UID=0 的“伪 root”账号:

awk -F: '($3 == 0) {print \$1}' /etc/passwd

如非必要,只应保留一个 root。

2.2 密码复杂度与有效期

以基于 PAM 的常见发行版(RHEL/CentOS/Ubuntu)为例:

1)安装密码质量模块(如已内置可略过):

# RHEL/CentOS

yum install -y libpwquality

# Debian/Ubuntu

apt-get install -y libpam-pwquality

2)编辑 /etc/security/pwquality.conf:

minlen = 12       # 最小长度12

dcredit = -1      # 至少1个数字

ucredit = -1      # 至少1个大写字母

lcredit = -1      # 至少1个小写字母

ocredit = -1      # 至少1个特殊字符

3)密码有效期(/etc/login.defs):

PASS_MAX_DAYS   90     # 最长使用天数

PASS_MIN_DAYS   1      # 两次修改间隔

PASS_WARN_AGE   7      # 过期前7天提醒

2.3 登录失败锁定策略

编辑 /etc/pam.d/system-auth(RHEL 系)或对应 PAM 配置:

auth required pam_faillock.so preauth silent deny=5 unlock_time=600

auth [success=1 default=bad] pam_unix.so

auth [default=die] pam_faillock.so authfail deny=5 unlock_time=600

account required pam_faillock.so

含义:10 分钟内连续 5 次失败即锁定 10 分钟。

三、SSH 与远程管理加固

3.1 禁止 root 直接远程登录

编辑 /etc/ssh/sshd_config:

PermitRootLogin no      # 禁止 root 直接登录

PasswordAuthentication no   # 推荐禁用密码登录,只允许密钥

Protocol 2              # 强制使用 SSH v2

LoginGraceTime 30       # 登录宽限时间

MaxAuthTries 3          # 最大认证失败次数

MaxSessions 3           # 每连接最大 session 数

然后重启 SSH:

systemctl restart sshd

执行前必须确认已有普通用户具备 sudo 能力,否则可能锁死远程运维。

3.2 使用非默认端口(可选)

Port 22xx    # 修改为非 22 端口,如 2222/22022 等

这不是“安全的根本”,但能显著降低随机扫描和暴力破解噪音。

3.3 启用基于密钥的认证

ssh-keygen -t ed25519 -C "your_email@example.com"

# 或 rsa, 至少2048位

ssh-keygen -t rsa -b 4096

将公钥加入服务器 ~/.ssh/authorized_keys,权限:

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

四、系统与服务最小化(减少攻击面)

4.1 禁用不必要的服务

查看开机自启服务:

systemctl list-unit-files --type=service

按需禁用:

systemctl disable --now service_name

常见可考虑禁用的服务(视业务而定):

  • cups
    (打印)、avahi-daemon(局域网发现)、bluetooth、rpcbind 等。

4.2 仅安装必要软件包

  • 新主机上线时,优先选择“最小安装”镜像;
  • 禁止在生产服务器上安装编译器和多余开发工具,如 gcc、make,除非业务确有合理理由并有额外防护。

五、防火墙与网络访问控制

5.1 使用 firewalld(RHEL 系)

启用并设为开机启动:

systemctl enable firewalld --now

只开放必要端口,例如:

firewall-cmd --permanent --add-service=ssh

firewall-cmd --permanent --add-service=http

firewall-cmd --permanent --add-service=https

firewall-cmd --reload

其他所有入站连接默认拒绝。

如需限制来源 IP:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.4/32" service name="ssh" accept'

firewall-cmd --reload

5.2 保护管理接口与数据库

  • 数据库、缓存(MySQL、PostgreSQL、Redis、MongoDB)不对公网开放;
  • 仅允许应用服务器所在网段访问:

# 示例:只允许 10.0.0.0/24 访问 3306

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="3306" accept'

firewall-cmd --reload

六、文件权限与特权控制

6.1 核查关键文件权限

ls -l /etc/passwd /etc/shadow /etc/sudoers

推荐:

  • /etc/passwd
    :-rw-r--r-- (644)
  • /etc/shadow
    :-rw------- (600)
  • /etc/sudoers
    :-r--r----- (440)

chmod 600 /etc/shadow

chmod 440 /etc/sudoers

6.2 控制 sudo 权限

编辑 /etc/sudoers(使用 visudo):

  • 禁止 NOPASSWD 大范围使用;
  • 尽量按角色划分命令权限,例如:

%webadmin ALL=(ALL) /bin/systemctl restart nginx,/bin/journalctl -u nginx

6.3 SUID/SGID 检查

查找 SUID/SGID 文件:

find / -perm /6000 -type f -xdev 2>/dev/null

对非常规或不需要 SUID/SGID 的程序去掉对应位(谨慎操作):

chmod u-s /path/to/file   # 移除SUID

chmod g-s /path/to/file   # 移除SGID

七、日志与审计

7.1 系统日志集中管理

确保 rsyslog 或 journald 正常运行:

systemctl status rsyslog

systemctl status systemd-journald

设置日志持久化(systemd):

mkdir -p /var/log/journal

systemd-tmpfiles --create --prefix /var/log/journal

systemctl restart systemd-journald

7.2 安全审计(auditd)

安装并启用:

yum install -y audit

systemctl enable auditd --now

示例规则 /etc/audit/rules.d/audit.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 /var/log/secure -p wa -k secure_logs

重启 auditd 后,用 ausearch -k 关键字 查询。

八、补丁与漏洞管理

8.1 定期更新系统

RHEL/CentOS:

yum update -y

Debian/Ubuntu:

apt-get update && apt-get upgrade -y

建议策略:

  • 生产环境每月固定维护窗口集中更新;
  • 高危漏洞(有公开利用 PoC 或爆出大规模攻击)视情况 24–72 小时内修补;
  • 采用“测试环境先验证,生产后滚动更新”的方式降低风险。

8.2 漏洞扫描(需配合工具)

  • 部署内部或云端漏洞扫描器(如基于 OpenVAS、国内商业扫描器等);
  • 扫描结果必须落实到修复清单,形成“发现 → 确认 → 修复 → 复测”的闭环;
  • 把扫描报告纳入变更和安全审计的证据。

九、基线与持续自查

9.1 建立安全基线文档

将以上各项(账号、密码策略、SSH 配置、防火墙、日志审计等)整理成 “本单位 Linux 安全基线”,内容包括:

  • 每一条基线项的:要求 / 实际配置位置 / 责任人 / 检查方式例如:
项目
要求
实际配置
检查命令
禁止 root 远程登录
PermitRootLogin no
/etc/ssh/sshd_config
grep PermitRootLogin /etc/ssh/sshd_config
密码长度 ≥12
minlen=12
/etc/security/pwquality.conf
grep minlen /etc/security/pwquality.conf

9.2 定期执行基线自查

可以自己写 Shell 脚本检查关键配置,例如:

#!/bin/bash

echo "=== Check SSH root login ==="

grep -E '^PermitRootLogin' /etc/ssh/sshd_config

echo "=== Check password policy ==="

grep -E 'minlen' /etc/security/pwquality.conf

grep -E 'PASS_MAX_DAYS' /etc/login.defs

echo "=== Check firewall status ==="

systemctl is-active firewalld

firewall-cmd --list-all

然后每月运行一次,将结果归档。

十、简单“执行清单”汇总(可直接用于上线前检查)

上线前至少确认以下 12 项:

  1.  已删除/禁用无用账号,除 root 外无额外 UID=0 账号
  2.  已设置密码复杂度与有效期,默认口令全部修改
  3.  已启用登录失败锁定策略
  4.  禁止 root 直接 SSH 登录,已使用密钥认证
  5.  SSH 非必要不暴露公网,或仅允许堡垒机 / 管理网段访问
  6.  firewalld/iptables 已启用,所有非业务必须端口关闭
  7.  数据库、缓存等内部服务端口不对公网开放,只允许应用网段
  8.  系统中无明显多余服务(如 cups、avahi 等)在运行
  9.  关键系统文件(/etc/passwd、/etc/shadow、/etc/sudoers)权限符合基线
  10.  日志持久化开启,安全事件(登录、sudo、配置变更)可审计
  11.  系统补丁已在近一个月内更新,无已知高危漏洞未处理
  12.  已有基线脚本或清单,每月至少一次自查并记录

最新文章

随机文章