文章目录
前言
安全等级测评的目的是通过对目标系统在安全技术及管理方面的测评,对目标系统的安全技术状态及安全管理状况做出初步判断,给出目标系统在安全技术及安全管理方面与其相应安全等级保护要求之间的差距。测评结论作为委托方进一步完善系统安全策略及安全技术防护措施依据
一、服务器侧等保测评项目及加固
1、服务器未启用密码长度以及口令复杂度、且未定期更新口令
整改建议:
建议修改密码长度、口令复杂度以及定期90天更换口令。
整改方法:
logindefs(){
echo "---口令生存期---"
cp -p /etc/login.defs /etc/login.defs_bak
sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/g' /etc/login.defs
sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 10/g' /etc/login.defs
sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE 7/g' /etc/login.defs
}
system_auth_crack(){
echo "---口令复杂度及密码长度---"
# 判断 system-auth 配置文件中是否包含 password requisite pam_cracklib.so 的配置
if grep -q 'password requisite pam_cracklib.so' /etc/pam.d/system-auth; then
# 如果有,则使用 sed 命令替换原有的行
sed -i 's/^password.*requisite.*pam_cracklib.so$/& try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8/g' /etc/pam.d/system-auth
else
# 如果没有,则添加新的一行
echo "password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8" >> /etc/pam.d/system-auth
fi
}
2、服务器未限制非法登录次数,未设置登录连接超时自动退出
整改建议:
建议限制非法登录次数;设置登录连接超时自动退出,如:连续登录3次锁定10分钟,并无操作10分钟自动退出。
整改方法:
login_timeout(){
# 检查 /etc/profile 文件是否存在
if [ ! -f /etc/profile ]; then
echo "/etc/profile 文件不存在"
exit 1
fi
# 使用 sed 命令检查文件末尾是否已经存在所需的两行内容,不存在则添加
if ! grep -q '^TMOUT=' /etc/profile; then
echo 'TMOUT=300' >> /etc/profile
else
sed -i 's/^TMOUT=.*/TMOUT=300/' /etc/profile
fi
if ! grep -q '^export TMOUT' /etc/profile; then
echo 'export TMOUT' >> /etc/profile
fi
}
3、服务器只采用密码技术对用户的身份进行鉴别,未采用双因子认证;服务器未限制管理终端登录
整改建议:
服务器只采用密码技术对用户的身份进行鉴别,未采用双因子认证。
因为维护的项目都是通过vpn(短信验证)-->堡垒机(短信验证)-->登录服务器,最后沟通这项可以按如下修复。即服务器配置ssh白名单,只允许堡垒机登录
整改方法:
vim /etc/hosts.deny #添加以下配置
sshd:all:deny
vim /etc/hosts.allow #添加以下配置
sshd:堡垒机IP:allow
4、Rc3.d文件权限过大755
整改建议:
建议修改rc3.d的读写权限为755以下
整改方法:
chmod 644 -R /etc/rc.d/rc3.d
5、未有第三方审计系统,未对审计记录进行定期备份
整改建议:
未有第三方审计系统,未对审计记录进行定期备份;
整改方法:
1、服务器开启audit服务
2、使用aidutctl -l命令查看审计策略
3、使用auditctl -w 路径/文件 -p 权限 命令对文件或目录配置审计策略
补充: 使用auditctl -W 路径/文件 -p 权限 命令是取消审计策略
4、使用ausearch -f 配置的路径/文件 查看对应的审计日志
5、使用AuditLogSync.py脚本+ip_address.txt文件实现将全部服务器的audit.log日志备份并同步到日志归档服务器。脚本如下所示
6、在日志归档服务器配置定时同步,即可
[root@LogArchive]# crontab -e
* */23 * * * /usr/bin/python3 -W ignore /path/AuditLogSync.py
#!/usr/bin/env python3
#Date: 202403212005
import os
import time
import paramiko
import logging
from datetime import datetime
import threading
import inspect
class AuditLogSync:
def __init__(self, ip_file,audit_path,username,password,port):
"""
初始化AuditLogSync类
Parameters:
ip_file (str): 包含IP地址列表的文件路径
audit_path (str): 审计日志路径
username (str): 用户名
password (str): 密码
port (int): 端口
"""
self.ip_file = ip_file
self.audit_path=audit_path
self.username = username
self.password = password
self.port = port
#生成日期
self.current_time = datetime.now().strftime("%Y%m%d")
#生成审计日志归档目录
self.export_dir = f"/export/AuditLogSync/{
self.current_time}"
#生成执行日志
self.info_log_file = "/export/AuditLogSync/sync_info.log"
self.error_log_file = "/export/AuditLogSync/sync_error.log"
# 设置 info 日志记录器
self.info_logger = logging.getLogger('info_logger')
info_handler = logging.FileHandler(self.info_log_file)
info_handler.setLevel(logging.INFO)
info_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
info_handler.setFormatter(info_formatter)
self.info_logger.addHandler(info_handler)
self.info_logger.setLevel(logging.INFO)
# 设置 error 日志记录器
self.error_logger = logging.getLogger('error_logger')
error_handler = logging.FileHandler(self.error_log_file)
error_handler.setLevel(logging.ERROR)
error_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
error_handler.setFormatter(error_formatter)
self.error_logger.addHandler(error_handler)
#判断审计日志归档目录是否存在
if not os.path.exists(self.export_dir):
os.makedirs(self.export_dir)
def run_operations(self):
"""
运行一系列操作:连接到服务器,打包日志文件,执行rsync同步
"""
# 从文件中读取IP地址列表
with open(self.