前言
Linux 服务器是企业业务的核心载体,从 Web 服务、数据库、中间件到容器集群,绝大多数生产业务都运行在 Linux 系统之上。而互联网暴露面扩大、供应链漏洞频发、定向攻击常态化,让 Linux 服务器成为黑客入侵的首要目标。
安全加固的核心目标,是通过最小权限原则、纵深防御体系、持续审计机制,缩小服务器攻击面,阻断攻击路径,提升抗入侵能力 —— 即使边界防护被突破,也能最大程度保护核心数据与业务安全。本文覆盖从账号认证、服务最小化、权限管控到网络防护、日志审计、入侵检测的全维度落地方案,适配 CentOS 7/8/9、RHEL 7/8/9、Ubuntu 20.04/22.04/24.04 等主流企业级发行版,所有操作均配套明确的配置命令、验证方法与回滚方案,可直接落地到生产环境。
一、前置核心加固原则
所有加固操作需严格遵循以下原则,避免业务中断或防护失效:
1、 最小权限原则:仅给用户、服务、进程分配完成任务所需的最小权限,杜绝过度授权
2、 最小暴露原则:关闭所有非必要的端口、服务、组件,从根源缩小攻击面
3、 纵深防御原则:构建账号、网络、文件、应用多层防护体系,避免单点防护失效
4、 可回滚原则:修改配置前必须备份原文件,所有操作均配套回滚方法,避免生产故障
5、 持续审计原则:加固不是一次性操作,需定期开展基线检查、漏洞扫描与日志审计,持续优化防护策略
【生产环境避坑提示】
所有涉及系统核心配置、SSH 服务、防火墙的修改,需先在测试环境验证,再逐步落地生产;修改 SSH 配置后,需先保留当前会话,用新会话测试登录正常后,再关闭原会话,避免服务器失联。
二、账号与身份认证安全加固
账号与认证是服务器安全的第一道防线,超过 70% 的 Linux 入侵事件,都源于弱口令、账号过度授权、SSH 配置缺陷导致的边界突破。
2.1 清理无用账号,消除风险账户
系统安装、业务迭代过程中会产生大量无用账号,包括默认创建的程序账号、废弃的运维账号,这些账号往往成为黑客入侵的突破口。
# 1、备份原账号配置文件,方便回滚
cp /etc/passwd /etc/passwd.bak.$(date +%Y%m%d)
cp /etc/shadow /etc/shadow.bak.$(date +%Y%m%d)
# 2、查看系统中所有可登录的账号,排查废弃账号
cat /etc/passwd | grep -E "/bin/bash|/bin/sh|/bin/zsh"
# 3、锁定无用账号(推荐,可恢复,比直接删除更安全)
usermod -L 废弃用户名
# 解锁账号回滚命令:usermod -U 废弃用户名
# 4、禁用程序账号的登录权限,杜绝账号被滥用
usermod -s /sbin/nologin 程序用户名
# 示例:usermod -s /sbin/nologin apache
2.2 强制配置强密码策略
弱口令是黑客暴力破解的首要目标,需通过 PAM 模块强制系统所有用户使用复杂度达标的密码,同时限制密码有效期与重试次数。
适配 CentOS/RHEL 系列
# 1、安装密码质量检测模块
yum install -y libpwquality
# 2、修改密码策略配置文件,强制密码复杂度
vi /etc/security/pwquality.conf
# 新增/修改以下配置:
minlen = 12 # 密码最小长度12位
minclass = 3 # 必须包含大小写字母、数字、特殊符号中的3种
maxrepeat = 3 # 禁止连续3个相同字符
difok = 5 # 新密码与旧密码至少5个字符不同
enforce_for_root = 1 # 强制root用户也遵循该策略
# 3、配置密码登录失败锁定策略,防止暴力破解
vi /etc/pam.d/system-auth
vi /etc/pam.d/password-auth
# 在auth字段新增配置,连续5次失败锁定10分钟:
auth required pam_faillock.so preauth audit silent deny=5 unlock_time=600
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=600
auth sufficient pam_faillock.so authsucc audit
适配 Ubuntu/Debian 系列
# 1、安装密码质量检测模块
apt install -y libpam-pwquality
# 2、修改密码策略配置
vi /etc/pam.d/common-password
# 修改pam_pwquality.so行,添加强制规则:
password requisite pam_pwquality.so retry=3 minlen=12 minclass=3 maxrepeat=3 enforce_for_root
# 3、配置登录失败锁定策略
vi /etc/pam.d/common-auth
# 新增配置,连续5次失败锁定10分钟:
auth required pam_faillock.so preauth audit silent deny=5 unlock_time=600
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=600
auth sufficient pam_faillock.so authsucc audit
2.3 SSH 服务全维度安全加固
SSH 是 Linux 远程管理的核心协议,也是黑客攻击的头号目标,需从认证方式、访问控制、端口配置等维度完成全量加固。
# 1、备份SSH配置文件,方便回滚
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d)
# 2、修改SSH核心配置
vi /etc/ssh/sshd_config
# 核心加固项如下:
Port 22345 # 修改默认22端口,减少全网扫描攻击
PermitRootLogin no # 禁止root用户直接登录
PubkeyAuthentication yes # 开启公钥认证,优先使用密钥登录
PasswordAuthentication no # 关闭密码认证,彻底杜绝暴力破解
PermitEmptyPasswords no # 禁止空密码登录
MaxAuthTries 3 # 最大认证尝试次数3次
ClientAliveInterval 300 # 5分钟无操作自动断开连接
ClientAliveCountMax 2 # 无响应最大次数2次
AllowUsers 运维用户名@192.168.1.0/24 # 配置IP白名单,仅允许指定网段的指定用户登录
# 禁止使用不安全的加密算法与协议
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
# 3、验证SSH配置语法是否正确,避免配置错误导致服务崩溃
sshd -t
# 配置无报错后,重启SSH服务生效
# CentOS/RHEL:systemctl restart sshd
# Ubuntu/Debian:systemctl restart ssh
# 4、验证加固效果,用新会话测试登录,确认白名单、密钥认证正常生效
2.4 Sudo 提权权限精细化管控
绝大多数提权攻击都利用了 sudo 的过度授权,需严格限制普通用户的 sudo 权限,杜绝直接给用户分配 ALL 权限。
# 1、备份sudo配置文件
cp /etc/sudoers /etc/sudoers.bak.$(date +%Y%m%d)
# 2、使用visudo命令编辑sudo配置(自带语法检查,避免配置错误)
visudo
# 错误配置(禁止使用):运维用户名 ALL=(ALL) ALL
# 正确配置:仅给用户分配完成工作所需的最小命令权限,示例:
运维用户名 ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/tail -f /var/log/nginx/access.log
# 禁止用户通过sudo修改sudo配置、切换root、执行高危命令
Defaults !visiblepw
Defaults always_set_home
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults env_reset
# 禁止sudo执行su、vim、bash等可直接提权的命令
运维用户名 ALL=(ALL) !/usr/bin/su, !/usr/bin/bash, !/usr/bin/vim /etc/sudoers, !/usr/bin/visudo
三、系统服务与组件最小化加固
系统运行的服务越多,开放的端口与攻击面就越大,黑客可利用的漏洞点就越多。最小化加固的核心,是只保留业务必需的服务与组件,关闭所有非必要内容。
3.1 关闭非必要服务,缩小攻击面
# 1、查看系统当前运行的所有服务
systemctl list-units --type=service --state=running
# 2、停止并禁用非必要服务,示例如下(根据业务实际情况调整)
# 禁用打印服务
systemctl stop cups
systemctl disable cups
# 禁用蓝牙服务
systemctl stop bluetooth
systemctl disable bluetooth
# 禁用IPv6相关服务(业务不使用IPv6时)
systemctl stop ip6tables
systemctl disable ip6tables
# 禁用rpcbind服务(不使用NFS共享时)
systemctl stop rpcbind
systemctl disable rpcbind
# 3、验证服务状态,确认已停止并禁用
systemctl status cups
3.2 定时任务安全管控
定时任务是黑客权限维持的常用载体,需严格管控定时任务的创建权限,定期排查异常任务。
# 1、限制允许使用crontab的用户,仅白名单用户可创建定时任务
echo "root" > /etc/cron.allow
echo "运维用户名" >> /etc/cron.allow
# 不在cron.allow中的用户,一律禁止使用crontab
# 2、定期排查所有定时任务,发现异常立即处置
# 查看系统级定时任务
ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/
# 查看所有用户的定时任务
cat /etc/passwd | cut -f1 -d: | xargs -I {} crontab -l -u {} 2>/dev/null
# 3、给定时任务配置文件添加不可变属性,防止黑客篡改
chattr +i /etc/crontab
chattr +i /etc/cron.allow
3.3 软件包与仓库安全加固
# 1、删除非官方、不可信的软件源,仅保留官方仓库
# CentOS/RHEL:查看仓库配置 ls /etc/yum.repos.d/
# Ubuntu/Debian:查看仓库配置 ls /etc/apt/sources.list.d/
# 2、配置官方源的HTTPS协议,防止源劫持
# Ubuntu/Debian示例:
sed -i 's/http://https://g' /etc/apt/sources.list
# 3、禁止内核版本自动更新,避免生产业务兼容性故障
# CentOS/RHEL:yum install -y yum-plugin-versionlock && yum versionlock kernel*
# Ubuntu/Debian:apt-mark hold linux-image-generic linux-headers-generic
# 4、定期清理无用的软件包与依赖,减少攻击面
# CentOS/RHEL:yum autoremove -y
# Ubuntu/Debian:apt autoremove -y
四、文件系统与权限安全加固
Linux 的一切皆文件,文件权限管控是系统安全的核心,黑客入侵后往往通过文件权限漏洞实现提权、持久化、数据窃取。
4.1 关键系统文件权限严格管控
# 1、核心账号配置文件权限加固
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /etc/group
chmod 600 /etc/gshadow
chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow
# 2、SSH配置文件权限加固
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
chown root:root /root/.ssh /root/.ssh/authorized_keys
chmod 600 /etc/ssh/sshd_config
chown root:root /etc/ssh/sshd_config
# 3、sudo配置文件权限加固
chmod 440 /etc/sudoers
chown root:root /etc/sudoers
# 4、全局查找全局可写的危险文件,排查权限漏洞
find / -type f -perm -0002 ! -type l -ls 2>/dev/null
# 全局查找SUID权限的可执行文件,排查提权风险点
find / -perm -4000 -type f -ls 2>/dev/null
4.2 敏感文件不可变属性锁定
通过 chattr 命令给核心配置文件添加不可变属性,即使是 root 用户,也无法修改、删除文件,防止黑客篡改系统配置、植入后门。
# 1、锁定核心账号配置文件,禁止账号新增、修改
chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow
# 2、锁定SSH与sudo配置文件,防止黑客修改认证规则
chattr +i /etc/ssh/sshd_config /etc/sudoers
# 3、锁定定时任务配置,防止黑客植入持久化后门
chattr +i /etc/crontab
# 4、查看文件的扩展属性,确认锁定生效
lsattr /etc/passwd
# 回滚方法:如需修改文件,先解除锁定 chattr -i 文件名
4.3 分区挂载安全加固
通过分区挂载参数,限制高危操作,防止缓冲区溢出、提权攻击,生产环境建议单独给 /boot、/home、/tmp、/var 分区,避免根目录占满导致业务故障,同时配置安全挂载参数。
# 1、修改/etc/fstab文件,配置分区安全挂载参数
vi /etc/fstab
# 核心加固参数示例:
# /tmp分区:禁止SUID、禁止设备文件、禁止可执行程序、禁止强制访问控制
/dev/sdb1 /tmp ext4 defaults,noexec,nosuid,nodev 0 0
# /var分区:禁止SUID、禁止设备文件
/dev/sdb2 /var ext4 defaults,nosuid,nodev 0 0
# /home分区:禁止SUID、禁止设备文件
/dev/sdb3 /home ext4 defaults,nosuid,nodev 0 0
# 2、重新挂载分区,使配置生效
mount -o remount /tmp
mount -o remount /var
mount -o remount /home
# 3、验证挂载参数是否生效
mount | grep /tmp
4.4 核心文件完整性监控
部署文件完整性监控工具,实时检测核心文件的修改行为,一旦出现非计划内的变更,立即触发告警,第一时间发现黑客的篡改行为。
# 1、安装AIDE文件完整性监控工具
# CentOS/RHEL:yum install -y aide
# Ubuntu/Debian:apt install -y aide
# 2、初始化AIDE数据库,生成系统文件基线
aide --init
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# 3、执行完整性检查,对比基线发现文件变更
aide --check
# 4、配置定时任务,每天凌晨自动执行检查,发送告警邮件
echo '0 0 * * * root /usr/sbin/aide --check | mail -s "服务器文件完整性告警" 运维邮箱地址' > /etc/cron.d/aide_check
五、网络与防火墙安全加固
网络层是阻断外部攻击的关键屏障,通过防火墙、内核参数加固,过滤恶意流量,防止端口扫描、DDoS 攻击、内网横向渗透。
5.1 防火墙规则精细化配置
根据业务实际需求,配置白名单规则,仅开放业务必需的端口,默认拒绝所有其他访问,这是网络防护的核心原则。
适配 CentOS/RHEL 系列(firewalld)
# 1、启动firewalld服务并设置开机自启
systemctl start firewalld
systemctl enable firewalld
# 2、配置默认规则:默认拒绝所有入站流量,允许所有出站流量
firewall-cmd --set-default-zone=drop
firewall-cmd --permanent --zone=drop --set-target=DROP
# 3、仅开放业务必需的端口,示例:
# 开放自定义SSH端口22345,仅允许内网网段访问
firewall-cmd --permanent --zone=drop --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22345" accept'
# 开放Web服务80、443端口,允许全网访问
firewall-cmd --permanent --zone=drop --add-port=80/tcp
firewall-cmd --permanent --zone=drop --add-port=443/tcp
# 开放数据库3306端口,仅允许业务服务器IP访问
firewall-cmd --permanent --zone=drop --add-rich-rule='rule family="ipv4" source address="172.16.1.10/32" port protocol="tcp" port="3306" accept'
# 4、重载防火墙规则,使配置生效
firewall-cmd --reload
# 5、验证防火墙规则是否生效
firewall-cmd --list-all
适配 Ubuntu/Debian 系列(ufw)
# 1、安装并启动ufw防火墙
apt install -y ufw
systemctl start ufw
systemctl enable ufw
# 2、配置默认规则
ufw default deny incoming
ufw default allow outgoing
# 3、开放业务必需的端口,示例:
# 自定义SSH端口22345,仅允许内网网段访问
ufw allow from 192.168.1.0/24 to any port 22345 proto tcp
# 开放Web服务80、443端口
ufw allow 80/tcp
ufw allow 443/tcp
# 开放数据库3306端口,仅允许业务服务器访问
ufw allow from 172.16.1.10/32 to any port 3306 proto tcp
# 4、启用防火墙并验证规则
ufw enable
ufw status verbose
5.2 内核网络参数安全加固
通过修改 /etc/sysctl.conf 内核参数,开启系统自带的网络防护能力,抵御 SYN 洪水、IP 欺骗、ICMP 攻击等常见网络攻击。
# 1、备份sysctl配置文件
cp /etc/sysctl.conf /etc/sysctl.conf.bak.$(date +%Y%m%d)
# 2、修改内核参数配置
vi /etc/sysctl.conf
# 新增/修改以下核心加固配置:
# 开启SYN Cookies,抵御SYN洪水攻击
net.ipv4.tcp_syncookies = 1
# 禁用IP源路由,防止IP欺骗
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 禁用ICMP重定向,防止路由劫持
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# 开启反向路径过滤,防止IP地址欺骗
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 禁用IP转发,非网关服务器必须关闭
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
# 忽略广播ICMP请求,防止Smurf攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 忽略所有ICMP请求,业务不需要时开启
# net.ipv4.icmp_echo_ignore_all = 1
# 开启TCP洪水攻击防护
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
# 开启地址空间布局随机化,抵御缓冲区溢出攻击
kernel.randomize_va_space = 2
# 3、使内核参数配置生效
sysctl -p
六、日志审计与入侵防御体系建设
6.1 日志全量审计与远程同步
本地日志可被黑客删除篡改,必须配置日志远程同步,将所有系统日志、认证日志、业务日志实时同步到不可篡改的远程日志平台,这是溯源攻击行为的核心根基。
# 1、配置rsyslog日志远程同步,将日志发送到远程日志服务器
vi /etc/rsyslog.conf
# 新增配置,将所有日志通过TCP协议发送到远程日志服务器192.168.1.200的514端口
*.* @@192.168.1.200:514
# 2、重启rsyslog服务生效
systemctl restart rsyslog
# 3、配置日志轮转,防止日志占满磁盘空间
vi /etc/logrotate.conf
# 核心配置:
rotate 30 # 保留30天的日志
daily # 每天轮转一次
compress # 压缩历史日志
missingok # 日志文件不存在不报错
notifempty # 空日志不轮转
6.2 系统操作行为全量审计
通过 auditd 审计服务,监控所有敏感操作,包括账号修改、文件篡改、命令执行、权限变更,所有操作都会被记录,即使黑客清理了 Shell 历史,也无法删除审计日志。
# 1、安装auditd审计服务
# CentOS/RHEL:yum install -y audit
# Ubuntu/Debian:apt install -y auditd audispd-plugins
# 2、启动服务并设置开机自启
systemctl start auditd
systemctl enable auditd
# 3、配置审计规则,监控核心敏感操作
vi /etc/audit/rules.d/audit.rules
# 新增核心审计规则:
# 监控账号配置文件修改
-w /etc/passwd -p wa -k passwd_modify
-w /etc/shadow -p wa -k shadow_modify
-w /etc/group -p wa -k group_modify
# 监控认证配置修改
-w /etc/ssh/sshd_config -p wa -k sshd_modify
-w /etc/sudoers -p wa -k sudo_modify
# 监控定时任务修改
-w /etc/crontab -p wa -k cron_modify
-w /etc/cron.d/ -p wa -k cron_dir_modify
# 监控root用户的命令执行
-a exit,always -F arch=b64 -F euid=0 -S execve -k root_exec
# 监控SUID提权操作
-a always,exit -F arch=b64 -S execve -F path=/usr/bin/su -k su_exec
-a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k sudo_exec
# 4、重载审计规则生效
augenrules --load
# 5、查看审计日志,排查异常操作
ausearch -k passwd_modify
ausearch -k sshd_modify
6.3 入侵防御工具部署
1、 部署 fail2ban,自动封禁暴力破解 IP:监控 SSH、Web 服务的登录失败日志,连续多次失败后自动封禁 IP,杜绝暴力破解攻击。
2、 部署 rkhunter 与 chkrootkit,定期检测 rootkit 后门:每周执行一次全盘扫描,检测黑客植入的 rootkit、后门程序。
3、 部署 ClamAV 开源杀毒软件,定期扫描恶意文件:配置定时任务,每天凌晨扫描 Web 目录、临时目录,查杀 WebShell、恶意程序。
七、持续运营与应急响应
安全加固不是一次性操作,而是持续的运营过程,需建立完整的基线检查、漏洞管理、应急响应机制:
1、 每月执行一次系统安全基线检查,对比加固基线,发现配置偏移立即修复
2、 每周执行一次系统漏洞扫描,及时安装系统与软件的安全补丁,高危漏洞需 24 小时内完成修复
3、 每天审计系统日志与告警信息,发现异常登录、文件修改、端口扫描行为,立即启动应急排查
4、 定期备份核心配置文件与业务数据,制定完整的应急响应预案,发生入侵事件时可快速隔离、溯源、恢复业务
结尾
Linux 服务器安全加固的核心,是构建 “事前预防、事中阻断、事后溯源” 的完整防护体系。没有绝对安全的系统,但通过最小权限、纵深防御、持续审计的加固思路,可最大程度提升服务器的抗入侵能力,将黑客攻击的成本提升到最高,攻击成功率降到最低。

















