网络安全等级保护测评 - Linux篇

1. 身份鉴别

1.1 身份标识和鉴别

测评要求: 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。

测评方法

询问并验证管理员采用什么方法登录服务器(通过情况下都是用户名+口令),并记录口令的长度是否满足8位以及是否由大小写、字母、特殊符号组成,并定期更换。

检查步骤

步骤1: 检查账户唯一性

1
2
3
4
5
# 查看/etc/passwd文件,检查是否有同名账户存在,各账户UID是否唯一
cat /etc/passwd | awk -F: '{print $1, $3}' | sort -k2 -n

# 检查重复UID
cat /etc/passwd | awk -F: '{print $3}' | sort -n | uniq -d

步骤2: 检查密码策略配置

1
2
# 查看/etc/login.defs文件中的口令长度及更换周期
cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE|PASS_MIN_LEN"

配置参数说明:

  • PASS_MAX_DAYS XX: 密码最大有效期(天)
  • PASS_MIN_DAYS XX: 密码最小有效期(天)
  • PASS_WARN_AGE XX: 密码过期前警告天数
  • PASS_MIN_LEN XX: 密码最小长度

步骤3: 检查密码复杂度要求

1
2
# 查看/etc/pam.d/system-auth文件,口令复杂度要求配置
cat /etc/pam.d/system-auth | grep pam_cracklib

配置示例:

1
password requisite pam_cracklib.so minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

参数说明:

  • minlen=N: 定义用户密码的最小长度
  • dcredit=N: 数字(N为负数表示至少需要N个数字)
  • ucredit=N: 大写字母(N为负数表示至少需要N个大写字母)
  • lcredit=N: 小写字母(N为负数表示至少需要N个小写字母)
  • ocredit=N: 特殊字符(N为负数表示至少需要N个特殊字符)

注意: ocredit(特殊字符)的值是2的时候,就代表有最多有2个特殊字符的长度额外能加1。!/*表示账号被禁用。

配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 编辑密码策略配置文件
vim /etc/login.defs

# 设置密码策略
PASS_MAX_DAYS 90 # 密码最大有效期90天
PASS_MIN_DAYS 0 # 密码最小有效期0天
PASS_WARN_AGE 7 # 密码过期前7天警告
PASS_MIN_LEN 8 # 密码最小长度8位

# 编辑PAM配置文件
vim /etc/pam.d/system-auth

# 添加密码复杂度要求
password requisite pam_cracklib.so try_first_pass retry=3 type= \
minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

1.2 登录失败处理

测评要求: 应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施。

测评方法

步骤1: 检查登录失败锁定配置

1
2
# 查看/etc/pam.d/sshd文件中是否包含登录失败锁定配置
cat /etc/pam.d/sshd | grep pam_tally2

配置示例:

1
auth required pam_tally2.so deny=5 unlock_time=600 even_deny_root root_unlock_time=600

参数说明:

  • deny=X: 连续失败X次后锁定账户
  • unlock_time=XXX: 锁定时间(秒)
  • even_deny_root: 锁定root账户
  • root_unlock_time=XXX: root账户锁定时间(秒)

重要提示:

  1. 登录失败参数一定要写在配置文件内#%PAM-1.0的下面(即第二行),如果写在后面,虽然用户被锁定,但是只要用户输入正确的密码,还是可以登录的!
  2. 通过ssh远程连接服务器时是在pam.d/sshd文件里进行设置,如果本机登录服务器是在pam.d/login或者pam.d/system-auth里进行设置。

步骤2: 检查会话超时配置

1
2
# 查看/etc/profile文件,是否配置超时自动断开连接功能
cat /etc/profile | grep TMOUT

配置示例:

1
2
3
# 设置超时时间为600秒(10分钟)
TMOUT=600
export TMOUT

配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 编辑SSH PAM配置
vim /etc/pam.d/sshd

# 在文件开头添加(必须在#%PAM-1.0下面)
#%PAM-1.0
auth required pam_tally2.so deny=5 unlock_time=600 even_deny_root root_unlock_time=600
account required pam_tally2.so

# 编辑系统配置文件
vim /etc/profile

# 添加超时配置
TMOUT=600
export TMOUT

# 使配置生效
source /etc/profile

1.3 远程管理加密

测评要求: 当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听。

测评方法

首先询问管理员是否远程管理服务器,若只是本地管理此项不适用。

步骤1: 检查SSH服务

1
2
3
4
5
6
7
8
9
# 检查是否运行了sshd服务
service sshd status
# 或
systemctl status sshd

# 检查SSH端口
netstat -an | grep :22
# 或
ss -lntup | grep :22

说明: 使用SSH的方式进行远程管理,SSH采用的是加密连接,可以将鉴别信息进行加密处理。

步骤2: 检查Telnet服务

1
2
3
# 查看是否开启Telnet服务
ps -ef | grep telnet
netstat -an | grep :23

说明: 若采用的是Telnet方式传输则判定为不符合,Telnet使用的是明文传输。

步骤3: 检查FTP服务

1
2
3
# 查看是否启用FTP服务
ps -ef | grep ftp
netstat -an | grep :21

说明: 若采用FTP服务同样判定为不符合,FTP使用明文传输。

安全配置建议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 禁用Telnet服务
systemctl stop telnet
systemctl disable telnet

# 禁用FTP服务(如果不需要)
systemctl stop vsftpd
systemctl disable vsftpd

# 确保SSH服务启用
systemctl enable sshd
systemctl start sshd

# 配置SSH安全选项
vim /etc/ssh/sshd_config

# 禁用密码登录,仅允许密钥登录
PasswordAuthentication no
PubkeyAuthentication yes

# 禁用root登录
PermitRootLogin no

1.4 双因子鉴别

测评要求: 应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。

测评方法

询问管理员并查看登录操作系统时,是否采用双因子鉴别,且其中一种必须为密码技术(大多数情况下业主此项都是不符合的)。

注意: 若服务器仅能通过堡垒机等第三方运维工具登录,在堡垒机采用了双因子,而服务器未采用双因子的情况下则此项同样符合。

双因子鉴别方案

方案1: SSH密钥 + 密码

1
2
3
4
5
6
# 配置SSH同时要求密钥和密码
vim /etc/ssh/sshd_config

PubkeyAuthentication yes
PasswordAuthentication yes
AuthenticationMethods publickey,password

方案2: 使用堡垒机

  • 部署堡垒机系统
  • 配置双因子认证(密码 + 动态令牌/短信验证码)
  • 所有服务器登录必须通过堡垒机

方案3: 使用第三方认证系统

  • LDAP + OTP(一次性密码)
  • RADIUS + 动态令牌
  • 生物识别 + 密码

2. 访问控制

2.1 账户和权限分配

测评要求: 应对登录的用户分配账户和权限。

测评方法

步骤1: 检查默认账户

1
2
3
4
5
# 使用管理员权限的身份登录Linux,查看/etc/shadow文件
cat /etc/shadow

# 检查是否删除或禁用了以下默认的、无用的账户:
# adm、lp、sync、shutdown、halt、mail、uucp、operator、games、gopher、ftp等

禁用无用账户:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 锁定无用账户
usermod -L adm
usermod -L lp
usermod -L sync
usermod -L shutdown
usermod -L halt
usermod -L mail
usermod -L uucp
usermod -L operator
usermod -L games
usermod -L gopher
usermod -L ftp

# 或删除账户
userdel -r adm
userdel -r lp
# ... 其他账户

步骤2: 检查root远程登录

1
2
# 查看/etc/ssh/sshd_config文件,root账户是否能够进行远程登录
cat /etc/ssh/sshd_config | grep PermitRootLogin

配置要求: PermitRootLogin no

注意: 此项基本上是默认符合。

2.2 默认账户处理

测评要求: 应重命名或删除默认账户,修改默认账户的默认口令。

测评方法

查看linux系统的默认账户root是否重命名和修改默认口令。

注意: 通过情况下root是不能重命名的,若修改的口令为强口令,并包含大小写字母、数字的特殊符号,并定期更换的情况下是可以判断为符合,否则就为部分符合或是不符合。

安全建议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 修改root密码为强密码
passwd root

# 创建具有sudo权限的管理员账户(替代root)
useradd -m -s /bin/bash admin
passwd admin

# 配置sudo权限
visudo
# 添加以下内容
admin ALL=(ALL) ALL

# 禁用root登录
vim /etc/ssh/sshd_config
PermitRootLogin no

2.3 账户清理

测评要求: 应及时删除或停用多余的、过期的账户,避免共享账户的存在。

测评方法

  1. 访问系统管理员,操作系统平时有哪些人员涉及登录使用
  2. 查看/etc/shadow文件,查看系统中的账户与实际人员能否对应,是否存在开放状态但未使用的账户

检查步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看所有账户
cat /etc/passwd

# 查看账户登录状态
lastlog

# 查看账户最后登录时间
last

# 锁定不使用的账户
usermod -L username

# 删除不需要的账户
userdel -r username

2.4 权限分离

测评要求: 应授予管理用户所需的最小权限,实现管理用户的权限分离。

测评方法

  1. 了解实际情况中存在哪些管理人员
  2. 查看/etc/shadow文件中的开放账户,是否做到了与实际人员一一对应
  3. 除root外至少要建立审计账户

注意: 此项要求实现”三权分立”,所以必须除系统管理员外设置审计管理员,否则就判为不符合。

三权分立配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 创建系统管理员账户
useradd -m -s /bin/bash sysadmin
passwd sysadmin

# 创建审计管理员账户
useradd -m -s /bin/bash auditadmin
passwd auditadmin

# 创建安全管理员账户
useradd -m -s /bin/bash secadmin
passwd secadmin

# 配置sudo权限
visudo

# 系统管理员权限
sysadmin ALL=(ALL) ALL

# 审计管理员权限(仅审计相关)
auditadmin ALL=(ALL) NOPASSWD: /usr/bin/ausearch, /usr/bin/aureport, /usr/bin/auditctl

# 安全管理员权限(仅安全相关)
secadmin ALL=(ALL) NOPASSWD: /usr/bin/firewall-cmd, /usr/sbin/iptables

2.5 访问控制策略

测评要求: 应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则。

测评方法

询问管理员系统是由谁来配置访问控制策略的,并查看一些重要文件配置的权限是否合理。

检查重要文件权限:

1
2
3
4
5
# 检查重要文件权限
ls -l /etc/shadow
ls -l /var/log/messages
ls -l /var/log/secure
ls -l /var/log/audit/audit.log

合理权限设置:

1
2
3
4
5
6
7
8
9
10
11
# /etc/shadow应该只有root可读
chmod 000 /etc/shadow
chown root:root /etc/shadow

# 日志文件应该只有root可写
chmod 640 /var/log/messages
chown root:root /var/log/messages

# 审计日志应该只有root可访问
chmod 600 /var/log/audit/audit.log
chown root:root /var/log/audit/audit.log

注意: 通常情况下linux系统是由root来配置的。

2.6 访问控制粒度

测评要求: 访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级。

测评方法

使用ls -l 文件名命令,查看重要文件和目录权限设置是否合理。

1
2
3
4
5
6
7
8
9
10
# 检查重要文件权限
ls -l /etc/passwd
ls -l /etc/shadow
ls -l /etc/sudoers
ls -l /etc/ssh/sshd_config

# 检查目录权限
ls -ld /etc
ls -ld /var/log
ls -ld /root

合理权限示例:

1
2
3
4
5
6
7
8
9
10
11
# /etc/passwd: 644
-rw-r--r-- 1 root root /etc/passwd

# /etc/shadow: 000
---------- 1 root root /etc/shadow

# /etc/sudoers: 440
-r--r----- 1 root root /etc/sudoers

# /root: 700
drwx------ 1 root root /root

2.7 安全标记

测评要求: 应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。

测评方法

  1. 访谈管理员,明确系统中是否包含有敏感信息;若不含有则为不适用
  2. 是否采用第三方主机加固产品进行了安全标记的设置

注意: 第三方主机加固软件有椒图、网盾、中超伟业等。

SELinux安全标记

1
2
3
4
5
6
7
8
9
10
11
12
13
# 检查SELinux状态
getenforce

# 启用SELinux
setenforce 1
vim /etc/selinux/config
SELINUX=enforcing

# 查看文件安全上下文
ls -Z /etc/passwd

# 设置文件安全上下文
chcon -t shadow_t /etc/shadow

3. 安全审计

3.1 启用安全审计

测评要求: 应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计。

测评方法

步骤1: 检查审计服务状态

1
2
3
4
5
6
7
8
9
# 检查auditd服务状态
service auditd status
# 或
systemctl status auditd

# 检查rsyslog服务状态
service rsyslog status
# 或
systemctl status rsyslog

步骤2: 检查审计配置

1
2
3
4
5
# 查看rsyslog配置
cat /etc/rsyslog.conf

# 查看audit审计规则
cat /etc/audit/audit.rules

步骤3: 检查第三方审计工具

若未开启系统安全审计功能,则确认是否部署了第三方安全审计工具,并进行相应的核查。

配置审计服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 启用auditd服务
systemctl enable auditd
systemctl start auditd

# 配置审计规则
vim /etc/audit/audit.rules

# 审计所有系统调用
-a always,exit -F arch=b64 -S all -F auid>=1000 -F auid!=4294967295 -k all

# 审计文件删除
-w /usr/bin/rm -p x -k delete
-w /usr/bin/unlink -p x -k delete

# 审计用户登录
-w /var/log/faillog -p wa -k logins
-w /var/log/lastlog -p wa -k logins
-w /var/run/utmp -p wa -k session

# 审计sudo使用
-w /usr/bin/sudo -p x -k sudo

# 重启审计服务
service auditd restart

3.2 审计记录内容

测评要求: 审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息。

测评方法

使用管理员权限的身份登录Linux,通过命令查看审计日志:

1
2
3
4
5
6
7
8
9
10
11
# 查看审计日志
cat /var/log/audit/audit.log | head -n 2

# 查看最近的审计记录
tail -n 20 /var/log/audit/audit.log

# 查看特定用户的审计记录
ausearch -ua username

# 查看特定时间的审计记录
ausearch -ts 2023-01-01 -te 2023-01-02

审计日志格式示例:

1
type=USER_AUTH msg=audit(1234567890.123:456): pid=1234 uid=0 auid=1000 ses=1 msg='op=PAM:authentication acct="root" exe="/usr/sbin/sshd" hostname=192.168.1.100 addr=192.168.1.100 terminal=ssh res=success'

3.3 审计记录保护

测评要求: 应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等。

测评方法

询问管理员是否对审计记录保护,并定期备份,备份在哪里,并且日志记录保存时间是否大于6个月。

审计日志保护配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 设置审计日志权限
chmod 600 /var/log/audit/audit.log
chown root:root /var/log/audit/audit.log

# 配置日志轮转
vim /etc/audit/auditd.conf

# 设置日志保留时间(天)
max_log_file_action = ROTATE
num_logs = 180 # 保留180天(6个月)

# 配置日志轮转
vim /etc/logrotate.d/audit

/var/log/audit/*.log {
daily
rotate 180
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/sbin/service auditd restart >/dev/null 2>&1 || true
endscript
}

3.4 审计进程保护

测评要求: 应对审计进程进行保护,防止未经授权的中断。

测评方法

切换开放状态的账户(非root账户)进行测试,看能否中断审计、日志服务:

1
2
3
# 测试非root用户能否停止审计服务
service auditd stop
service rsyslog stop

检查审计相关文件权限:

1
2
3
4
ls -l /var/log/messages
ls -l /var/log/secure
ls -l /var/log/audit/audit.log
ls -l /etc/audit/auditd.conf

保护配置

1
2
3
4
5
6
7
8
9
10
11
# 设置审计配置文件权限
chmod 600 /etc/audit/auditd.conf
chown root:root /etc/audit/auditd.conf

# 设置审计规则文件权限
chmod 600 /etc/audit/audit.rules
chown root:root /etc/audit/audit.rules

# 使用chattr设置不可变属性(谨慎使用)
chattr +i /etc/audit/auditd.conf
chattr +i /etc/audit/audit.rules

4. 入侵防范

4.1 最小安装原则

测评要求: 应遵循最小安装的原则,仅安装需要的组件和应用程序。

测评方法

通过命令查看操作系统中已安装的程序包,询问是否有目前不需要的组件和应用程序:

1
2
3
4
5
6
7
8
# 查看已安装的软件包
yum list installed

# 查看已安装的服务
systemctl list-unit-files --type=service --state=enabled

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

清理不需要的软件

1
2
3
4
5
6
# 卸载不需要的软件包
yum remove package_name

# 卸载不需要的服务
systemctl disable service_name
systemctl stop service_name

4.2 关闭不需要的服务

测评要求: 应关闭不需要的系统服务、默认共享和高危端口。

测评方法

步骤1: 检查运行的服务

1
2
3
4
5
# 使用管理员权限的身份登录Linux,查看运行的服务
service --status-all | grep running

# 或使用systemctl
systemctl list-units --type=service --state=running

步骤2: 检查高危端口

1
2
3
4
5
6
7
8
9
10
11
12
# 检查21(FTP)、23(Telnet)端口的运行情况
netstat -an | grep :21
netstat -an | grep :23
# 或
lsof -i:21
lsof -i:22
lsof -i:23

# 查看所有监听端口
netstat -tunlp
# 或
netstat -ntlp

关闭高危服务

1
2
3
4
5
6
7
8
9
10
11
# 关闭Telnet服务
systemctl stop telnet
systemctl disable telnet

# 关闭FTP服务(如果不需要)
systemctl stop vsftpd
systemctl disable vsftpd

# 关闭不需要的服务
systemctl stop service_name
systemctl disable service_name

4.3 管理终端限制

测评要求: 应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制。

测评方法

步骤1: 检查TCP Wrappers配置

1
2
3
# 使用管理员权限的身份登录Linux,查看/etc/hosts.deny与/etc/hosts.allow
cat /etc/hosts.deny
cat /etc/hosts.allow

步骤2: 检查SSH访问限制

1
2
# 查看SSH配置
cat /etc/ssh/sshd_config | grep -E "AllowUsers|DenyUsers|AllowGroups|DenyGroups"

步骤3: 询问网络层面限制

可以通过询问的方式,看在网络层面有没有限制特定网段才能远程操作系统。

配置访问限制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 配置TCP Wrappers
vim /etc/hosts.allow

# 允许特定网段SSH访问
sshd: 192.168.1.0/255.255.255.0
sshd: 10.0.0.0/255.0.0.0

vim /etc/hosts.deny

# 拒绝所有其他访问
ALL: ALL

# 配置SSH访问限制
vim /etc/ssh/sshd_config

# 允许特定用户
AllowUsers admin user1 user2

# 允许特定组
AllowGroups wheel admin

# 拒绝特定用户
DenyUsers test guest

# 配置防火墙限制
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
firewall-cmd --reload

4.4 数据有效性检验

测评要求: 应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求。

测评方法

由于是由应用系统对外提供输入接口,并通过源代码设置或其他硬件措施实现数据有效性校验功能,故服务器层面不适用此测评项。

4.5 漏洞管理

测评要求: 应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞。

测评方法

  1. 检查是否定期进行漏洞扫描(以漏扫报告为准),并且是否对重要大漏洞进行打补丁(补丁安装前在测试环境中进行测试)

检查已安装的补丁:

1
2
3
4
5
6
7
8
# 查看安装的补丁
rpm -qa | grep patch

# 查看系统更新历史
yum history

# 检查可用的安全更新
yum check-update --security

漏洞管理流程

1
2
3
4
5
6
7
8
9
10
11
# 1. 定期漏洞扫描
# 使用Nessus、OpenVAS等工具进行扫描

# 2. 在测试环境测试补丁
# 先在测试环境安装补丁,验证无问题后再在生产环境安装

# 3. 安装安全补丁
yum update --security

# 4. 验证补丁安装
rpm -qa | grep package_name

4.6 入侵检测

测评要求: 应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。

测评方法

询问是否安装了主机入侵检测软件,能够识别哪些入侵行为并作出说明措施,让运维人员查询相关进程进行核查。

软件: 深信服EDR、卡巴斯基的Linux版

安全设备: 基于主机的IDS设备,或者网络拓扑上是否部署IDS、IPS

: 是否购买安全产品,如:云盾、安骑士

入侵检测配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 检查入侵检测软件进程
ps aux | grep -E "edr|kaspersky|ids"

# 配置AIDE(高级入侵检测环境)
yum install aide -y

# 初始化AIDE数据库
aide --init

# 移动数据库
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

# 定期检查
aide --check

5. 恶意代码防范

5.1 恶意代码防护

测评要求: 应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断。

测评方法

询问是否安装了防病毒软件,倘若安装了,则让管理人员调出恶意代码软件的进程进行核实。

防病毒软件

Linux防病毒软件:

  • ClamAV(开源)
  • Sophos Antivirus
  • Kaspersky Endpoint Security
  • Trend Micro ServerProtect

安装配置ClamAV

1
2
3
4
5
6
7
8
9
10
11
12
13
# 安装ClamAV
yum install clamav clamav-update -y

# 更新病毒库
freshclam

# 扫描系统
clamscan -r /home

# 配置定时扫描
crontab -e
# 每天凌晨2点扫描
0 2 * * * /usr/bin/clamscan -r /home -l /var/log/clamav-scan.log

6. 可信验证

6.1 可信根验证

测评要求: 可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心。

测评方法

操作系统未涉及可信技术的使用,不适用。

注意: 如需实现可信验证,需要使用支持TPM(可信平台模块)的硬件和相应的软件支持。


7. 数据完整性

7.1 传输过程完整性

测评要求: 应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等。

测评方法

根据身份鉴别C项来写,涉及到别的例如审计数据的传输再另看。

完整性保护措施

SSH传输:

  • SSH使用加密和完整性校验保证数据传输完整性

HTTPS传输:

  • 使用TLS/SSL协议保证数据传输完整性

文件完整性校验:

1
2
3
4
5
6
7
8
9
10
11
# 生成文件MD5值
md5sum file.txt > file.txt.md5

# 验证文件完整性
md5sum -c file.txt.md5

# 生成文件SHA256值
sha256sum file.txt > file.txt.sha256

# 验证文件完整性
sha256sum -c file.txt.sha256

7.2 存储过程完整性

测评要求: 应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等。

测评方法

操作系统能够保证自身数据存储的完整性。

文件完整性监控

1
2
3
4
5
6
7
8
9
10
11
# 使用AIDE监控文件完整性
aide --init
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

# 定期检查
aide --check

# 配置定时检查
crontab -e
# 每天检查一次
0 3 * * * /usr/sbin/aide --check > /var/log/aide-check.log 2>&1

8. 数据保密性

8.1 传输过程保密性

测评要求: 应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。

测评方法

根据身份鉴别C项来写。

保密性保护措施

SSH加密传输:

  • SSH使用加密算法保证数据传输保密性

VPN加密传输:

  • 使用VPN建立加密隧道

文件加密传输:

1
2
3
4
5
# 使用GPG加密文件
gpg --encrypt --recipient user@example.com file.txt

# 解密文件
gpg --decrypt file.txt.gpg

8.2 存储过程保密性

测评要求: 应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。

测评方法

操作系统自身满足。

存储加密

1
2
3
4
5
6
7
# 使用LUKS加密磁盘
cryptsetup luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 encrypted_disk

# 使用eCryptfs加密目录
yum install ecryptfs-utils -y
mount -t ecryptfs /secure /secure

9. 数据备份恢复

9.1 本地数据备份

测评要求: 应提供重要数据的本地数据备份与恢复功能。

测评方法

操作系统层面不适用。

注意: 数据备份通常由应用系统或数据库系统实现。

9.2 异地实时备份

测评要求: 应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地。

测评方法

操作系统不适用。

注意: 异地备份通常由应用系统、数据库系统或专门的备份系统实现。

9.3 系统高可用性

测评要求: 应提供重要数据处理系统的热冗余,保证系统的高可用性。

测评方法

询问管理员是否为服务器做冗余部署。

高可用方案

方案1: 双机热备

  • Keepalived + Nginx/HAProxy
  • Heartbeat + DRBD

方案2: 集群方案

  • MySQL主从复制
  • Redis Sentinel
  • MongoDB副本集

方案3: 负载均衡

  • LVS + Keepalived
  • Nginx负载均衡
  • HAProxy负载均衡

10. 剩余信息保护

10.1 鉴别信息清除

测评要求: 应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除。

测评方法

linux操作系统自身能够保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除。

安全配置

1
2
3
4
5
6
7
# 配置swap加密
vim /etc/crypttab
swap /dev/sdb2 /dev/urandom swap,cipher=aes-cbc-essiv:sha256

# 配置tmpfs使用内存
vim /etc/fstab
tmpfs /tmp tmpfs defaults,noexec,nosuid 0 0

10.2 敏感数据清除

测评要求: 应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除。

测评方法

linux操作系统自身能够保证存有敏感数据的存储空间被释放或重新分配前得到完全清除。

安全清除工具

1
2
3
4
5
6
7
8
# 使用shred安全删除文件
shred -u -z -n 3 file.txt

# 使用wipe安全擦除磁盘
wipe /dev/sdb1

# 使用dd清零磁盘
dd if=/dev/zero of=/dev/sdb1 bs=1M

11. 安全加固脚本

11.1 综合加固脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash
# Linux安全加固脚本

echo "开始进行Linux安全加固..."

# 1. 密码策略
echo "配置密码策略..."
sed -i 's/PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs
sed -i 's/PASS_MIN_LEN.*/PASS_MIN_LEN 8/' /etc/login.defs

# 2. 禁用root远程登录
echo "禁用root远程登录..."
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

# 3. 配置登录失败锁定
echo "配置登录失败锁定..."
cat >> /etc/pam.d/sshd <<EOF
auth required pam_tally2.so deny=5 unlock_time=600
account required pam_tally2.so
EOF

# 4. 配置会话超时
echo "配置会话超时..."
echo "TMOUT=600" >> /etc/profile
echo "export TMOUT" >> /etc/profile

# 5. 禁用不需要的服务
echo "禁用不需要的服务..."
systemctl disable telnet 2>/dev/null
systemctl disable vsftpd 2>/dev/null

# 6. 配置防火墙
echo "配置防火墙..."
systemctl enable firewalld
systemctl start firewalld

# 7. 启用审计
echo "启用审计服务..."
systemctl enable auditd
systemctl start auditd

echo "安全加固完成!"

12. 测评检查清单

12.1 身份鉴别检查清单

  • 检查账户唯一性
  • 检查密码策略配置
  • 检查密码复杂度要求
  • 检查登录失败锁定配置
  • 检查会话超时配置
  • 检查SSH服务启用
  • 检查Telnet/FTP服务禁用
  • 检查双因子认证配置

12.2 访问控制检查清单

  • 检查默认账户禁用
  • 检查root远程登录禁用
  • 检查账户清理情况
  • 检查权限分离配置
  • 检查重要文件权限
  • 检查SELinux配置

12.3 安全审计检查清单

  • 检查auditd服务状态
  • 检查rsyslog服务状态
  • 检查审计规则配置
  • 检查审计日志内容
  • 检查审计日志保护
  • 检查审计进程保护

12.4 入侵防范检查清单

  • 检查已安装软件包
  • 检查运行的服务
  • 检查高危端口
  • 检查访问限制配置
  • 检查漏洞管理流程
  • 检查入侵检测软件

实战优化