Linux 服务器安全加固完全指南

运维安全

为什么 Linux 服务器安全加固至关重要

在云原生时代,Linux 服务器是互联网基础设施的核心。未加固的服务器如同敞开的大门,随时可能被暴力破解、提权攻击、数据窃取或沦为肉鸡。

威胁类型 未加固风险 加固后效果
暴力破解 SSH 密码爆破成功率极高 密钥认证 + fail2ban,破解近乎不可能
提权攻击 普通用户可提权至 root 最小权限原则 + sudo 审计
数据泄露 敏感文件可被任意读取 权限控制 + 加密 + 不可变属性
横向移动 内网无隔离,一台沦陷全部沦陷 防火墙白名单 + 网络隔离
供应链攻击 任意软件包可安装 自动安全更新 + 完整性校验

安全加固不是一次性工作,而是持续运营的安全基线。本文将覆盖从初始评估到持续监控的完整加固流程。


安全基线评估

使用自动化工具扫描现状

在加固之前,必须先了解服务器的当前安全状态。推荐使用以下工具进行基线评估:

# 安装 Lynis —— 开源安全审计工具
sudo apt install lynis

# 执行完整安全审计
sudo lynis audit system

# 查看审计报告
sudo lynis audit system --report-file /var/log/lynis-report.txt

# 仅审计特定模块
sudo lynis audit system --tests-from-group "authentication"
sudo lynis audit system --tests-from-group "firewall"

手动基线检查清单

# 检查开放端口
ss -tlnp
netstat -tlnp

# 检查运行中的服务
systemctl list-units --type=service --state=running

# 检查已安装软件包的安全更新
apt list --upgradable 2>/dev/null | grep -i security

# 检查 SUID/SGID 文件
find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null

# 检查世界可写文件
find / -perm -o+w -type f 2>/dev/null | grep -v '/proc\|/sys\|/dev'

# 检查空密码账户
awk -F: '$2 == "" {print $1}' /etc/shadow

# 检查 root 可远程登录
grep "^PermitRootLogin" /etc/ssh/sshd_config

使用 OpenSCAP 进行合规检查

# 安装 OpenSCAP
sudo apt install openscap-scanner scap-security-guide

# 使用 DISA STIG 配置文件评估
sudo oscap xccdf eval \
  --profile xccdf_org.ssgproject.content_profile_stig \
  /usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml \
  --report /var/log/oscap-report.html

SSH 加固

SSH 是远程管理 Linux 服务器的核心通道,也是攻击者的首要目标。SSH 加固是安全防护的第一道防线。

禁用密码认证,仅使用密钥登录

# 生成 ED25519 密钥对(推荐,比 RSA 更安全更短)
ssh-keygen -t ed25519 -C "admin@server-01" -f ~/.ssh/id_ed25519

# 或生成 RSA 4096 位密钥(兼容性更好)
ssh-keygen -t rsa -b 4096 -C "admin@server-01" -f ~/.ssh/id_rsa_4096

# 将公钥部署到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server-ip

# 修改 sshd 配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# /etc/ssh/sshd_config —— SSH 安全加固配置

# 禁用密码认证
PasswordAuthentication no
ChallengeResponseAuthentication no
KbdInteractiveAuthentication no

# 禁用 root 登录
PermitRootLogin no

# 仅允许密钥认证
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# 修改默认端口(避免自动扫描)
Port 2222

# 限制认证尝试次数
MaxAuthTries 3

# 缩短登录超时
LoginGraceTime 30

# 禁用空密码
PermitEmptyPasswords no

# 限制可登录用户
AllowUsers deploy admin@10.0.1.0/24

# 禁用不必要的认证方式
HostbasedAuthentication no
GSSAPIAuthentication no
KerberosAuthentication no

# 使用强加密算法
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com

# 禁用 X11 转发和端口转发(如不需要)
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no

# 客户端存活检测
ClientAliveInterval 300
ClientAliveCountMax 2
# 验证配置语法后重启
sudo sshd -t && sudo systemctl restart sshd

配置 fail2ban 防暴力破解

sudo apt install fail2ban -y
# /etc/fail2ban/jail.local

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = iptables-multiport
action = %(action_mwl)s

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 7200

[sshd-ddos]
enabled = true
port = 2222
filter = sshd-ddos
logpath = /var/log/auth.log
maxretry = 5
bantime = 86400
sudo systemctl enable --now fail2ban

# 查看被封禁的 IP
sudo fail2ban-client status sshd

# 手动解封 IP
sudo fail2ban-client set sshd unbanip 192.168.1.100

防火墙配置

使用 UFW(Ubuntu 简易防火墙)

sudo apt install ufw -y

# 默认拒绝所有入站,允许所有出站
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 允许 SSH(注意端口要和 sshd 配置一致)
sudo ufw allow 2222/tcp comment 'SSH'

# 允许 HTTP/HTTPS
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'

# 允许特定 IP 访问特定端口
sudo ufw allow from 10.0.1.0/24 to any port 5432 proto tcp comment 'PostgreSQL from internal'

# 启用防火墙
sudo ufw enable

# 查看状态和规则
sudo ufw status verbose
sudo ufw show added

# 删除规则
sudo ufw delete allow 80/tcp

使用 nftables(推荐替代 iptables)

sudo apt install nftables -y
# /etc/nftables.conf

table inet firewall {
    chain input {
        type filter hook input priority 0; policy drop;

        ct state established,related accept
        ct state invalid drop

        iif lo accept

        ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, echo-request, echo-reply } accept
        ip protocol icmp icmp type { destination-unreachable, time-exceeded, parameter-problem, echo-request, echo-reply } accept

        tcp dport 2222 accept comment "SSH"
        tcp dport { 80, 443 } accept comment "HTTP/HTTPS"

        tcp dport 5432 ip saddr 10.0.1.0/24 accept comment "PostgreSQL internal"
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}
sudo systemctl enable --now nftables
sudo nft list ruleset

iptables 规则示例

# 清空现有规则
sudo iptables -F
sudo iptables -X

# 默认策略
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 允许回环接口
sudo iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 允许 SSH
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

# 允许 HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 保存规则
sudo apt install iptables-persistent -y
sudo netfilter-persistent save

用户与权限管理

使用 sudo 替代 root 直接操作

# 安装 sudo
sudo apt install sudo -y

# 创建新用户并加入 sudo 组
sudo adduser deploy
sudo usermod -aG sudo deploy

# 配置 sudo 免密(仅限特定命令)
sudo visudo -f /etc/sudoers.d/deploy
# /etc/sudoers.d/deploy —— 最小权限 sudo 配置

# 允许 deploy 用户重启特定服务
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart postgresql

# 允许查看日志
deploy ALL=(ALL) NOPASSWD: /usr/bin/journalctl

# 禁止使用 sudo su 或 sudo bash 提权
deploy ALL=(ALL) !/bin/su, !/bin/bash, !/bin/sh

用户组与权限分离

# 创建功能组
sudo groupadd webadmin
sudo groupadd dbadmin
sudo groupadd logreader

# 将用户加入对应组
sudo usermod -aG webadmin deploy
sudo usermod -aG dbadmin dbuser

# 设置组所有权
sudo chgrp -R webadmin /var/www
sudo chmod -R 2775 /var/www

# 设置数据库目录权限
sudo chgrp -R dbadmin /var/lib/postgresql
sudo chmod -R 750 /var/lib/postgresql

PAM 认证模块加固

# /etc/pam.d/common-password —— 密码复杂度要求

password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
  minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
password requisite pam_pwhistory.so remember=5 enforce_for_root
# /etc/pam.d/common-auth —— 登录失败锁定

auth required pam_faillock.so preauth silent deny=5 unlock_time=900
auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900
auth sufficient pam_faillock.so authsucc deny=5 unlock_time=900
# 设置密码过期策略
sudo chage -M 90 -m 7 -W 14 deploy

# 查看用户密码策略
sudo chage -l deploy

文件系统安全

关键权限设置

# /etc/shadow 和 /etc/gshadow 必须仅 root 可读
sudo chmod 600 /etc/shadow /etc/gshadow

# /etc/passwd 和 /etc/group 必须所有人可读但仅 root 可写
sudo chmod 644 /etc/passwd /etc/group

# SSH 目录权限
sudo chmod 700 ~/.ssh
sudo chmod 600 ~/.ssh/authorized_keys
sudo chmod 600 ~/.ssh/id_*
sudo chmod 644 ~/.ssh/id_*.pub

# 限制 crontab 访问
sudo touch /etc/cron.allow
sudo chmod 600 /etc/cron.allow
echo "root" | sudo tee -a /etc/cron.allow
echo "deploy" | sudo tee -a /etc/cron.allow

使用不可变属性保护关键文件

# 设置不可变属性(防止任何修改,包括 root)
sudo chattr +i /etc/passwd
sudo chattr +i /etc/shadow
sudo chattr +i /etc/group
sudo chattr +i /etc/gshadow
sudo chattr +i /etc/sudoers
sudo chattr +i /etc/ssh/sshd_config

# 查看属性
lsattr /etc/passwd

# 需要修改时先解除
sudo chattr -i /etc/passwd
# 修改完成后重新设置
sudo chattr +i /etc/passwd

磁盘加密

# 使用 LUKS 加密数据分区
sudo apt install cryptsetup -y

# 加密分区(注意:会清除分区数据!)
sudo cryptsetup luksFormat /dev/sdb1

# 打开加密分区
sudo cryptsetup luksOpen /dev/sdb1 encrypted_data

# 创建文件系统
sudo mkfs.ext4 /dev/mapper/encrypted_data

# 挂载
sudo mount /dev/mapper/encrypted_data /mnt/secure-data

# 开机自动挂载(/etc/crypttab)
echo "encrypted_data /dev/sdb1 none luks" | sudo tee -a /etc/crypttab

内核参数调优(sysctl)

网络安全参数

# /etc/sysctl.d/99-security.conf

# 禁用 IP 转发(非路由器)
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0

# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0

# 启用反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 禁用 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# 忽略 ICMP 广播请求
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 忽略虚假的 ICMP 错误响应
net.ipv4.icmp_ignore_bogus_error_responses = 1

# SYN Flood 防护
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2

# 限制连接队列
net.ipv4.tcp_max_tw_buckets = 14400

文件系统与内存保护

# /etc/sysctl.d/99-security.conf(续)

# 禁止 ptrace 跟踪(防调试提权)
kernel.yama.ptrace_scope = 2

# 启用 ASLR(地址空间随机化)
kernel.randomize_va_space = 2

# 限制核心转储
fs.suid_dumpable = 0

# 限制 dmesg 输出仅 root 可见
kernel.dmesg_restrict = 1

# 限制 kexec 加载
kernel.kexec_load_restrict = 1

# 保护硬链接和符号链接
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.protected_fifos = 2
fs.protected_regular = 2
# 应用配置
sudo sysctl --system

# 验证关键参数
sysctl net.ipv4.tcp_syncookies
sysctl kernel.randomize_va_space

系统审计(auditd)

安装与配置

sudo apt install auditd audispd-plugins -y
# /etc/audit/auditd.conf

log_file = /var/log/audit/audit.log
log_format = ENRICHED
max_log_file = 50
num_logs = 5
max_log_file_action = ROTATE
space_left = 100
space_left_action = EMAIL
admin_space_left = 50
admin_space_left_action = SUSPEND
action_mail_acct = root

审计规则

# /etc/audit/rules.d/audit.rules

# 删除所有已有规则
-D

# 缓冲区大小
-b 8192

# 失败模式
-f 1

# 监控特权命令
-a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0 -k priv_escalation
-a always,exit -F arch=b64 -S chown,chmod -F auid>=1000 -F auid!=4294967295 -k perm_change

# 监控关键文件修改
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
-w /etc/ssh/sshd_config -p wa -k sshd_config

# 监控系统调用
-a always,exit -F arch=b64 -S mount -F auid>=1000 -F auid!=4294967295 -k mounts
-a always,exit -F arch=b64 -S unlink,unlinkat,rename,renameat -F auid>=1000 -F auid!=4294967295 -k file_delete

# 监控网络连接
-a always,exit -F arch=b64 -S connect -F auid>=1000 -F auid!=4294967295 -k network_connect
# 重启审计服务
sudo systemctl restart auditd

# 查看审计日志
sudo ausearch -k sshd_config -ts today
sudo ausearch -k priv_escalation -ts recent

# 生成审计报告
sudo aureport -x
sudo aureport -k

日志管理与监控

journalctl 持久化配置

# 创建日志持久化目录
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
# /etc/systemd/journald.conf

[Journal]
Storage=persistent
Compress=yes
SystemMaxUse=2G
SystemMaxFileSize=100M
MaxRetentionSec=30day
RateLimitIntervalSec=30s
RateLimitBurst=1000
# 查看日志
sudo journalctl -u sshd --since "1 hour ago"
sudo journalctl -p err --since today
sudo journalctl -f  # 实时跟踪

rsyslog 集中日志

# /etc/rsyslog.d/50-remote.conf —— 发送日志到远程服务器

*.* @@log-server.example.com:514;RSYSLOG_TraditionalFileFormat
# /etc/rsyslog.d/99-security.conf —— 安全相关日志单独存储

auth,authpriv.*                 /var/log/auth.log
kern.*                          /var/log/kern.log
mail.*                          -/var/log/mail.log
*.emerg                         :omusrmsg:*

使用 Logwatch 生成日志摘要

sudo apt install logwatch -y

# 生成今日日志摘要
sudo logwatch --output stdout --range today --detail high

# 每日自动邮件报告
sudo logwatch --output mail --mailto admin@example.com --range yesterday --detail med

自动安全更新

sudo apt install unattended-upgrades apt-listchanges -y
# /etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
    "${distro_id}ESMApps:${distro_codename}-apps-security";
    "${distro_id}ESMInfrastructure:${distro_codename}-infra-security";
};

Unattended-Upgrade::Package-Blacklist {
};

Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";

Unattended-Upgrade::Mail "admin@example.com";
Unattended-Upgrade::MailOnlyOnError "true";
# /etc/apt/apt.conf.d/20auto-upgrades

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
# 验证自动更新状态
sudo unattended-upgrade --dry-run --verbose

容器安全基础

Docker 安全加固

# /etc/docker/daemon.json

{
  "icc": false,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "userns-remap": "default",
  "no-new-privileges": true,
  "seccomp-profile": "/etc/docker/seccomp.json",
  "bip": "172.17.0.1/16",
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 65536,
      "Soft": 1024
    }
  }
}
# 容器运行安全最佳实践
docker run -d \
  --name webapp \
  --read-only \
  --tmpfs /tmp:noexec,nosuid,size=100m \
  --tmpfs /run:noexec,nosuid,size=10m \
  --pids-limit 100 \
  --memory 512m \
  --cpus 1.0 \
  --security-opt no-new-privileges \
  --security-opt apparmor=docker-default \
  --cap-drop ALL \
  --cap-add NET_BIND_SERVICE \
  --user 1000:1000 \
  myapp:latest

Podman 无守护进程容器

# Podman 默认 rootless 运行,更安全
podman run -d \
  --read-only \
  --pids-limit 100 \
  --memory 512m \
  --cap-drop ALL \
  --security-opt no-new-privileges \
  myapp:latest

入侵检测

AIDE 文件完整性检测

sudo apt install aide -y

# 初始化数据库
sudo aideinit

# 将初始数据库移为生产数据库
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 执行完整性检查
sudo aide --check

# 更新数据库(在合法变更后)
sudo aide --update
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# /etc/aide/aide.conf —— 自定义检测规则

# 关键目录严格检测
/etc p+i+n+u+g+s+b+m+c+sha512
/root p+i+n+u+g+s+b+m+c+sha512

# 忽略频繁变化的目录
!/var/log
!/var/run
!/proc
!/sys
!/dev
!/tmp

Rootkit 检测

# 安装 rkhunter 和 chkrootkit
sudo apt install rkhunter chkrootkit -y

# rkhunter 配置
# /etc/rkhunter.conf

UPDATE_MIRRORS=1
MIRRORS_MODE=0
WEB_CMD=curl
ALLOW_SSH_ROOT_USER=no
ALLOW_SSH_PROT_V1=no
DISABLE_TESTS=apps
# 更新 rkhunter 数据库
sudo rkhunter --update

# 执行系统检查
sudo rkhunter --check --skip-keypress

# chkrootkit 检测
sudo chkrootkit

# 设置每日自动检查
echo "0 3 * * * root /usr/bin/rkhunter --check --skip-keypress --report-warnings-only" | \
  sudo tee /etc/cron.d/rkhunter

SSL/TLS 加固

Nginx SSL 配置

# /etc/nginx/snippets/ssl-hardening.conf

ssl_protocol TLSv1.2 TLSv1.3;
ssl_cipher TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers on;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;

ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy strict-origin-when-cross-origin always;

生成强 DH 参数

openssl dhparam -out /etc/nginx/dhparam.pem 2048

常见攻击向量与防御

防御 DDoS 攻击

# 使用 sysctl 缓解 SYN Flood
sudo sysctl -w net.ipv4.tcp_syncookies=1
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sudo sysctl -w net.core.somaxconn=65535

# 使用 iptables 限制连接速率
sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -j DROP

防御缓冲区溢出

# 启用 ASLR
sudo sysctl -w kernel.randomize_va_space=2

# 启用 NX 位(No-eXecute,现代 CPU 默认启用)
# 编译时使用 -fstack-protector-strong

# 禁用核心转储
echo "* hard core 0" | sudo tee -a /etc/security/limits.conf

防御 DNS 劫持

# /etc/systemd/resolved.conf

[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9
DNSOverTLS=opportunistic
DNSSEC=allow-downgrade
Cache=yes
CacheFromNetwork=no

安全加固检查清单

类别 检查项 状态
SSH 禁用密码认证
SSH 禁用 root 登录
SSH 修改默认端口
SSH 配置 fail2ban
SSH 使用强加密算法
防火墙 默认拒绝入站
防火墙 仅开放必要端口
防火墙 出站规则限制
用户 删除不必要的账户
用户 配置最小权限 sudo
用户 密码复杂度策略
用户 账户锁定策略
文件系统 关键文件权限正确
文件系统 设置不可变属性
文件系统 敏感分区加密
内核 禁用 IP 转发
内核 启用 SYN Cookies
内核 启用 ASLR
审计 auditd 规则配置
日志 日志持久化
日志 集中日志收集
更新 自动安全更新
入侵检测 AIDE 基线建立
入侵检测 rkhunter 定期扫描
SSL/TLS 禁用弱协议
SSL/TLS HSTS 启用

常见问题 FAQ

Q: 加固后无法 SSH 登录怎么办?

确保在禁用密码认证前,已成功部署公钥并测试密钥登录。建议保持一个已登录的会话,在另一个终端测试新配置。如果被锁定,可通过云服务商的 VNC 控制台登录修复。

Q: 修改 SSH 端口后连接失败?

检查防火墙是否放行了新端口。UFW 和 iptables 都需要同步更新规则。同时确认 SELinux/AppArmor 允许新端口(RHEL/CentOS 系统需要 semanage port -a -t ssh_port_t -p tcp 2222)。

Q: chattr +i 后无法修改文件怎么办?

使用 chattr -i 解除不可变属性,修改完成后重新 chattr +i。注意:root 也不能绕过不可变属性,必须先解除。

Q: 自动安全更新会导致服务中断吗?

安全更新通常不重启服务,仅打补丁。但内核更新需要重启才生效。建议配置 Automatic-Reboot "false",手动安排重启窗口。

Q: 如何在不影响业务的情况下测试加固措施?

  1. 在测试环境先行验证所有配置
  2. 使用蓝绿部署或金丝雀发布逐步应用
  3. 保持回滚方案(备份所有配置文件)
  4. 分阶段加固:先 SSH → 再防火墙 → 再内核参数

Q: AIDE 报告大量变更怎么办?

检查变更是否为合法操作(如包更新、配置修改)。合法变更后需要更新 AIDE 数据库。如果是未授权变更,立即启动应急响应流程。


本文涵盖的加固措施可根据实际业务需求裁剪。建议参考 CIS BenchmarksDISA STIG 获取更详细的合规标准。配合 工具库的 Hash 加密工具SSH 密钥生成器 可以更高效地完成服务器安全加固。

本站提供浏览器本地工具,免注册即可试用 →

#Linux#安全加固#服务器#运维#教程