Linux服务器是等保测评中最核心的被测对象之一,承载着业务系统、数据库、中间件等关键组件。本文以CentOS 7/8、Ubuntu 20.04/22.04为例,从等保2.0三级要求出发,逐一拆解六大测评维度的实操方法,含完整命令和判定标准,测评师可直接对照执行。
一、身份鉴别
1.1 测评标准
依据GB/T 22239-2019第8.1.4.1条,Linux服务器应满足:
1.2 实测命令与操作步骤
(1)检查密码复杂度策略
# 查看密码复杂度配置(CentOS/RHEL)
cat /etc/security/pwquality.conf
# 关键参数核查:
# minlen = 8 密码最小长度,要求≥8
# minclass = 3 字符类型数量,要求≥3(大写/小写/数字/特殊字符)
# dcredit = -1 至少1个数字
# ucredit = -1 至少1个大写字母
# lcredit = -1 至少1个小写字母
# ocredit = -1 至少1个特殊字符
# remember = 5 记住最近5次密码,禁止重复使用
# Ubuntu系统
cat /etc/pam.d/common-password | grep pam_pwquality
cat /etc/security/pwquality.conf
(2)检查密码有效期策略
# 查看全局密码有效期配置
cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE"
# 要求:
# PASS_MAX_DAYS 90 密码最长有效期≤90天
# PASS_MIN_DAYS 1 密码最短使用期≥1天(防止频繁修改)
# PASS_WARN_AGE 7 到期前7天提醒
# 查看指定用户的密码有效期
chage -l username
# 查看所有用户密码状态
awk -F: '{print $1}' /etc/passwd | xargs -I{} chage -l {} 2>/dev/null
(3)检查登录失败锁定机制
# CentOS/RHEL 检查PAM配置
cat /etc/pam.d/system-auth | grep pam_tally2
cat /etc/pam.d/password-auth | grep pam_tally2
# 或新版本使用pam_faillock
cat /etc/pam.d/system-auth | grep pam_faillock
cat /etc/security/faillock.conf
# 关键参数:
# deny = 5 连续失败5次锁定,要求≤5
# unlock_time = 1800 锁定时间1800秒(30分钟),要求≥1800
# even_deny_root root账户同样受限
# Ubuntu检查
cat /etc/pam.d/common-auth | grep pam_faillock
(4)检查双因素认证
# 检查SSH是否启用双因素(密码+密钥)
cat /etc/ssh/sshd_config | grep -E "PubkeyAuthentication|PasswordAuthentication|AuthenticationMethods"
# 双因素配置示例(密码+密钥):
# PubkeyAuthentication yes
# PasswordAuthentication yes
# AuthenticationMethods publickey,password
# 检查Google Authenticator(TOTP)
cat /etc/pam.d/sshd | grep google_authenticator
ls -la /home/*/.google_authenticator 2>/dev/null
(5)检查禁止明文传输
# 检查SSH配置(禁止Telnet)
systemctl status telnet 2>/dev/null
systemctl status telnetd 2>/dev/null
# 检查SSH协议版本
cat /etc/ssh/sshd_config | grep Protocol
# 要求:Protocol 2(禁止Protocol 1)
# 检查SSH加密算法
cat /etc/ssh/sshd_config | grep -E "Ciphers|MACs|KexAlgorithms"
1.3 合格判定标准
- ✅ 合格:密码长度≥8位,字符类型≥3类,有效期≤90天,连续失败≥3次锁定,锁定时间≥30分钟,启用双因素认证,禁止Telnet明文登录
- ❌ 不合格:密码策略未配置或过弱,无密码有效期限制,无登录失败锁定,仅单因素认证,Telnet服务开启
二、访问控制
2.1 测评标准
依据GB/T 22239-2019第8.1.4.2条,Linux服务器应满足:
- 实现自主访问控制(DAC)和强制访问控制(MAC)
2.2 实测命令与操作步骤
(1)检查账户管理
# 查看所有可登录账户
cat /etc/passwd | grep -v nologin | grep -v false | grep -v halt | grep -v sync
# 检查UID=0的账户(超级权限)
awk -F: '$3==0{print $1}' /etc/passwd
# 要求:仅root账户UID=0
# 检查空密码账户
awk -F: '($2==""){print $1}' /etc/shadow
# 要求:无空密码账户
# 检查是否存在多余账户(测试/演示账户)
cat /etc/passwd | awk -F: '{print $1}' | sort
(2)检查sudo权限配置
# 查看sudoers配置
cat /etc/sudoers
cat /etc/sudoers.d/*
# 高风险配置(应避免):
# username ALL=(ALL) NOPASSWD: ALL # 无需密码执行所有命令
# %wheel ALL=(ALL) ALL # wheel组所有成员可执行所有命令
# 正确配置示例(最小权限):
# appuser ALL=(ALL) /usr/bin/systemctl restart nginx # 仅允许重启nginx
(3)检查重要文件权限
# 检查关键文件权限
ls -la /etc/passwd # 应为 644
ls -la /etc/shadow # 应为 000 或 400(仅root可读)
ls -la /etc/group # 应为 644
ls -la /etc/sudoers # 应为 440
# 检查SUID/SGID文件(潜在提权风险)
find / -perm -4000 -type f 2>/dev/null | head -20
find / -perm -2000 -type f 2>/dev/null | head -20
# 检查全局可写文件(高风险)
find / -perm -0002 -type f -not -path "/proc/*" 2>/dev/null | head -20
(4)检查强制访问控制(MAC)
# 检查SELinux状态(CentOS/RHEL)
getenforce
sestatus
# 要求:Enforcing(强制模式)
# Permissive 为宽松模式(不合格)
# Disabled 为关闭(不合格)
# 检查AppArmor状态(Ubuntu)
aa-status
systemctl status apparmor
2.3 合格判定标准
- ✅ 合格:仅root账户UID=0,无空密码账户,sudo权限按最小化配置,关键文件权限正确,SELinux/AppArmor处于Enforcing模式
- ❌ 不合格:存在多个UID=0账户、空密码账户、sudo配置过于宽松(NOPASSWD:ALL)、SELinux关闭或宽松模式
三、安全审计
3.1 测评标准
依据GB/T 22239-2019第8.1.4.3条,Linux服务器应满足:
3.2 实测命令与操作步骤
(1)检查auditd审计服务
# 检查auditd服务状态
systemctl status auditd
# 检查auditd配置
cat /etc/audit/auditd.conf | grep -E "log_file|max_log_file|num_logs|max_log_file_action"
# 关键参数:
# log_file = /var/log/audit/audit.log
# max_log_file = 100 单个日志文件最大100MB
# num_logs = 10 保留10个轮转文件
# max_log_file_action = ROTATE 日志满后轮转
(2)检查审计规则配置
# 查看当前审计规则
auditctl -l
# 检查审计规则文件
cat /etc/audit/rules.d/*.rules
cat /etc/audit/audit.rules
# 必须审计的关键事件:
# 1. 用户登录/登出
# 2. sudo操作
# 3. 文件权限变更
# 4. 账户管理操作
# 5. 系统调用(setuid/setgid)
# 示例:检查是否审计/etc/passwd修改
auditctl -l | grep passwd
# 应有类似:-w /etc/passwd -p wa -k identity
# 检查是否审计sudo
auditctl -l | grep sudo
(3)检查日志留存时间
# 查看审计日志文件
ls -lh /var/log/audit/
# 检查最早日志时间
ls -lt /var/log/audit/ | tail -5
# 检查系统日志留存
cat /etc/logrotate.d/syslog
cat /etc/logrotate.conf | grep rotate
# 计算日志保留天数
# num_logs × max_log_file = 总存储量
# 需确保覆盖≥180天
# 检查日志是否转发到集中日志服务器
cat /etc/rsyslog.conf | grep -E "@@|@[0-9]"
cat /etc/rsyslog.d/*.conf | grep -E "@@|@[0-9]"
(4)检查审计日志防篡改
# 检查审计日志文件权限
ls -la /var/log/audit/audit.log
# 应为:-rw------- root root(仅root可读写)
# 检查普通用户是否可修改审计日志
sudo -u testuser rm /var/log/audit/audit.log 2>&1
# 应提示权限拒绝
# 检查日志完整性(使用aide)
aide --check 2>/dev/null | head -20
3.3 合格判定标准
- ✅ 合格:auditd服务运行正常,审计规则覆盖关键操作(账户/权限/文件/sudo),日志保存≥180天,日志文件权限仅root可写,有集中日志服务器
- ❌ 不合格:auditd未启动,审计规则为空或不完整,日志留存不足6个月,普通用户可修改审计日志
四、入侵防范
4.1 测评标准
依据GB/T 22239-2019第8.1.4.4条,Linux服务器应满足:
4.2 实测命令与操作步骤
(1)检查最小化安装——关闭不必要的服务
# 查看所有运行中的服务
systemctl list-units --type=service --state=running
# 检查高风险服务是否关闭
systemctl status telnet 2>/dev/null
systemctl status rsh 2>/dev/null
systemctl status rlogin 2>/dev/null
systemctl status finger 2>/dev/null
systemctl status tftp 2>/dev/null
systemctl status sendmail 2>/dev/null
systemctl status cups 2>/dev/null # 打印服务(服务器不需要)
systemctl status avahi-daemon 2>/dev/null # mDNS服务(服务器不需要)
# 应关闭的服务清单:
# ✗ telnet/rsh/rlogin(明文传输)
# ✗ tftp(无认证文件传输)
# ✗ finger(用户信息泄露)
# ✗ cups(打印服务,服务器不需要)
# ✗ avahi-daemon(mDNS,服务器不需要)
(2)检查开放端口
# 查看所有监听端口
ss -tulnp
netstat -tulnp
# 检查高风险端口
ss -tulnp | grep -E ":23|:21|:69|:512|:513|:514"
# 23=Telnet, 21=FTP, 69=TFTP, 512-514=rsh/rlogin/rexec
# 检查SSH端口配置
cat /etc/ssh/sshd_config | grep Port
# 建议:修改默认22端口为非标准端口
(3)检查SSH安全配置
# 检查SSH关键安全配置
cat /etc/ssh/sshd_config | grep -E "PermitRootLogin|PermitEmptyPasswords|X11Forwarding|MaxAuthTries|LoginGraceTime|AllowUsers|DenyUsers"
# 要求:
# PermitRootLogin no 禁止root直接SSH登录
# PermitEmptyPasswords no 禁止空密码登录
# X11Forwarding no 关闭X11转发
# MaxAuthTries 3 最大认证尝试次数≤5
# LoginGraceTime 60 登录超时60秒
# Protocol 2 仅使用SSH2协议
(4)检查防火墙配置
# 检查firewalld状态(CentOS/RHEL)
systemctl status firewalld
firewall-cmd --list-all
# 检查iptables规则
iptables -L -n -v | head -50
# 检查ufw状态(Ubuntu)
ufw status verbose
# 核查要点:
# 1. 防火墙是否启用
# 2. 默认策略是否为DROP/REJECT
# 3. 仅开放业务必需端口
# 4. 管理端口(SSH)是否限定来源IP
(5)检查入侵检测
# 检查AIDE(文件完整性检测)
aide --check 2>/dev/null | head -30
cat /etc/aide.conf | head -20
# 检查fail2ban(暴力破解防护)
systemctl status fail2ban
fail2ban-client status
fail2ban-client status sshd
# 检查rootkit扫描工具
rkhunter --check --skip-keypress 2>/dev/null | tail -20
chkrootkit 2>/dev/null | grep INFECTED
4.3 合格判定标准
- ✅ 合格:无多余服务和端口,SSH禁止root直接登录,防火墙启用且默认拒绝,部署AIDE文件完整性检测,fail2ban防暴力破解
- ❌ 不合格:Telnet/FTP等高风险服务开启,SSH允许root直接登录,防火墙未启用,无入侵检测机制
五、数据安全
5.1 测评标准
依据GB/T 22239-2019第8.1.4.5条,Linux服务器应满足:
5.2 实测命令与操作步骤
(1)检查数据传输加密
# 检查SSH加密算法配置
cat /etc/ssh/sshd_config | grep -E "Ciphers|MACs|KexAlgorithms"
# 推荐加密套件(强加密):
# Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr
# MACs hmac-sha2-512,hmac-sha2-256
# KexAlgorithms curve25519-sha256,diffie-hellman-group14-sha256
# 检查是否禁用弱加密算法
ssh -Q cipher | grep -E "3des|arcfour|blowfish"
# 以上弱算法应不在支持列表中
(2)检查磁盘/文件系统加密
# 检查LUKS加密
lsblk -f | grep crypto_LUKS
cryptsetup status /dev/mapper/luks-* 2>/dev/null
# 检查加密挂载点
cat /etc/crypttab
# 检查敏感目录是否加密
# 如:/home、/var/lib/mysql、/data等
mount | grep -E "ecryptfs|fscrypt|luks"
(3)检查数据备份机制
# 检查备份脚本和计划任务
crontab -l
cat /etc/cron.d/*
ls -la /etc/cron.daily/ /etc/cron.weekly/
# 检查备份工具
which rsync bacula amanda duplicity 2>/dev/null
# 检查最近备份记录
ls -lht /backup/ 2>/dev/null | head -10
ls -lht /opt/backup/ 2>/dev/null | head -10
# 核查备份策略:
# 1. 备份频率:全量≥1次/周,增量≥1次/天
# 2. 备份保留:≥30天
# 3. 备份位置:异机/异地存放
# 4. 备份加密:备份文件是否加密
# 5. 恢复测试:是否有定期恢复演练记录
(4)检查敏感数据保护
# 检查配置文件中是否存在明文密码
grep -rn "password\s*=" /etc/ 2>/dev/null | grep -v "#" | head -20
grep -rn "passwd\s*=" /etc/ 2>/dev/null | grep -v "#" | head -20
# 检查私钥文件权限
find /home -name "*.pem" -o -name "*.key" -o -name "id_rsa" 2>/dev/null | xargs ls -la 2>/dev/null
# 私钥文件权限应为600,仅所有者可读写
5.3 合格判定标准
- ✅ 合格:SSH使用强加密算法,重要数据目录启用加密,有完整备份策略(频率+保留+异地),配置文件无明文密码,私钥文件权限600
- ❌ 不合格:SSH使用弱加密算法(3DES/RC4),无磁盘加密,无备份策略或备份未异地存放,配置文件存在明文密码
六、恶意代码防范
6.1 测评标准
依据GB/T 22239-2019第8.1.4.6条,Linux服务器应满足:
6.2 实测命令与操作步骤
(1)检查防病毒软件部署
# 检查ClamAV
rpm -qa | grep clamav
dpkg -l | grep clamav
systemctl status clamav-daemon
systemctl status clamav-freshclam
# 检查商业安全软件
rpm -qa | grep -iE "sophos|trendmicro|mcafee|symantec|360|qianxin|sangfor"
# 检查奇安信/深信服等国产安全软件
ps aux | grep -iE "qax|sangfor|360|tianqing"
(2)检查病毒库更新时间
# ClamAV病毒库更新时间
stat /var/lib/clamav/main.cvd | grep Modify
stat /var/lib/clamav/daily.cvd | grep Modify
# 要求:最后更新时间距今≤7天
# 检查自动更新配置
cat /etc/clamav/freshclam.conf | grep -E "Checks|UpdateLogFile"
systemctl status clamav-freshclam
# 手动触发更新测试
freshclam --verbose 2>&1 | tail -10
(3)检查定期扫描计划
# 检查定期扫描任务
crontab -l | grep -iE "clamscan|scan"
cat /etc/cron.d/* | grep -iE "clamscan|scan"
# 查看最近扫描记录
cat /var/log/clamav/clamav.log | tail -30
# 手动执行快速扫描(测评时验证)
clamscan -r /tmp --quiet --infected 2>/dev/null
(4)检查系统完整性
# 检查AIDE文件完整性监控
rpm -qa | grep aide
dpkg -l | grep aide
aide --check 2>/dev/null | grep -E "changed|added|removed" | head -20
# 检查rkhunter(rootkit检测)
rkhunter --version 2>/dev/null
cat /var/log/rkhunter.log | grep -E "Warning|Found" | tail -20
# 检查chkrootkit
chkrootkit 2>/dev/null | grep -v "not found\|not infected" | head -20
6.3 合格判定标准
- ✅ 合格:部署防病毒软件(ClamAV或商业软件),病毒库更新≤7天,配置定期自动扫描,部署AIDE文件完整性监控,有rkhunter/chkrootkit等rootkit检测工具
- ❌ 不合格:未部署防病毒软件,病毒库过期超过7天,无定期扫描计划,无文件完整性监控
📋 Linux服务器等保三级测评快速核查表
| | | |
|---|
| | cat /etc/security/pwquality.conf | |
| | cat /etc/login.defs | |
| | cat /etc/pam.d/system-auth | |
| | cat /etc/ssh/sshd_config | |
| | awk -F: '$3==0' /etc/passwd | |
| | awk -F: '($2=="")' /etc/shadow | |
| | cat /etc/sudoers | |
| | getenforce | |
| | systemctl status auditd | |
| | auditctl -l | |
| | ls -lh /var/log/audit/ | |
| | systemctl status telnet | |
| | grep PermitRootLogin /etc/ssh/sshd_config | |
| | systemctl status firewalld | |
| | cat /etc/ssh/sshd_config | grep Ciphers | |
| | crontab -l | |
| | systemctl status clamav-daemon | |