一、环境准备与操作系统安全加固
在部署单机版档案软件前,必须确保操作系统满足涉密计算机防护要求。本指南以CentOS 7.9为例,这是通过保密资质测评的主流环境。
1. 核心服务与内核参数配置
首先关闭非必要的服务和端口,减少攻击面。执行以下命令:
```bash
停止并禁用非必要服务
systemctl stop postfix && systemctl disable postfix
systemctl stop bluetooth && systemctl disable bluetooth
配置内核参数,强化IP栈安全
cat >> /etc/sysctl.conf <
2. 强制访问控制策略(SELinux)
保密资质要求必须开启强制访问控制。检查并开启SELinux:
```bash
检查状态,若为Disabled需修改配置文件
sestatus
修改配置文件 enforcing为强制模式
sed -i 's/SELINUX=permissive/SELINUX=enforcing/g' /etc/selinux/config
sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' /etc/selinux/config
重启生效
reboot
```
二、数据库安装与安全基线设置
单机版档案软件通常依赖MySQL或PostgreSQL。本节使用MySQL 5.7进行标准化部署,重点在于数据库层面的审计与身份鉴别。
1. 安装MySQL数据库
```bash
卸载自带mariadb
yum remove -y mariadb-libs
安装依赖(假设已配置本地yum源,涉密环境通常无法连外网)
yum install -y libaio net-tools
解压MySQL安装包(以mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz为例)
tar -xvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
mv /usr/local/mysql-5.7.35-linux-glibc2.12-x86_64 /usr/local/mysql
创建用户和组
groupadd mysql
useradd -r -g mysql mysql
初始化数据库
mkdir -p /data/mysql/data
chown -R mysql:mysql /data/mysql
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
```
2. 配置my.cnf以满足资质审计要求
创建/etc/my.cnf,必须开启通用查询日志和错误日志,这是资质现场检查的必查项。
```ini
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql/data
socket = /tmp/mysql.sock
pid-file = /data/mysql/mysql.pid
字符集
character-set-server = utf8mb4
安全与审计配置(核心)
开启通用查询日志,记录所有SQL操作,满足三员管理审计需求
general_log = 1
general_log_file = /data/mysql/mysql_general.log
开启慢查询日志
slow_query_log = 1
slow_query_log_file = /data/mysql/mysql_slow.log
long_query_time = 2
错误日志
log-error = /data/mysql/mysql_error.log
密码策略设置为强校验
validate_password_policy = STRONG
validate_password_length = 8
validate_password_mixed_case_count = 1
validate_password_number_count = 1
禁止本地文件加载,防SQL注入导致文件泄露
local_infile = 0
仅允许IPV4本地回环,禁止外部连接(单机版必须)
bind-address = 127.0.0.1
```
3. 启动服务与初始安全设置
```bash
配置环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
启动MySQL
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
service mysqld start
获取临时密码
temp_pwd=$(grep 'temporary password' /data/mysql/data/mysql_error.log | awk '{print $NF}')
echo "临时密码: $temp_pwd"
修改root密码(必须先登录修改)
mysql -uroot -p"$temp_pwd" --connect-expired-password -e "SET PASSWORD = PASSWORD('SecureRoot@Pwd2024!');"
```
三、档案软件部署与三员管理配置
假设档案软件为标准的Java Jar包archive-system.jar。为了通过保密资质,必须实现“三员分立”(系统管理员、安全保密员、安全审计员)。
1. 数据库初始化与三员账号构建
登录数据库,执行以下SQL脚本,构建符合资质要求的用户表及初始数据:
```sql
-- 创建数据库
CREATE DATABASE archive_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE archive_db;
-- 创建用户表
CREATE TABLE sys_user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role VARCHAR(20) NOT NULL, -- 'ADMIN', 'SECURITY', 'AUDITOR'
status TINYINT DEFAULT 1,
last_login_time DATETIME,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 插入三员账户(密码需加密,此处为演示使用明文,实际部署需BCrypt)
-- 系统管理员:负责系统配置、用户管理
INSERT INTO sys_user (username, password, role) VALUES ('admin01', 'Admin@Pass123', 'ADMIN');
-- 安全保密员:负责策略制定、密钥管理
INSERT INTO sys_user (username, password, role) VALUES ('sec01', 'Sec@Pass123', 'SECURITY');
-- 安全审计员:负责日志查阅,只有只读权限
INSERT INTO sys_user (username, password, role) VALUES ('audit01', 'Audit@Pass123', 'AUDITOR');
-- 创建操作日志表(记录三员操作)
CREATE TABLE sys_audit_log (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
operator VARCHAR(50),
action VARCHAR(100),
ip_address VARCHAR(50),
operation_result VARCHAR(20),
detail TEXT,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
```
2. 应用程序配置文件
在Jar包同级目录下创建application.yml,配置数据源连接及日志路径。注意:日志文件必须具备防篡改属性。
```yaml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/archive_db?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: SecureRoot@Pwd2024!
driver-class-name: com.mysql.jdbc.Driver
日志配置(输出到指定文件,便于日志审计系统收集)
logging:
file:
name: /var/log/archive_system/app.log
level:
root: INFO
com.example.archive: DEBUG
```
3. 启动脚本与日志防篡改设置
编写启动脚本start.sh,并设置日志属性为追加模式(a)且仅允许追加,防止管理员或黑客删除日志。
```bash
!/bin/bash
创建日志目录
mkdir -p /var/log/archive_system
touch /var/log/archive_system/app.log
设置日志文件属性:chattr +a 使文件只能追加,不能删除或修改已有内容
这一点是现场测评中关于日志完整性的关键得分点
chattr +a /var/log/archive_system/app.log
授予执行权限
chmod +x archive-system.jar
启动应用(使用系统Java环境,建议OpenJDK 1.8)
nohup java -jar archive-system.jar > /dev/null 2>&1 &
echo "档案软件已启动,PID: $!"
```
四、主机审计与监控配置

保密安防资质要求主机必须开启审计进程,记录对敏感文件和系统配置的修改。
1. 安装并配置auditd
```bash
yum install -y auditd
systemctl start auditd
systemctl enable auditd
```
2. 定义审计规则
编辑/etc/audit/rules.d/audit.rules,添加以下规则。重点监控/etc/passwd(用户管理)、/etc/my.cnf(数据库配置)以及档案数据目录。
```bash
监控/etc/passwd和/etc/shadow的修改(用户增删改查)
-w /etc/passwd -p wa -k identity_mod
-w /etc/shadow -p wa -k identity_mod
-w /etc/group -p wa -k identity_mod
监控数据库配置文件修改
-w /etc/my.cnf -p wa -k db_config_mod
监控档案数据目录(假设数据在/data/archive_data)
-w /data/archive_data -p rwa -k archive_data_access
监控系统时间修改(防日志时间造假)
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -S stime -S clock_settime -k time_change
```
重启审计服务使规则生效:
```bash
service auditd restart
查看规则是否生效
auditctl -l
```
五、合规性验证与自检
部署完成后,执行以下步骤验证是否符合资质要求。
1. 验证三员权限隔离
登录数据库,模拟不同角色用户的操作权限。
```sql
-- 验证审计员只能查询,不能修改
USE archive_db;
-- 创建一个只读用户模拟审计员逻辑
GRANT SELECT ON archive_db. TO 'audit_check'@'localhost' IDENTIFIED BY 'AuditCheck@123';
FLUSH PRIVILEGES;
-- 尝试写入(预期失败)
-- INSERT INTO sys_user (username, password, role) VALUES ('hacker', '123', 'ADMIN');
```
2. 验证日志完整性
尝试删除日志文件,确认系统拒绝操作:
```bash
尝试删除应用日志
rm -f /var/log/archive_system/app.log
预期结果:rm: cannot remove '/var/log/archive_system/app.log': Operation not permitted
若出现上述提示,说明 chattr +a 配置成功,符合日志防篡改要求。
```
3. 验证审计日志生成
执行一个敏感操作(如创建新用户),然后检查auditd日志:
```bash
触发审计事件
useradd testuser01
查看审计日志
ausearch -k identity_mod -i
```
如果输出中包含了useradd命令的详细执行记录(包括时间戳、执行者、成功状态),则说明主机审计配置合格。
4. 端口扫描检查
单机版软件除本机回环外,不应监听任何外部IP地址。
```bash
netstat -tuln | grep LISTEN
```
检查输出,确保MySQL监听在127.0.0.1:3306,应用监听在127.0.0.1:8080或仅:::8080(需配合防火墙禁用外部访问)。若发现监听在0.0.0.0,需立即修改配置文件并重启服务。