Linux 系统加固指南:从基础到高级的安全强化实践

Linux 凭借其开源、稳定和高度可定制的特性,被广泛应用于服务器、嵌入式设备乃至关键基础设施中。然而,默认安装的 Linux 系统并非为“绝对安全”设计——为了易用性和兼容性,许多安全配置处于“宽松”状态,这为攻击者提供了可乘之机。系统加固(Hardening) 是通过优化配置、限制攻击面、强化访问控制等手段,将系统安全级别提升至“生产级标准”的过程。

本文将从预加固准备、操作系统配置、网络安全、用户与权限管理、文件系统安全、应用防护到监控与应急响应,系统性地介绍 Linux 加固的核心实践,涵盖常见场景、最佳实践及具体操作示例,帮助运维人员和安全工程师构建“纵深防御”体系。

目录#

  1. 预加固准备:夯实安全基础
    • 1.1 选择最小化操作系统
    • 1.2 验证安装介质完整性
    • 1.3 安全安装配置
  2. 操作系统核心配置加固
  3. 网络安全防护:抵御外部威胁
    • 3.1 防火墙配置(UFW/iptables)
    • 3.2 SSH 服务安全加固
    • 3.3 网络协议与栈优化
  4. 用户与权限管理:最小权限原则实践
    • 4.1 禁用 root 直接登录
    • 4.2 sudo 权限精细化控制
    • 4.3 密码策略与账户锁定
    • 4.4 审计与清理冗余账户
  5. 文件系统安全:保护数据与配置
    • 5.1 文件权限与属性控制
    • 5.2 文件系统加密(LUKS)
    • 5.3 SUID/GUID 二进制文件审计
    • 5.4 /tmp 与挂载点安全配置
  6. 应用层防护:从服务到容器
    • 6.1 软件包管理与第三方仓库风险
    • 6.2 Web 服务器安全配置(以 Nginx 为例)
    • 6.3 容器环境安全强化
  7. 监控与日志:构建安全“免疫系统”
    • 7.1 集中化日志管理
    • 7.2 审计工具 auditd 配置
    • 7.3 入侵检测与响应(Fail2ban)
  8. 应急响应与恢复:未雨绸缪
    • 8.1 数据备份策略
    • 8.2 加固配置文档化与基线检查
  9. 参考资料

1. 预加固准备:夯实安全基础#

系统加固的第一步不是“修改配置”,而是从源头控制风险——选择合适的操作系统、验证安装介质完整性,并在安装阶段就植入安全基因。

1.1 选择最小化操作系统#

最佳实践:优先选择“最小化安装”(Minimal Install)版本,仅保留核心组件,减少攻击面。

  • 推荐发行版:企业级场景(如服务器)优先选择 RHEL/CentOS Stream、Debian/Ubuntu Server;嵌入式场景可考虑 Alpine Linux(极致轻量化)。
  • 避免:桌面版 Linux(如 Ubuntu Desktop),其预装的图形界面、多媒体工具等会引入额外服务和漏洞。

示例:CentOS 最小化安装时,勾选“Minimal Install”,并取消所有附加组件(如“Development Tools”)。

1.2 验证安装介质完整性#

恶意篡改的 ISO 镜像可能植入后门,务必验证其哈希值或 GPG 签名。

  • 操作步骤:
    1. 从官方网站获取 ISO 的校验值(如 SHA256),例如 Ubuntu 的校验值页面:ubuntu.com/download/verify。
    2. 在本地计算下载文件的哈希值并比对:
      # 计算 SHA256 哈希
      sha256sum ubuntu-22.04.3-live-server-amd64.iso
      # 输出应与官方提供的哈希值完全一致
    3. (进阶)通过 GPG 签名验证文件未被篡改:
      # 导入官方公钥
      gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 0x46181433FBB75451 0xD94AA3F0EFE21092
      # 验证签名文件
      gpg --verify SHA256SUMS.gpg SHA256SUMS

1.3 安全安装配置#

安装阶段的关键安全选项直接影响后续加固复杂度,需重点关注:

  • 磁盘分区与加密:使用 LVM 逻辑卷管理,并对根分区(/)或数据分区(如 /home)启用 LUKS 加密(安装界面通常提供“加密分区”选项)。
  • 用户设置:禁用 root 账户(部分发行版默认隐藏 root,如 Ubuntu),创建一个具有 sudo 权限的普通用户,并设置强密码。
  • 网络服务:安装时仅勾选必要服务(如 OpenSSH Server),其他服务(如 Apache、MySQL)留待后续按需安装。

2. 操作系统核心配置加固#

完成基础安装后,需对操作系统本身进行深度优化,包括补丁管理、内核安全和服务精简。

2.1 系统更新与补丁管理#

核心原则:漏洞修复是安全的“第一道防线”,必须确保系统及软件包时刻处于最新状态。

  • 手动更新(适用于非生产环境或需人工审核场景):

    # Debian/Ubuntu
    apt update && apt upgrade -y && apt autoremove -y
    # RHEL/CentOS
    yum update -y || dnf update -y
  • 自动更新(生产环境推荐,需配合通知机制):
    使用 unattended-upgrades(Debian/Ubuntu)或 dnf-automatic(RHEL/CentOS):

    # Debian/Ubuntu 安装并配置自动更新
    apt install unattended-upgrades -y
    dpkg-reconfigure -plow unattended-upgrades  # 交互式启用自动更新

    配置文件路径:/etc/apt/apt.conf.d/50unattended-upgrades,可设置更新频率、排除特定包(如内核)、失败通知邮箱等。

  • 风险提示:自动更新可能导致服务中断(如内核重启),生产环境建议仅自动更新“安全补丁”(如 Debian 的 security 仓库),并通过监控工具(如 Prometheus)跟踪更新状态。

2.2 内核安全强化#

内核是系统的“心脏”,通过内核参数和启动配置可显著提升防御能力。

2.2.1 内核参数优化(sysctl)#

编辑 /etc/sysctl.conf 或 /etc/sysctl.d/99-security.conf,添加以下安全参数(按需调整):

# 网络安全:启用 SYN  cookies(防御 SYN 洪水攻击)
net.ipv4.tcp_syncookies = 1
# 禁止 IP 源路由(防止攻击者伪造源 IP)
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# 启用反向路径过滤(验证数据包源地址合法性)
net.ipv4.conf.all.rp_filter = 1
# 限制 ICMP 重定向(防止路由欺骗)
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# 禁用 IPv6(如无必要,减少攻击面)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# 内存保护:启用 ASLR(地址空间布局随机化)
kernel.randomize_va_space = 2
# 禁用核心 dump(防止敏感信息泄露)
fs.suid_dumpable = 0

使配置生效:sysctl -p /etc/sysctl.d/99-security.conf。

2.2.2 GRUB 启动加载器安全#

  • 设置 GRUB 密码:防止未授权用户通过单用户模式(init=/bin/bash)绕过认证:

    grub-mkpasswd-pbkdf2  # 生成加密密码,复制输出的 "grub.pbkdf2.sha512..." 字符串

    编辑 /etc/grub.d/40_custom,添加:

    set superusers="grubadmin"  # 定义管理员账户
    password_pbkdf2 grubadmin grub.pbkdf2.sha512.xxx...  # 粘贴加密密码

    更新 GRUB 配置:update-grub(Debian/Ubuntu)或 grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/CentOS)。

  • 禁用内核调试与不必要功能:在 GRUB 启动参数中添加 nosmep nosmap(禁用 SMEP/SMAP 保护,仅用于特定场景)、audit=1(启用审计)等,避免 debug init=/bin/bash 等危险参数。

2.3 禁用不必要服务与进程#

默认系统中运行的大量服务(如 cups、avahi-daemon、bluetooth)可能成为攻击入口,需彻底清理。

  • 查看当前运行服务:

    # systemd 系统
    systemctl list-unit-files --type=service --state=enabled
    # 或查看实时进程
    ps aux | grep -v "grep" | grep -iE "cups|avahi|bluetooth"
  • 禁用并停止服务:

    # 示例:禁用蓝牙服务
    systemctl stop bluetooth
    systemctl disable bluetooth
    systemctl mask bluetooth  # 彻底禁止启动(防止被依赖服务激活)
  • 核心建议:仅保留业务必需服务(如 sshd、nginx、mysql),禁用所有与业务无关的服务(如打印服务、文件共享、自动发现服务)。

3. 网络安全防护:抵御外部威胁#

网络是攻击者接触系统的主要途径,需通过防火墙、协议加固和服务防护构建“边界安全”。

3.1 防火墙配置(UFW/iptables)#

防火墙是网络访问控制的核心,建议优先使用 UFW(Uncomplicated Firewall)(简化版 iptables),复杂场景可直接配置 iptables。

3.1.1 UFW 基础配置#

# 安装 UFW(部分系统默认预装)
apt install ufw -y  # Debian/Ubuntu
yum install ufw -y  # RHEL/CentOS
 
# 启用 UFW 并设置默认策略(拒绝所有入站,允许所有出站)
ufw default deny incoming
ufw default allow outgoing
 
# 允许必要端口(按需调整)
ufw allow 22/tcp  # SSH
ufw allow 80/tcp  # HTTP(仅网站服务器开放)
ufw allow 443/tcp # HTTPS(仅网站服务器开放)
ufw allow 3306/tcp # MySQL(建议仅允许特定 IP 访问,如 ufw allow from 192.168.1.0/24 to any port 3306)
 
# 启用 UFW 并查看状态
ufw enable
ufw status verbose

3.1.2 iptables 高级规则(示例:限制 SSH 连接频率)#

# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 限制 SSH 每分钟最多 6 次连接(防暴力破解)
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh_limit --rcheck --seconds 60 --hitcount 6 -j DROP
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh_limit --set -j ACCEPT
# 其他规则...

3.2 SSH 服务安全加固#

SSH 是远程管理的主要入口,其安全性直接决定系统是否易被入侵。

3.2.1 核心配置优化(/etc/ssh/sshd_config)#

编辑配置文件,修改以下参数(取消注释并调整):

# 禁用密码登录(仅允许 SSH 密钥登录)
PasswordAuthentication no
ChallengeResponseAuthentication no
 
# 禁用 root 直接登录
PermitRootLogin no
 
# 限制允许登录的用户(例如仅允许 user1 和 user2)
AllowUsers user1 [email protected]/24  # 可指定 IP 段
 
# 修改默认端口(非必需,但可减少扫描流量)
Port 2222  # 建议使用 1024-65535 之间的非标准端口
 
# 设置连接超时(防止闲置连接被滥用)
ClientAliveInterval 300  # 5 分钟无活动则发送心跳包
ClientAliveCountMax 3    # 3 次无响应则断开连接
 
# 禁用 X11 转发(减少攻击面)
X11Forwarding no
 
# 禁用 TCP 端口转发(防止跳板攻击)
AllowTcpForwarding no

重启 SSH 服务使配置生效:systemctl restart sshd(Debian/Ubuntu)或 systemctl restart ssh(RHEL/CentOS)。

3.2.2 SSH 密钥登录配置#

# 客户端生成密钥对(本地执行)
ssh-keygen -t ed25519 -C "server-ssh-key"  # 推荐使用 ed25519 算法(比 RSA 更安全)
 
# 将公钥上传至服务器(假设服务器 IP 为 1.2.3.4,端口 2222,用户 user1)
ssh-copy-id -p 2222 [email protected]
 
# 服务器验证公钥是否生效(登录无需密码)
ssh -p 2222 [email protected]

3.3 网络协议与栈优化#

除防火墙外,需通过内核参数和服务配置禁用不安全协议,减少攻击面:

  • 禁用 IPv6:若无需 IPv6,通过 sysctl 禁用(见 2.2.1 节),并在 sshd_config 中添加 AddressFamily inet(仅监听 IPv4)。
  • 禁用不安全协议:如 Telnet、FTP(改用 SSH/SFTP)、rsh/rlogin(已被 SSH 取代),直接卸载相关包:
    apt remove telnet-server ftp openssh-server  # 示例:卸载 Telnet 和 FTP 服务
  • 强化 TCP 配置:通过 sysctl 限制半开连接数、启用时间戳等,减少 SYN 洪水攻击风险:
    net.ipv4.tcp_max_syn_backlog = 4096  # 半开连接队列大小
    net.ipv4.tcp_synack_retries = 2      # SYN-ACK 重试次数(默认 5,减少暴露时间)
    net.ipv4.tcp_timestamps = 1         # 启用 TCP 时间戳(帮助判断连接合法性)

4. 用户与权限管理:最小权限原则实践#

权限滥用是最常见的安全漏洞之一,需通过精细化的用户管理和访问控制,确保“每个用户仅拥有完成其工作所需的最小权限”。

4.1 禁用 root 直接登录#

直接使用 root 账户操作存在极高风险(误操作、权限被盗后影响全局),需彻底禁用 root 远程登录和本地登录。

  • 禁用 root SSH 登录:已在 3.2.1 节 sshd_config 中通过 PermitRootLogin no 实现。
  • 禁用 root 本地登录:修改 /etc/passwd 中 root 的 shell 为 /usr/sbin/nologin:
    usermod -s /usr/sbin/nologin root
    验证:grep root /etc/passwd 应显示 root:x:0:0:root:/root:/usr/sbin/nologin。

4.2 sudo 权限精细化控制#

普通用户需通过 sudo 获取临时权限,需通过 /etc/sudoers 文件(或 /etc/sudoers.d/ 目录下的文件)严格限制权限范围。

4.2.1 安全编辑 sudoers#

禁止直接编辑 /etc/sudoers,需使用 visudo(自动检查语法,防止配置错误导致无法使用 sudo):

visudo

4.2.2 示例配置(最小权限原则)#

# 允许 user1 仅执行特定命令(如重启 nginx),无需输入密码
user1  ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx
 
# 禁止 user2 使用 sudo 执行危险命令(如 rm -rf /)
user2  ALL=(ALL) ALL, !/bin/rm, !/bin/mv, !/bin/chmod 777 *
 
# 限制 user3 仅能以 www-data 用户身份管理网站文件
user3  ALL=(www-data) /bin/cp, /bin/mv, /bin/rm /var/www/*

4.3 密码策略与账户锁定#

弱密码是账户被盗的主要原因,需通过 PAM(Pluggable Authentication Modules)模块强制密码复杂度和账户锁定机制。

4.3.1 密码复杂度(pam_pwquality)#

编辑 /etc/pam.d/common-password(Debian/Ubuntu)或 /etc/pam.d/system-auth(RHEL/CentOS),添加:

# 密码至少 10 位,包含大小写字母、数字和特殊字符,拒绝常见密码
password    requisite     pam_pwquality.so minlen=10 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 reject_username difok=3

参数说明:

  • minlen=10:最小长度 10 位;
  • ucredit=-1:至少 1 个大写字母;
  • lcredit=-1:至少 1 个小写字母;
  • dcredit=-1:至少 1 个数字;
  • ocredit=-1:至少 1 个特殊字符;
  • reject_username:拒绝包含用户名的密码;
  • difok=3:新密码与旧密码至少 3 个字符不同。

4.3.2 账户锁定(pam_faillock)#

防止暴力破解,连续多次输错密码后锁定账户:
编辑 /etc/pam.d/common-auth,添加:

# 记录失败尝试(适用于本地和远程登录)
auth        required      pam_faillock.so preauth silent audit deny=5 unlock_time=300
auth        [success=1 default=ignore]      pam_unix.so
auth        [default=die]      pam_faillock.so authfail audit deny=5 unlock_time=300

参数说明:deny=5(5 次失败后锁定),unlock_time=300(锁定 5 分钟,单位秒,永久锁定用 unlock_time=-1)。

4.4 审计与清理冗余账户#

定期检查系统用户,移除未使用或权限异常的账户,避免“幽灵账户”被滥用。

  • 列出所有用户:

    cat /etc/passwd | cut -d: -f1  # 所有用户
    cat /etc/group | grep sudo     # 具有 sudo 权限的用户组
  • 检查特权用户:

    awk -F: '$3 == 0 {print $1}' /etc/passwd  # UID=0 的用户(仅 root 应为 0)
    find / -user 0 -ls 2>/dev/null           # 属于 root 的异常文件
  • 清理冗余账户:

    # 禁用账户(保留数据)
    usermod -L olduser  # 锁定账户
    # 删除账户(连同家目录)
    userdel -r olduser

5. 文件系统安全:保护数据与配置#

文件系统是数据和配置的载体,需通过权限控制、加密和属性保护防止未授权访问或篡改。

5.1 文件权限与属性控制#

核心原则:最小权限——文件默认权限 644(用户读写,组读,其他读),目录默认 755(用户读写执行,组读执行,其他读执行),避免 777(全局可读写执行)。

  • 检查危险权限:

    find / -perm 777 -ls 2>/dev/null  # 全局可读写执行的文件/目录
    find / -perm -o+w -type f -ls 2>/dev/null  # 其他用户可写的文件
  • 修复示例:

    chmod 755 /var/www  # 目录权限(仅所有者可写)
    chmod 644 /etc/nginx/nginx.conf  # 配置文件权限(仅所有者可写)
    chown -R root:root /usr/bin  # 确保系统命令归 root 所有
  • 特殊属性保护:
    使用 chattr 设置文件不可修改(防止被篡改):

    chattr +i /etc/passwd  # 设置 /etc/passwd 为不可变(需 root 权限,删除用 chattr -i)
    chattr +a /var/log/auth.log  # 设置日志文件为“仅追加”(防止日志被删除)

5.2 文件系统加密(LUKS)#

敏感数据需加密存储,防止物理设备被盗后数据泄露。Linux 中最常用的是 LUKS(Linux Unified Key Setup) 全盘加密。

  • 加密现有分区(以 /dev/sdb1 为例):

    # 安装 cryptsetup
    apt install cryptsetup -y
     
    # 初始化 LUKS 加密(会格式化分区,谨慎操作!)
    cryptsetup luksFormat /dev/sdb1
    # 输入密码(建议 20 位以上强密码)
     
    # 打开加密分区(映射为 crypt_data)
    cryptsetup open /dev/sdb1 crypt_data
     
    # 格式化映射设备(如 ext4)
    mkfs.ext4 /dev/mapper/crypt_data
     
    # 挂载使用
    mount /dev/mapper/crypt_data /mnt/encrypted_data
  • 开机自动解密:需在 /etc/crypttab 中配置(需配合 initramfs,具体参考发行版文档)。

5.3 SUID/GUID 二进制文件审计#

SUID/GUID 权限允许普通用户以文件所有者(通常是 root)的权限执行程序,若被滥用将导致权限提升,需严格审计。

  • 列出所有 SUID/GUID 文件:

    find / -perm /6000 -type f -ls 2>/dev/null  # /6000 = SUID (4000) + GUID (2000)
  • 核心建议:仅保留必要的 SUID 文件(如 sudo、passwd、ping),移除其他非必需文件的 SUID 权限:

    chmod u-s /usr/bin/mount  # 移除 mount 的 SUID 权限(普通用户无需挂载文件系统)

5.4 /tmp 与挂载点安全配置#

/tmp 等临时目录易被用于存放恶意文件或提权利用,需通过 /etc/fstab 限制其权限。

  • /etc/fstab 安全选项:
    编辑 /etc/fstab,为 /tmp、/var/tmp、/home 等分区添加 noexec(禁止执行文件)、nosuid(禁用 SUID/GUID)、nodev(禁止设备文件):
    # 示例:/tmp 分区配置
    tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev,size=2G 0 0
    # /var/tmp(通常是硬链接到 /tmp,若独立分区同样配置)
    /dev/sda5 /var/tmp ext4 defaults,noexec,nosuid,nodev 0 0
    # /home(用户家目录,禁止 SUID/GUID 和设备文件)
    /dev/sda6 /home ext4 defaults,nosuid,nodev 0 0
    生效配置:mount -o remount /tmp(无需重启)。

6. 应用层防护:从服务到容器#

应用是业务的载体,其安全直接决定数据和服务的可用性,需重点关注软件包来源、Web 服务配置和容器安全。

6.1 软件包管理与第三方仓库风险#

核心原则:仅从官方或可信源安装软件,避免第三方仓库引入恶意包或漏洞。

  • 禁用不必要的第三方仓库:

    # Debian/Ubuntu:编辑 /etc/apt/sources.list,注释或删除非官方源
    # RHEL/CentOS:查看并禁用第三方 repo
    yum repolist enabled
    yum-config-manager --disable epel-testing  # 示例:禁用 epel-testing 仓库
  • 验证软件包签名:

    # Debian/Ubuntu
    apt install debsig-verify -y
    debsig-verify /var/cache/apt/archives/nginx_*.deb
    # RHEL/CentOS
    rpm --checksig /var/cache/yum/x86_64/7/base/packages/nginx-*.rpm

6.2 Web 服务器安全配置(以 Nginx 为例)#

Web 服务器(如 Nginx、Apache)是最常见的攻击目标,需强化 TLS 配置、HTTP 头和访问控制。

6.2.1 TLS 加密与协议加固#

编辑 Nginx 站点配置(如 /etc/nginx/sites-available/default),添加:

server {
    listen 443 ssl;
    server_name example.com;
 
    # 启用 TLS 1.2+,禁用不安全协议(SSLv2/SSLv3/TLSv1/TLSv1.1)
    ssl_protocols TLSv1.2 TLSv1.3;
    # 强加密套件(优先 ECDHE 算法)
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_prefer_server_ciphers on;
 
    # 证书配置(Let's Encrypt 免费证书)
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
 
    # 安全 HTTP 头(防 XSS、点击劫持等)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;  # HSTS(强制 HTTPS)
    add_header X-Content-Type-Options "nosniff";  # 防止 MIME 类型嗅探
    add_header X-XSS-Protection "1; mode=block";  # XSS 过滤
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.cdn.com";  # CSP(限制资源加载)
    add_header X-Frame-Options "DENY";  # 防止点击劫持
}

6.3 容器环境安全强化#

容器(Docker、Kubernetes)已成为主流部署方式,需从镜像、运行时和编排层面强化安全。

  • 镜像安全:

    • 使用官方精简镜像(如 nginx:alpine 而非 nginx:latest);
    • 扫描镜像漏洞:trivy image nginx:alpine(Trivy 是开源容器扫描工具);
    • 镜像中仅包含运行时依赖,移除编译工具、shell 等。
  • 运行时安全:

    • 以非 root 用户运行容器:docker run --user 1000:1000 nginx;
    • 限制容器权限:docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx(仅保留绑定端口的能力);
    • 挂载目录为只读:docker run -v /data:/app/data:ro nginx。
  • Kubernetes 安全:

    • 使用 PodSecurityPolicy(PSP)或 Pod Security Context 限制权限;
    • 启用 NetworkPolicy 隔离 Pod 间通信;
    • 使用 Secrets 管理敏感信息(避免硬编码到镜像或配置文件)。

7. 监控与日志:构建安全“免疫系统”#

安全不是一次性工作,需通过持续监控和日志分析,及时发现并响应入侵行为。

7.1 集中化日志管理#

分散的日志难以分析,需集中收集并存储(如 ELK Stack:Elasticsearch、Logstash、Kibana)。

  • 配置 rsyslog 转发日志(适用于小型环境):
    编辑 /etc/rsyslog.conf,添加:

    *.* @@logserver.example.com:514  # 通过 TCP 转发所有日志到集中日志服务器
  • ELK Stack 部署(适用于中大型环境):
    Logstash 收集日志 → Elasticsearch 存储 → Kibana 可视化,可通过 Filebeat(轻量级日志收集器)替代 Logstash 降低资源占用。

7.2 审计工具 auditd 配置#

auditd 可监控文件访问、进程执行、系统调用等关键行为,是入侵检测的核心工具。

  • 安装与启动 auditd:

    apt install auditd -y  # Debian/Ubuntu
    systemctl enable --now auditd
  • 添加审计规则(/etc/audit/rules.d/security.rules):

    # 监控关键配置文件(如 /etc/passwd、/etc/shadow)
    -w /etc/passwd -p wa -k identity  # wa=write/append,k=关键词(用于过滤日志)
    -w /etc/shadow -p wa -k identity
    -w /etc/sudoers -p wa -k privilege
     
    # 监控 SSH 登录和 sudo 执行
    -w /var/log/auth.log -p wa -k auth
    -a exit,always -F arch=b64 -S execve -F euid=0 -k root_actions  # 记录 root 执行的命令

    加载规则:auditctl -R /etc/audit/rules.d/security.rules

  • 查看审计日志:

    ausearch -k identity  # 查看关键词为 identity 的日志
    aureport -f  # 生成文件访问审计报告

7.3 入侵检测与响应(Fail2ban)#

Fail2ban 通过监控日志(如 SSH 登录失败日志),自动封禁恶意 IP,有效防御暴力破解。

  • 安装与配置 Fail2ban:

    apt install fail2ban -y
    cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local  # 复制默认配置(本地修改用 .local 文件)
  • 配置 SSH 防护(/etc/fail2ban/jail.local):

    [sshd]
    enabled = true
    port = 2222  # 对应 SSH 端口
    filter = sshd
    logpath = /var/log/auth.log
    maxretry = 5  # 5 次失败尝试后封禁
    bantime = 3600  # 封禁 1 小时(单位秒)
    ignoreip = 192.168.1.0/24  # 白名单 IP(如内网)
  • 启动并验证:

    systemctl restart fail2ban
    fail2ban-client status sshd  # 查看 SSH  jail 状态(包含已封禁 IP)

8. 应急响应与恢复:未雨绸缪#

即使完成所有加固,仍需准备应急方案,确保在发生安全事件时能快速恢复业务。

8.1 数据备份策略#

核心原则:3-2-1 备份法则——3 份数据副本,2 种不同介质,1 份异地备份。

  • 工具推荐:

    • 文件级备份:rsync -avz /data user@backup-server:/backup/data(配合 --delete 保持同步);
    • 系统级备份:borgbackup(支持增量备份、加密和压缩);
    • 云备份:AWS S3、阿里云 OSS 等(异地备份)。
  • 备份验证:定期恢复测试(如每月恢复 1 份备份到测试环境),确保备份可用。

8.2 加固配置文档化与基线检查#

  • 文档化:记录所有加固步骤(如修改的配置文件、执行的命令),便于重复部署和审计。
  • 基线检查:使用开源工具(如 OpenSCAP、Lynis)定期扫描系统,对比安全基线,发现配置漂移:
    # 安装 Lynis(Linux 安全审计工具)
    curl -fsSL https://raw.githubusercontent.com/CISOfy/lynis/master/lynis > /usr/local/bin/lynis
    chmod +x /usr/local/bin/lynis
    # 执行安全扫描
    lynis audit system
    Lynis 会输出安全建议(如“[!] /tmp 未配置 noexec”),可作为加固补充。

9. 参考资料#

通过本文的步骤,可将 Linux 系统从“默认状态”提升至“企业级安全标准”。但安全是持续过程,需结合业务变化、漏洞情报和攻防技术演进,定期更新加固策略,构建真正的“动态安全”体系。