精通 Linux 安全与加固:从基础到高级实践指南
Linux 凭借其开源特性、稳定性和灵活性,已成为服务器、云计算、物联网(IoT)乃至关键基础设施的首选操作系统。然而,“开源”不意味着“天生安全”——任何系统的安全性都取决于配置、补丁管理和用户实践。随着网络攻击手段日益复杂(如勒索软件、APT 攻击、供应链攻击),Linux 系统的安全加固已从“可选项”变为“必选项”。
本文将系统梳理 Linux 安全加固的核心领域,从基础配置到高级防护,结合最佳实践和具体示例,帮助读者构建纵深防御体系。无论你是系统管理员、开发运维工程师(DevOps),还是安全爱好者,都能从中获取实用的加固策略。
目录#
-
- 1.1 系统更新与补丁管理
- 1.2 安全启动(Secure Boot)与 UEFI 防护
- 1.3 BIOS/UEFI 密码设置
-
- 2.1 强密码策略与密码老化
- 2.2 禁用 root 直接登录与 sudo 精细化配置
- 2.3 PAM(可插拔认证模块)防护
-
- 3.1 防火墙配置(UFW/Firewalld/iptables)
- 3.2 SSH 深度加固
- 3.3 禁用不必要网络服务与端口限制
- 3.4 VPN 与传输加密
-
- 4.1 文件系统安全(fstab 选项与 tmpfs)
- 4.2 SUID/GUID 文件清理与权限最小化
- 4.3 内核安全(sysctl 调优与安全模块)
- 4.4 AppArmor 与 SELinux:强制访问控制
-
- 5.1 软件包验证与可信源配置
- 5.2 应用沙箱(Firejail/Systemd-nspawn)
- 5.3 Web 服务器与数据库安全加固
-
- 6.1 集中化日志管理(rsyslog/Journald)
- 6.2 文件完整性监控(AIDE/Tripwire)
- 6.3 入侵检测(Fail2ban 与 auditd)
-
- 7.1 备份策略与工具(rsync/BorgBackup)
- 7.2 事件处置流程(检测→遏制→根除→恢复)
-
- 8.1 容器安全(Docker 与 Kubernetes)
- 8.2 双因素认证(2FA)部署
- 8.3 全盘加密(LUKS/dm-crypt)
1. 基础安全基石:系统更新与启动保护#
1.1 系统更新与补丁管理#
Linux 系统的安全始于及时更新。漏洞修复通常通过系统补丁发布,延迟更新会使系统暴露于已知风险中。
最佳实践:
- 定期手动更新(适用于关键业务,需测试兼容性)。
- 配置自动更新(适用于非关键系统,降低运维成本)。
示例操作:
-
Debian/Ubuntu:
# 手动更新 sudo apt update && sudo apt upgrade -y # 安装自动更新工具 sudo apt install unattended-upgrades # 启用自动更新(编辑配置文件 /etc/apt/apt.conf.d/50unattended-upgrades) sudo dpkg-reconfigure -plow unattended-upgrades -
RHEL/CentOS:
# 手动更新 sudo yum update -y # 或 dnf update -y(CentOS 8+) # 配置自动更新 sudo yum install dnf-automatic -y sudo systemctl enable --now dnf-automatic.timer
1.2 安全启动(Secure Boot)与 UEFI 防护#
安全启动是 UEFI 的特性,通过验证启动加载程序的数字签名,防止恶意代码在系统启动时执行。
检查与启用:
- 进入 BIOS/UEFI 设置,启用“Secure Boot”。
- 验证状态(需安装
mokutil):mokutil --sb-state # 输出 "SecureBoot enabled" 表示已启用
1.3 BIOS/UEFI 密码设置#
BIOS/UEFI 密码可防止未授权用户修改启动顺序(如通过 USB 设备启动恶意系统)。
操作步骤:
- 重启系统,按厂商指定键(如 F2、Del)进入 BIOS/UEFI 设置。
- 找到“Security”→“Set Supervisor Password”,设置强密码。
- 保存并退出。
2. 用户与访问控制:最小权限原则实践#
2.1 强密码策略与密码老化#
弱密码是常见攻击入口,需通过策略强制复杂度与定期更换。
配置强密码策略:
- 安装
libpam-pwquality(Debian/Ubuntu)或pam_pwquality(RHEL/CentOS):sudo apt install libpam-pwquality # Debian/Ubuntu sudo yum install pam_pwquality # RHEL/CentOS - 编辑
/etc/security/pwquality.conf:minlen = 12 # 最小长度 12 位 dcredit = -1 # 至少 1 个数字 ucredit = -1 # 至少 1 个大写字母 lcredit = -1 # 至少 1 个小写字母 ocredit = -1 # 至少 1 个特殊字符 retry = 3 # 最多重试 3 次
密码老化(强制定期更换):
- 编辑
/etc/login.defs:PASS_MAX_DAYS 90 # 最长使用 90 天 PASS_MIN_DAYS 7 # 最短使用 7 天(防止频繁更换) PASS_WARN_AGE 14 # 提前 14 天警告 - 对现有用户应用策略:
sudo chage -M 90 -m 7 -W 14 username # username 替换为实际用户名
2.2 禁用 root 直接登录与 sudo 精细化配置#
直接使用 root 账户增加风险,应通过 sudo 赋予管理员权限,并限制 root 登录。
禁用 root SSH 登录:
- 编辑
/etc/ssh/sshd_config:PermitRootLogin no # 禁用 root 直接 SSH 登录 - 重启 SSH 服务:
sudo systemctl restart sshd # 或 ssh.service(Debian)
sudo 精细化配置:
- 使用
visudo编辑/etc/sudoers(自动语法检查,防止配置错误导致无法使用 sudo):# 允许 user1 执行所有命令(需密码) user1 ALL=(ALL:ALL) ALL # 允许 user2 无需密码执行特定命令(如重启服务) user2 ALL=(ALL:ALL) NOPASSWD: /bin/systemctl restart nginx, /bin/systemctl status nginx
2.3 PAM(可插拔认证模块)防护#
PAM 控制用户认证流程,可配置登录失败锁定、密码复杂度等规则。
示例:限制登录失败次数:
- 编辑
/etc/pam.d/common-auth(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS),添加:# 5 次失败后锁定 10 分钟(600 秒) auth required pam_tally2.so deny=5 unlock_time=600 even_deny_root root_unlock_time=1200 - 查看失败记录:
sudo pam_tally2 --user=username - 解锁用户:
sudo pam_tally2 --user=username --reset
3. 网络安全:边界防御与通信加密#
3.1 防火墙配置#
防火墙是网络边界的第一道防线,需仅开放必要端口。
UFW(简单防火墙,Debian/Ubuntu 默认)#
sudo ufw status # 查看状态
sudo ufw default deny incoming # 默认拒绝入站
sudo ufw default allow outgoing # 默认允许出站
sudo ufw allow 22/tcp # 允许 SSH(TCP 22 端口)
sudo ufw allow 443/tcp # 允许 HTTPS
sudo ufw deny 80/tcp # 拒绝 HTTP(如需强制 HTTPS)
sudo ufw enable # 启用防火墙(开机自启)Firewalld(RHEL/CentOS 默认)#
sudo firewall-cmd --list-all # 查看当前配置
sudo firewall-cmd --set-default-zone=drop # 默认拒绝入站
sudo firewall-cmd --add-service=ssh --permanent # 永久允许 SSH
sudo firewall-cmd --add-port=443/tcp --permanent # 永久允许 HTTPS
sudo firewall-cmd --reload # 应用配置3.2 SSH 深度加固#
SSH 是远程管理的主要入口,需严格限制访问。
编辑 /etc/ssh/sshd_config:
Port 2222 # 更改默认端口(减少扫描攻击)
PermitRootLogin no # 禁用 root 登录
PasswordAuthentication no # 禁用密码认证(仅用 SSH 密钥)
PubkeyAuthentication yes # 启用密钥认证
AuthorizedKeysFile .ssh/authorized_keys # 密钥文件路径
AllowUsers [email protected]/24 # 仅允许特定用户从特定网段登录
X11Forwarding no # 禁用 X11 转发(减少攻击面)
TCPKeepAlive yes # 检测死连接
MaxAuthTries 3 # 最多 3 次认证尝试
ClientAliveInterval 300 # 5 分钟无活动则断开- 重启服务:
sudo systemctl restart sshd - 生成 SSH 密钥(客户端):
ssh-keygen -t ed25519(比 RSA 更安全) - 复制公钥到服务器:
ssh-copy-id -p 2222 user1@server_ip
3.3 禁用不必要网络服务#
通过 systemctl 停止并禁用未使用的服务(如 telnet, ftp, cups 等):
# 查看监听端口
sudo ss -tuln # 或 netstat -tuln(需安装 net-tools)
# 禁用服务(如 FTP)
sudo systemctl stop vsftpd
sudo systemctl disable vsftpd3.4 VPN 与传输加密#
敏感通信需加密,推荐使用 WireGuard(轻量、高性能 VPN)。
WireGuard 快速部署(服务器端):
sudo apt install wireguard # 安装
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey # 生成密钥
# 配置 /etc/wireguard/wg0.conf(示例)
[Interface]
PrivateKey = 服务器私钥
Address = 10.0.0.1/24 # VPN 子网
ListenPort = 51820
[Peer]
PublicKey = 客户端公钥
AllowedIPs = 10.0.0.2/32 # 客户端 VPN IP- 启动:
sudo wg-quick up wg0 - 设为开机自启:
sudo systemctl enable wg-quick@wg0
4. 系统加固:内核、文件系统与权限控制#
4.1 文件系统安全#
通过 fstab 配置挂载选项,限制文件系统权限。
示例 /etc/fstab 配置:
UUID=xxx / ext4 defaults,nosuid,nodev 0 1 # 根分区禁用 SUID/GUID
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev,size=2G 0 0 # /tmp 禁止执行、SUID
/dev/sda5 /var/tmp ext4 defaults,noexec,nosuid,nodev 0 2 # /var/tmp 同上noexec:禁止执行文件nosuid:禁止 SUID/GUID 权限生效nodev:禁止创建设备文件
4.2 SUID/GUID 文件清理#
SUID 文件允许普通用户以文件所有者权限执行(如 passwd),但多余的 SUID 文件是风险点。
查找并清理 SUID/GUID 文件:
# 查找所有 SUID 文件
sudo find / -perm -4000 -ls 2>/dev/null
# 查找所有 GUID 文件
sudo find / -perm -2000 -ls 2>/dev/null
# 移除不必要的 SUID 权限(如某工具无需 SUID)
sudo chmod u-s /path/to/unnecessary-suid-file4.3 内核安全#
通过 sysctl 调整内核参数,增强网络与内存安全。
编辑 /etc/sysctl.conf 或 /etc/sysctl.d/security.conf:
# 防止 IP 欺骗
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 启用 SYN Cookie(防御 SYN 洪水攻击)
net.ipv4.tcp_syncookies = 1
# 限制 ICMP 洪水(ping 攻击)
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 禁止 IP 源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# 启用内存保护(防止栈溢出)
kernel.randomize_va_space = 2 # ASLR(地址空间布局随机化)- 应用配置:
sudo sysctl -p
4.4 AppArmor 与 SELinux:强制访问控制#
两者均为强制访问控制(MAC)工具,限制进程权限(超越传统 Unix 权限)。
AppArmor(Debian/Ubuntu 默认启用,配置简单)#
- 查看状态:
sudo aa-status - 启用配置文件(如针对 Nginx):
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx - 示例配置片段(
/etc/apparmor.d/usr.sbin.nginx):/usr/sbin/nginx { # 允许读取配置文件 /etc/nginx/** r, # 允许写入日志 /var/log/nginx/** w, # 禁止访问 /home /home/** deny, }
SELinux(RHEL/CentOS 默认启用,更复杂但功能强)#
- 查看状态:
sestatus(Enforcing为启用,Permissive为仅记录不阻止) - 临时切换模式:
sudo setenforce 0(Permissive)/1(Enforcing) - 管理策略:使用
semanage(端口标签)、restorecon(恢复文件上下文):# 允许 Nginx 监听非标准端口(如 8080) sudo semanage port -a -t http_port_t -p tcp 8080
5. 应用安全:从安装到沙箱隔离#
5.1 软件包验证与可信源配置#
仅从官方或可信源安装软件,验证包签名防止篡改。
验证包签名:
- Debian/Ubuntu:
dpkg-sig --verify package.deb - RHEL/CentOS:
rpm --checksig package.rpm
配置可信源:
- Debian/Ubuntu:编辑
/etc/apt/sources.list,仅保留官方源(如deb http://archive.ubuntu.com/ubuntu/ jammy main)。 - RHEL/CentOS:使用
subscription-manager管理官方订阅,或添加 EPEL 等可信第三方源。
5.2 应用沙箱#
沙箱限制应用访问范围,即使应用被入侵,影响也仅限于沙箱内。
Firejail(轻量级沙箱)#
sudo apt install firejail # 安装
firejail firefox # 沙箱运行 Firefox
firejail --private=/tmp/sandbox chromium # 使用私有目录运行 ChromeSystemd-nspawn(系统级容器,隔离更强)#
# 创建容器目录
sudo mkdir -p /var/lib/machines/myapp
# 从镜像初始化(需提前准备 rootfs)
sudo debootstrap jammy /var/lib/machines/myapp http://archive.ubuntu.com/ubuntu/
# 启动容器
sudo systemd-nspawn -D /var/lib/machines/myapp5.3 Web 服务器与数据库安全加固#
Nginx 加固#
- 禁用不必要模块:编辑
nginx.conf,注释无需的load_module。 - 启用 HTTPS(Let's Encrypt):
sudo certbot --nginx -d example.com - 添加安全响应头(
/etc/nginx/conf.d/security.conf):add_header X-Frame-Options "SAMEORIGIN"; # 防止点击劫持 add_header X-XSS-Protection "1; mode=block"; # XSS 防护 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; # HSTS(强制 HTTPS)
MySQL 加固#
- 运行安全脚本:
sudo mysql_secure_installation(删除匿名用户、禁用远程 root 登录、设置 root 密码)。 - 限制网络访问:编辑
my.cnf,设置bind-address = 127.0.0.1(仅本地访问)。 - 最小权限用户:为应用创建专用用户,仅授予必要权限:
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPass123!'; GRANT SELECT, INSERT ON appdb.* TO 'appuser'@'localhost';
6. 监控与审计:威胁检测与日志分析#
6.1 集中化日志管理#
集中收集日志便于追溯攻击行为。
rsyslog 配置(发送日志到中央服务器)#
- 编辑
/etc/rsyslog.conf,添加:# 发送所有日志到中央服务器(IP:514 UDP) *.* @192.168.1.100:514 - 重启服务:
sudo systemctl restart rsyslog
6.2 文件完整性监控(FIM)#
检测关键文件(如 /etc/passwd)是否被篡改。
AIDE(高级入侵检测环境)#
sudo apt install aide # 安装
sudo aideinit # 生成初始数据库(/var/lib/aide/aide.db.new.gz)
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz # 重命名为正式数据库
sudo aide --check # 对比当前系统与数据库,检测变化6.3 入侵检测#
Fail2ban(防御暴力破解)#
- 监控日志中的失败登录尝试,自动封禁恶意 IP。
- 配置
/etc/fail2ban/jail.local(覆盖默认配置):[sshd] enabled = true port = 2222 # 自定义 SSH 端口 filter = sshd logpath = /var/log/auth.log maxretry = 3 # 3 次失败后封禁 bantime = 3600 # 封禁 1 小时(秒) ignoreip = 192.168.1.0/24 # 白名单网段(如内网) - 启动并设为开机自启:
sudo systemctl enable --now fail2ban
auditd(审计系统调用)#
- 监控文件访问、进程执行等操作。
- 添加规则(
/etc/audit/rules.d/audit.rules):# 监控 /etc/passwd(用户账户变更) -w /etc/passwd -p wa -k passwd_changes # 监控 sudo 执行 -w /usr/bin/sudo -p x -k sudo_exec - 重启服务:
sudo systemctl restart auditd - 搜索审计日志:
sudo ausearch -k passwd_changes
7. 事件响应:从备份到恢复#
7.1 备份策略与工具#
定期备份是恢复数据的基础,需考虑完整性、加密和异地存储。
rsync(增量备份,适合本地)#
# 备份 /home 到外部硬盘(仅同步变化文件)
sudo rsync -av --delete /home/ /mnt/backup/external_disk/home/BorgBackup(支持加密、 deduplication,适合远程)#
# 初始化仓库(加密)
borg init --encryption=repokey /mnt/backup/borg_repo
# 创建备份(压缩,添加日期标签)
borg create --compression zstd /mnt/backup/borg_repo::$(date +%Y%m%d) /home/user
# 查看备份列表
borg list /mnt/backup/borg_repo7.2 事件处置流程#
- 检测:通过监控工具(如 Fail2ban 告警、AIDE 异常)发现异常。
- 遏制:隔离受影响系统(如断开网络、停止服务)。
- 根除:清除恶意文件(如
rm /tmp/malware)、查杀进程(kill -9 PID)、修复漏洞(更新补丁)。 - 恢复:从备份恢复数据,验证系统完整性后重新上线。
- 复盘:记录事件过程,优化防御措施(如加强防火墙规则)。
8. 高级安全主题#
8.1 容器安全(Docker 与 Kubernetes)#
- 非 root 用户运行容器:在 Dockerfile 中使用
USER 非 root uid。 - 限制容器权限:启动时添加
--cap-drop=ALL(移除所有 Linux capabilities)、--read-only(只读文件系统)。 - Kubernetes 网络策略:使用 NetworkPolicy 限制 Pod 间通信。
8.2 双因素认证(2FA)部署#
为 SSH 添加 2FA,即使密码泄露,攻击者仍需物理设备(如手机)验证码。
配置 pam_google_authenticator:
- 安装:
sudo apt install libpam-google-authenticator - 为用户生成密钥:
google-authenticator(扫码添加到 Google 身份验证器 App)。 - 编辑
/etc/pam.d/sshd,添加:auth required pam_google_authenticator.so - 编辑
sshd_config:ChallengeResponseAuthentication yes,重启 sshd。
8.3 全盘加密(LUKS/dm-crypt)#
防止物理设备被盗导致数据泄露(如笔记本、服务器硬盘)。
配置 LUKS 加密:
# 加密分区(/dev/sdb1)
sudo cryptsetup luksFormat /dev/sdb1
# 打开加密卷(映射为 crypt_data)
sudo cryptsetup open /dev/sdb1 crypt_data
# 格式化文件系统
sudo mkfs.ext4 /dev/mapper/crypt_data
# 挂载使用
sudo mount /dev/mapper/crypt_data /mnt/encrypted_data9. 参考资料#
- 官方文档:
- 工具文档:
- 书籍:《Linux Security Cookbook》(Daniel J. Barrett 等)
通过以上步骤,可显著提升 Linux 系统的安全性。安全是持续过程,需定期更新策略、关注漏洞情报(如 CVE 数据库),并结合实际场景调整加固措施。<|FCResponseEnd|># 精通 Linux 安全与加固:从基础到高级实践指南
引言#
Linux 凭借其开源特性、稳定性和灵活性,已成为服务器、云计算、物联网(IoT)乃至关键基础设施的首选操作系统。然而,“开源”不意味着“天生安全”——任何系统的安全性都取决于配置、补丁管理和用户实践。随着网络攻击手段日益复杂(如勒索软件、APT 攻击、供应链攻击),Linux 系统的安全加固已从“可选项”变为“必选项”。
本文将系统梳理 Linux 安全加固的核心领域,从基础配置到高级防护,结合最佳实践和具体示例,帮助读者构建纵深防御体系。无论你是系统管理员、开发运维工程师(DevOps),还是安全爱好者,都能从中获取实用的加固策略。
目录#
-
- 1.1 系统更新与补丁管理
- 1.2 安全启动(Secure Boot)与 UEFI 防护
- 1.3 BIOS/UEFI 密码设置
-
- 2.1 强密码策略与密码老化
- 2.2 禁用 root 直接登录与 sudo 精细化配置
- 2.3 PAM(可插拔认证模块)防护
-
- 3.1 防火墙配置(UFW/Firewalld/iptables)
- 3.2 SSH 深度加固
- 3.3 禁用不必要网络服务与端口限制
- 3.4 VPN 与传输加密
-
- 4.1 文件系统安全(fstab 选项与 tmpfs)
- 4.2 SUID/GUID 文件清理与权限最小化
- 4.3 内核安全(sysctl 调优与安全模块)
- 4.4 AppArmor 与 SELinux:强制访问控制
-
- 5.1 软件包验证与可信源配置
- 5.2 应用沙箱(Firejail/Systemd-nspawn)
- 5.3 Web 服务器与数据库安全加固
-
- 6.1 集中化日志管理(rsyslog/Journald)
- 6.2 文件完整性监控(AIDE/Tripwire)
- 6.3 入侵检测(Fail2ban 与 auditd)
-
- 7.1 备份策略与工具(rsync/BorgBackup)
- 7.2 事件处置流程(检测→遏制→根除→恢复)
-
- 8.1 容器安全(Docker 与 Kubernetes)
- 8.2 双因素认证(2FA)部署
- 8.3 全盘加密(LUKS/dm-crypt)
1. 基础安全基石:系统更新与启动保护#
1.1 系统更新与补丁管理#
Linux 系统的安全始于及时更新。漏洞修复通常通过系统补丁发布,延迟更新会使系统暴露于已知风险中。
最佳实践:
- 定期手动更新(适用于关键业务,需测试兼容性)。
- 配置自动更新(适用于非关键系统,降低运维成本)。
示例操作:
-
Debian/Ubuntu:
# 手动更新 sudo apt update && sudo apt upgrade -y # 安装自动更新工具 sudo apt install unattended-upgrades # 启用自动更新(编辑配置文件 /etc/apt/apt.conf.d/50unattended-upgrades) sudo dpkg-reconfigure -plow unattended-upgrades -
RHEL/CentOS:
# 手动更新 sudo yum update -y # 或 dnf update -y(CentOS 8+) # 配置自动更新 sudo yum install dnf-automatic -y sudo systemctl enable --now dnf-automatic.timer
1.2 安全启动(Secure Boot)与 UEFI 防护#
安全启动是 UEFI 的特性,通过验证启动加载程序的数字签名,防止恶意代码在系统启动时执行。
检查与启用:
- 进入 BIOS/UEFI 设置,启用“Secure Boot”。
- 验证状态(需安装
mokutil):mokutil --sb-state # 输出 "SecureBoot enabled" 表示已启用
1.3 BIOS/UEFI 密码设置#
BIOS/UEFI 密码可防止未授权用户修改启动顺序(如通过 USB 设备启动恶意系统)。
操作步骤:
- 重启系统,按厂商指定键(如 F2、Del)进入 BIOS/UEFI 设置。
- 找到“Security”→“Set Supervisor Password”,设置强密码。
- 保存并退出。
2. 用户与访问控制:最小权限原则实践#
2.1 强密码策略与密码老化#
弱密码是常见攻击入口,需通过策略强制复杂度与定期更换。
配置强密码策略:
- 安装
libpam-pwquality(Debian/Ubuntu)或pam_pwquality(RHEL/CentOS):sudo apt install libpam-pwquality # Debian/Ubuntu sudo yum install pam_pwquality # RHEL/CentOS - 编辑
/etc/security/pwquality.conf:minlen = 12 # 最小长度 12 位 dcredit = -1 # 至少 1 个数字 ucredit = -1 # 至少 1 个大写字母 lcredit = -1 # 至少 1 个小写字母 ocredit = -1 # 至少 1 个特殊字符 retry = 3 # 最多重试 3 次
密码老化(强制定期更换):
- 编辑
/etc/login.defs:PASS_MAX_DAYS 90 # 最长使用 90 天 PASS_MIN_DAYS 7 # 最短使用 7 天(防止频繁更换) PASS_WARN_AGE 14 # 提前 14 天警告 - 对现有用户应用策略:
sudo chage -M 90 -m 7 -W 14 username # username 替换为实际用户名
2.2 禁用 root 直接登录与 sudo 精细化配置#
直接使用 root 账户增加风险,应通过 sudo 赋予管理员权限,并限制 root 登录。
禁用 root SSH 登录:
- 编辑
/etc/ssh/sshd_config:PermitRootLogin no # 禁用 root 直接 SSH 登录 - 重启 SSH 服务:
sudo systemctl restart sshd # 或 ssh.service(Debian)
sudo 精细化配置:
- 使用
visudo编辑/etc/sudoers(自动语法检查,防止配置错误导致无法使用 sudo):# 允许 user1 执行所有命令(需密码) user1 ALL=(ALL:ALL) ALL # 允许 user2 无需密码执行特定命令(如重启服务) user2 ALL=(ALL:ALL) NOPASSWD: /bin/systemctl restart nginx, /bin/systemctl status nginx
2.3 PAM(可插拔认证模块)防护#
PAM 控制用户认证流程,可配置登录失败锁定、密码复杂度等规则。
示例:限制登录失败次数:
- 编辑
/etc/pam.d/common-auth(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS),添加:# 5 次失败后锁定 10 分钟(600 秒) auth required pam_tally2.so deny=5 unlock_time=600 even_deny_root root_unlock_time=1200 - 查看失败记录:
sudo pam_tally2 --user=username - 解锁用户:
sudo pam_tally2 --user=username --reset
3. 网络安全:边界防御与通信加密#
3.1 防火墙配置#
防火墙是网络边界的第一道防线,需仅开放必要端口。
UFW(简单防火墙,Debian/Ubuntu 默认)#
sudo ufw status # 查看状态
sudo ufw default deny incoming # 默认拒绝入站
sudo ufw default allow outgoing # 默认允许出站
sudo ufw allow 22/tcp # 允许 SSH(TCP 22 端口)
sudo ufw allow 443/tcp # 允许 HTTPS
sudo ufw deny 80/tcp # 拒绝 HTTP(如需强制 HTTPS)
sudo ufw enable # 启用防火墙(开机自启)Firewalld(RHEL/CentOS 默认)#
sudo firewall-cmd --list-all # 查看当前配置
sudo firewall-cmd --set-default-zone=drop # 默认拒绝入站
sudo firewall-cmd --add-service=ssh --permanent # 永久允许 SSH
sudo firewall-cmd --add-port=443/tcp --permanent # 永久允许 HTTPS
sudo firewall-cmd --reload # 应用配置3.2 SSH 深度加固#
SSH 是远程管理的主要入口,需严格限制访问。
编辑 /etc/ssh/sshd_config:
Port 2222 # 更改默认端口(减少扫描攻击)
PermitRootLogin no # 禁用 root 登录
PasswordAuthentication no # 禁用密码认证(仅用 SSH 密钥)
PubkeyAuthentication yes # 启用密钥认证
AuthorizedKeysFile .ssh/authorized_keys # 密钥文件路径
AllowUsers [email protected]/24 # 仅允许特定用户从特定网段登录
X11Forwarding no # 禁用 X11 转发(减少攻击面)
TCPKeepAlive yes # 检测死连接
MaxAuthTries 3 # 最多 3 次认证尝试
ClientAliveInterval 300 # 5 分钟无活动则断开- 重启服务:
sudo systemctl restart sshd - 生成 SSH 密钥(客户端):
ssh-keygen -t ed25519(比 RSA 更安全) - 复制公钥到服务器:
ssh-copy-id -p 2222 user1@server_ip
3.3 禁用不必要网络服务#
通过 systemctl 停止并禁用未使用的服务(如 telnet, ftp, cups 等):
# 查看监听端口
sudo ss -tuln # 或 netstat -tuln(需安装 net-tools)
# 禁用服务(如 FTP)
sudo systemctl stop vsftpd
sudo systemctl disable vsftpd3.4 VPN 与传输加密#
敏感通信需加密,推荐使用 WireGuard(轻量、高性能 VPN)。
WireGuard 快速部署(服务器端):
sudo apt install wireguard # 安装
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey # 生成密钥
# 配置 /etc/wireguard/wg0.conf(示例)
[Interface]
PrivateKey = 服务器私钥
Address = 10.0.0.1/24 # VPN 子网
ListenPort = 51820
[Peer]
PublicKey = 客户端公钥
AllowedIPs = 10.0.0.2/32 # 客户端 VPN IP- 启动:
sudo wg-quick up wg0 - 设为开机自启:
sudo systemctl enable wg-quick@wg0
4. 系统加固:内核、文件系统与权限控制#
4.1 文件系统安全#
通过 fstab 配置挂载选项,限制文件系统权限。
示例 /etc/fstab 配置:
UUID=xxx / ext4 defaults,nosuid,nodev 0 1 # 根分区禁用 SUID/GUID
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev,size=2G 0 0 # /tmp 禁止执行、SUID
/dev/sda5 /var/tmp ext4 defaults,noexec,nosuid,nodev 0 2 # /var/tmp 同上noexec:禁止执行文件nosuid:禁止 SUID/GUID 权限生效nodev:禁止创建设备文件
4.2 SUID/GUID 文件清理#
SUID 文件允许普通用户以文件所有者权限执行(如 passwd),但多余的 SUID 文件是风险点。
查找并清理 SUID/GUID 文件:
# 查找所有 SUID 文件
sudo find / -perm -4000 -ls 2>/dev/null
# 查找所有 GUID 文件
sudo find / -perm -2000 -ls 2>/dev/null
# 移除不必要的 SUID 权限(如某工具无需 SUID)
sudo chmod u-s /path/to/unnecessary-suid-file4.3 内核安全#
通过 sysctl 调整内核参数,增强网络与内存安全。
编辑 /etc/sysctl.conf 或 /etc/sysctl.d/security.conf:
# 防止 IP 欺骗
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 启用 SYN Cookie(防御 SYN 洪水攻击)
net.ipv4.tcp_syncookies = 1
# 限制 ICMP 洪水(ping 攻击)
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 禁止 IP 源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# 启用内存保护(防止栈溢出)
kernel.randomize_va_space = 2 # ASLR(地址空间布局随机化)- 应用配置:
sudo sysctl -p
4.4 AppArmor 与 SELinux:强制访问控制#
两者均为强制访问控制(MAC)工具,限制进程权限(超越传统 Unix 权限)。
AppArmor(Debian/Ubuntu 默认启用,配置简单)#
- 查看状态:
sudo aa-status - 启用配置文件(如针对 Nginx):
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx - 示例配置片段(
/etc/apparmor.d/usr.sbin.nginx):/usr/sbin/nginx { # 允许读取配置文件 /etc/nginx/** r, # 允许写入日志 /var/log/nginx/** w, # 禁止访问 /home /home/** deny, }
SELinux(RHEL/CentOS 默认启用,更复杂但功能强)#
- 查看状态:
sestatus(Enforcing为启用,Permissive为仅记录不阻止) - 临时切换模式:
sudo setenforce 0(Permissive)/1(Enforcing) - 管理策略:使用
semanage(端口标签)、restorecon(恢复文件上下文):# 允许 Nginx 监听非标准端口(如 8080) sudo semanage port -a -t http_port_t -p tcp 8080
5. 应用安全:从安装到沙箱隔离#
5.1 软件包验证与可信源配置#
仅从官方或可信源安装软件,验证包签名防止篡改。
验证包签名:
- Debian/Ubuntu:
dpkg-sig --verify package.deb - RHEL/CentOS:
rpm --checksig package.rpm
配置可信源:
- Debian/Ubuntu:编辑
/etc/apt/sources.list,仅保留官方源(如deb http://archive.ubuntu.com/ubuntu/ jammy main)。 - RHEL/CentOS:使用
subscription-manager管理官方订阅,或添加 EPEL 等可信第三方源。
5.2 应用沙箱#
沙箱限制应用访问范围,即使应用被入侵,影响也仅限于沙箱内。
Firejail(轻量级沙箱)#
sudo apt install firejail # 安装
firejail firefox # 沙箱运行 Firefox
firejail --private=/tmp/sandbox chromium # 使用私有目录运行 ChromeSystemd-nspawn(系统级容器,隔离更强)#
# 创建容器目录
sudo mkdir -p /var/lib/machines/myapp
# 从镜像初始化(需提前准备 rootfs)
sudo debootstrap jammy /var/lib/machines/myapp http://archive.ubuntu.com/ubuntu/
# 启动容器
sudo systemd-nspawn -D /var/lib/machines/myapp5.3 Web 服务器与数据库安全加固#
Nginx 加固#
- 禁用不必要模块:编辑
nginx.conf,注释无需的load_module。 - 启用 HTTPS(Let's Encrypt):
sudo certbot --nginx -d example.com - 添加安全响应头(
/etc/nginx/conf.d/security.conf):add_header X-Frame-Options "SAMEORIGIN"; # 防止点击劫持 add_header X-XSS-Protection "1; mode=block"; # XSS 防护 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; # HSTS(强制 HTTPS)
MySQL 加固#
- 运行安全脚本:
sudo mysql_secure_installation(删除匿名用户、禁用远程 root 登录、设置 root 密码)。 - 限制网络访问:编辑
my.cnf,设置bind-address = 127.0.0.1(仅本地访问)。 - 最小权限用户:为应用创建专用用户,仅授予必要权限:
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPass123!'; GRANT SELECT, INSERT ON appdb.* TO 'appuser'@'localhost';
6. 监控与审计:威胁检测与日志分析#
6.1 集中化日志管理#
集中收集日志便于追溯攻击行为。
rsyslog 配置(发送日志到中央服务器)#
- 编辑
/etc/rsyslog.conf,添加:# 发送所有日志到中央服务器(IP:514 UDP) *.* @192.168.1.100:514 - 重启服务:
sudo systemctl restart rsyslog
6.2 文件完整性监控(FIM)#
检测关键文件(如 /etc/passwd)是否被篡改。
AIDE(高级入侵检测环境)#
sudo apt install aide # 安装
sudo aideinit # 生成初始数据库(/var/lib/aide/aide.db.new.gz)
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz # 重命名为正式数据库
sudo aide --check # 对比当前系统与数据库,检测变化6.3 入侵检测#
Fail2ban(防御暴力破解)#
- 监控日志中的失败登录尝试,自动封禁恶意 IP。
- 配置
/etc/fail2ban/jail.local(覆盖默认配置):[sshd] enabled = true port = 2222 # 自定义 SSH 端口 filter = sshd logpath = /var/log/auth.log maxretry = 3 # 3 次失败后封禁 bantime = 3600 # 封禁 1 小时(秒) ignoreip = 192.168.1.0/24 # 白名单网段(如内网) - 启动并设为开机自启:
sudo systemctl enable --now fail2ban
auditd(审计系统调用)#
- 监控文件访问、进程执行等操作。
- 添加规则(
/etc/audit/rules.d/audit.rules):# 监控 /etc/passwd(用户账户变更) -w /etc/passwd -p wa -k passwd_changes # 监控 sudo 执行 -w /usr/bin/sudo -p x -k sudo_exec - 重启服务:
sudo systemctl restart auditd - 搜索审计日志:
sudo ausearch -k passwd_changes
7. 事件响应:从备份到恢复#
7.1 备份策略与工具#
定期备份是恢复数据的基础,需考虑完整性、加密和异地存储。
rsync(增量备份,适合本地)#
# 备份 /home 到外部硬盘(仅同步变化文件)
sudo rsync -av --delete /home/ /mnt/backup/external_disk/home/BorgBackup(支持加密、 deduplication,适合远程)#
# 初始化仓库(加密)
borg init --encryption=repokey /mnt/backup/borg_repo
# 创建备份(压缩,添加日期标签)
borg create --compression zstd /mnt/backup/borg_repo::$(date +%Y%m%d) /home/user
# 查看备份列表
borg list /mnt/backup/borg_repo7.2 事件处置流程#
- 检测:通过监控工具(如 Fail2ban 告警、AIDE 异常)发现异常。
- 遏制:隔离受影响系统(如断开网络、停止服务)。
- 根除:清除恶意文件(如
rm /tmp/malware)、查杀进程(kill -9 PID)、修复漏洞(更新补丁)。 - 恢复:从备份恢复数据,验证系统完整性后重新上线。
- 复盘:记录事件过程,优化防御措施(如加强防火墙规则)。
8. 高级安全主题#
8.1 容器安全(Docker 与 Kubernetes)#
- 非 root 用户运行容器:在 Dockerfile 中使用
USER 非 root uid。 - 限制容器权限:启动时添加
--cap-drop=ALL(移除所有 Linux capabilities)、--read-only(只读文件系统)。 - Kubernetes 网络策略:使用 NetworkPolicy 限制 Pod 间通信。
8.2 双因素认证(2FA)部署#
为 SSH 添加 2FA,即使密码泄露,攻击者仍需物理设备(如手机)验证码。
配置 pam_google_authenticator:
- 安装:
sudo apt install libpam-google-authenticator - 为用户生成密钥:
google-authenticator(扫码添加到 Google 身份验证器 App)。 - 编辑
/etc/pam.d/sshd,添加:auth required pam_google_authenticator.so - 编辑
sshd_config:ChallengeResponseAuthentication yes,重启 sshd。
8.3 全盘加密(LUKS/dm-crypt)#
防止物理设备被盗导致数据泄露(如笔记本、服务器硬盘)。
配置 LUKS 加密:
# 加密分区(/dev/sdb1)
sudo cryptsetup luksFormat /dev/sdb1
# 打开加密卷(映射为 crypt_data)
sudo cryptsetup open /dev/sdb1 crypt_data
# 格式化文件系统
sudo mkfs.ext4 /dev/mapper/crypt_data
# 挂载使用
sudo mount /dev/mapper/crypt_data /mnt/encrypted_data9. 参考资料#
- 官方文档:
- 工具文档:
- 书籍:《Linux Security Cookbook》(Daniel J. Barrett 等)
通过以上步骤,可显著提升 Linux 系统的安全性。安全是持续过程,需定期更新策略、关注漏洞情报(如 CVE 数据库),并结合实际场景调整加固措施。