Linux 系统加固指南:从基础到高级的安全强化实践
Linux 凭借其开源、稳定和高度可定制的特性,被广泛应用于服务器、嵌入式设备乃至关键基础设施中。然而,默认安装的 Linux 系统并非为“绝对安全”设计——为了易用性和兼容性,许多安全配置处于“宽松”状态,这为攻击者提供了可乘之机。系统加固(Hardening) 是通过优化配置、限制攻击面、强化访问控制等手段,将系统安全级别提升至“生产级标准”的过程。
本文将从预加固准备、操作系统配置、网络安全、用户与权限管理、文件系统安全、应用防护到监控与应急响应,系统性地介绍 Linux 加固的核心实践,涵盖常见场景、最佳实践及具体操作示例,帮助运维人员和安全工程师构建“纵深防御”体系。
目录#
- 预加固准备:夯实安全基础
- 1.1 选择最小化操作系统
- 1.2 验证安装介质完整性
- 1.3 安全安装配置
- 操作系统核心配置加固
- 2.1 系统更新与补丁管理
- 2.2 内核安全强化
- 2.3 禁用不必要服务与进程
- 网络安全防护:抵御外部威胁
- 3.1 防火墙配置(UFW/iptables)
- 3.2 SSH 服务安全加固
- 3.3 网络协议与栈优化
- 用户与权限管理:最小权限原则实践
- 4.1 禁用 root 直接登录
- 4.2 sudo 权限精细化控制
- 4.3 密码策略与账户锁定
- 4.4 审计与清理冗余账户
- 文件系统安全:保护数据与配置
- 5.1 文件权限与属性控制
- 5.2 文件系统加密(LUKS)
- 5.3 SUID/GUID 二进制文件审计
- 5.4 /tmp 与挂载点安全配置
- 应用层防护:从服务到容器
- 6.1 软件包管理与第三方仓库风险
- 6.2 Web 服务器安全配置(以 Nginx 为例)
- 6.3 容器环境安全强化
- 监控与日志:构建安全“免疫系统”
- 7.1 集中化日志管理
- 7.2 审计工具 auditd 配置
- 7.3 入侵检测与响应(Fail2ban)
- 应急响应与恢复:未雨绸缪
- 8.1 数据备份策略
- 8.2 加固配置文档化与基线检查
- 参考资料
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 签名。
- 操作步骤:
- 从官方网站获取 ISO 的校验值(如 SHA256),例如 Ubuntu 的校验值页面:ubuntu.com/download/verify。
- 在本地计算下载文件的哈希值并比对:
# 计算 SHA256 哈希 sha256sum ubuntu-22.04.3-live-server-amd64.iso # 输出应与官方提供的哈希值完全一致 - (进阶)通过 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(启用审计)等,避免debuginit=/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 verbose3.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 rootgrep 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):
visudo4.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 0mount -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。
- 以非 root 用户运行容器:
-
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 会输出安全建议(如“[!] /tmp 未配置 noexec”),可作为加固补充。# 安装 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
9. 参考资料#
- CIS 安全基准:CIS Critical Security Controls(国际公认的安全控制框架)
- NIST 指南:NIST SP 800-123(Linux 服务器安全配置指南)
- Linux 基金会:Linux Security(Linux 安全最佳实践)
- 工具文档:
通过本文的步骤,可将 Linux 系统从“默认状态”提升至“企业级安全标准”。但安全是持续过程,需结合业务变化、漏洞情报和攻防技术演进,定期更新加固策略,构建真正的“动态安全”体系。