一、关于三级等保要求

1.zabbix默认没有设置密码复杂度功能,密码有效期功能。

2.zabbix具备失败处理功能,但是没有页面手动调试,需要修改源代码。

3.zabbix具备超时退出功能。

二、整改

1.zabbix 系统不具备登录失败处理功能,运维终端未设置超时退出功能。

添加失败处理功能,失败3次锁定30分钟,修改include/defines.inc.php

define('ZBX_LOGIN_ATTEMPTS',    3);
define('ZBX_LOGIN_BLOCK', 1800); // sec

截图如下:

使用zhangyifan帐号测试输入5次密码,可以看到状态已锁定,截图如下:

添加自动超时退出功能,截图如下:

2.zabbix 系统和应用系统未实现密码定期更换

整改证据:zabbix数据库users表添加10位时间戳过期字段,截图如下:

程序添加90天过期字段,此处有两个文件需要修改。include/classes/api/services/CUser.php和include/schema.inc.php。

其中CUser.php创建用户时候新增代码$ins_users[0]['passwd_expired'] = time() + 7776000; 代表90天后过期:

    public function create(array $users) {
$this->validateCreate($users); $ins_users = []; foreach ($users as $user) {
unset($user['usrgrps'], $user['user_medias']);
$ins_users[] = $user;
}
//创建用户时候添加过期时间
$ins_users[0]['passwd_expired'] = time() + 7776000;
$userids = DB::insert('users', $ins_users);

其中CUser.php创建更新用户设置时候新增代码$upd_user['passwd_expired'] = time() + 7776000;代表90天后过期:

public function update(array $users) {
$this->validateUpdate($users, $db_users); $upd_users = []; foreach ($users as $user) {
$db_user = $db_users[$user['userid']]; $upd_user = []; // strings
$field_names = ['alias', 'name', 'surname', 'autologout', 'passwd', 'refresh', 'url', 'lang', 'theme']; foreach ($field_names as $field_name) {
if (array_key_exists($field_name, $user) && $user[$field_name] !== $db_user[$field_name]) {
$upd_user[$field_name] = $user[$field_name];
}
} // integers
foreach (['autologin', 'type', 'rows_per_page'] as $field_name) {
if (array_key_exists($field_name, $user) && $user[$field_name] != $db_user[$field_name]) {
$upd_user[$field_name] = $user[$field_name];
}
} if ($upd_user) {
//添加过期时间
$upd_user['passwd_expired'] = time() + 7776000;
$upd_users[] = [
'values' => $upd_user,
'where' => ['userid' => $user['userid']]
];
}
}

在schema.inc.php种'users'最后加入数据库的过期字段。

    'users' => [
'key' => 'userid',
'fields' => [
'userid' => [
'null' => false,
'type' => DB::FIELD_TYPE_ID,
'length' => 20
],
...省略一大坨...
'rows_per_page' => [
'null' => false,
'type' => DB::FIELD_TYPE_INT,
'length' => 10,
'default' => 50
],
'passwd_expired' => [
'null' => false,
'type' => DB::FIELD_TYPE_INT,
'length' => 10
]
]
],

完成以上内容,只是在创建用户和修改用户设置的时候,触发更新数据库中密码过期时间字段修改。

接下来写一个巡检代码,定期巡检数据库表中zabbix过期的用户。加到crontab里

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2022/2/22 14:34
# @Author : GuoYabin
# @Email : hbbdgyb@163.com
# @File : mysql.py
# @Software: PyCharm import pymysql
import time class Localmysqlopt(object):
def __init__(self):
self.db = pymysql.connect(host="localhost",
user="zabbix",
password="zap2dfal43",
port=3306,
database="zabbix",
charset="utf8")
self.cursor = self.db.cursor() def dml_execute(self, sql=None):
try:
with self.cursor as cursor:
cursor.execute(sql)
self.db.commit()
except Exception as e:
self.db.rollback()
print(e) def chaxun(self):
sql = "select userid,passwd_expired from users where passwd_expired < {0} and attempt_failed < 3 ".format(int(time.time()))
self.cursor.execute(sql)
results = self.cursor.fetchall()
if results:
for value in results:
attempt_failed,userid = 5,value[0] #修改登录失败次数,实现锁定账户
sql = "update users set attempt_failed = '{0}' where userid = '{1}'".format(attempt_failed,userid)
self.dml_execute(sql) if __name__=='__main__':
db = Localmysqlopt()
db.chaxun()

ps等保整改截图时候偷个懒,只截一个update方法中的内容。截图如下:

真是难为我了,做为一个运维又改php代码,又写Python的。

3.zabbix 系统远程管理使用 http 协议进行连接。

这段不用写了吧?NGINX配置一个https证书,自己发挥吧。

4.zabbix 系统未采用密码技术保证重要数据在存储过程中的完整性。

整改证据:添加密码复杂度相关代码,修改文件./app/controllers/CControllerUserUpdateGeneral.php结尾部分

        if ($password1 !== null && $password2 !== null) {
if ($password1 !== $password2) {
error(_('Both passwords must be equal.'));
return false;
} if ($password1 === '' && !$this->allow_empty_password) {
error(_s('Incorrect value for field "%1$s": %2$s.', _('Password'), _('cannot be empty')));
return false;
}
/**
* 检查密码复杂度
*/
if (strlen($password1) <= 8) { //必须大于8个字符
error(_('密码必须大于8字符'));
return false;
} if (preg_match("/^[0-9]+$/", $password1)) { //必须含有特殊字符
error(_('密码不能全是数字,请包含数字,字母大小写或者特殊字符'));
return false;
} if (preg_match("/^[a-zA-Z]+$/", $password1)) {
error(_('密码不能全是字母,请包含数字,字母大小写或者特殊字符'));
return false;
} if (preg_match("/^[0-9A-Z]+$/", $password1)) {
error(_('请包含数字,字母大小写或者特殊字符'));
return false;
} if (preg_match("/^[0-9a-z]+$/", $password1)) {
error(_('请包含数字,字母大小写或者特殊字符'));
return false;
}
}
return true;
}
}

截图如下:

测试修改zhangyifan密码为纯数字,提示密码复杂度不符合要求。截图如下:

测试修改zhangyifan帐号为3个字符,提示密码长度不符合要求。截图如下:

zabbix密码复杂度有效期安全增强,符合三级等保要求。的更多相关文章

  1. linux(centos)下密码有效期和密码复杂度设置

    1.密码有效期 方法一: chage -l 用户名 查看用户的过期时间 chage -M 99999 用户名 用命令修改过期时间为永久 chage -M 90 用户名 设置密码有效期为90天 chag ...

  2. JS正则密码复杂度校验之:至少有多种字符中的其中几种

    概述 续接上文的密码校验要求: 这个需求有两个难点,一,是如何使用正则匹配所有半角英文标点符号,二,是如何验证密码段中在要求的四种(大写字母,小写字母,数字,标点符号)类型中至少存在三种. 第一个难点 ...

  3. linux 密码复杂度设置

    /etc/login.defs文件,里面几个选项 PASS_MAX_DAYS 90 #密码最长过期天数 PASS_MIN_DAYS 80 #密码最小过期天数 PASS_MIN_LEN 10 #密码最小 ...

  4. Linux系统密码复杂度安全配置

    密码有效期控制 在文件/etc/login.defs中进行设置,如下参数 PASS_MAX_DAYS 180 #密码最长过期天数 PASS_MIN_DAYS 30 #密码最小过期天数 PASS_MIN ...

  5. MySQL密码复杂度与密码过期策略介绍

    前言: 年底了,你的数据库是不是该巡检了?一般巡检都会关心密码安全问题,比如密码复杂度设置,是否有定期修改等.特别是进行等保评测时,评测机构会要求具备密码安全策略.其实 MySQL 系统本身可以设置密 ...

  6. JavaScript密码复杂度

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  7. 检查密码复杂度的C#正则表达式

    在用户注册与修改.重置密码时,强制密码达到一定的复杂度,是减少盗号的有效措施之一. 而在代码中检查密码复杂度就需要用到正则表达式,比如要求密码必须包含数字.小写或大写字母.特殊字符.字符数在8-30之 ...

  8. Oracle11g R2创建PASSWORD_VERIFY_FUNCTION对应密码复杂度验证函数步骤

    Oracle11g R2创建PASSWORD_VERIFY_FUNCTION对应密码复杂度验证函数步骤 运行测试环境:数据库服务器Oracle Linux 5.8 + Oracle 11g R2数据库 ...

  9. Javascript校验密码复杂度的正则表达式

    1.密码中必须包含大小字母.数字.特称字符,至少8个字符,最多30个字符. var regex = new RegExp('(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.* ...

随机推荐

  1. JAVA多线程之并发编程三大核心问题

    概述 并发编程是Java语言的重要特性之一,它能使复杂的代码变得更简单,从而极大的简化复杂系统的开发.并发编程可以充分发挥多处理器系统的强大计算能力,随着处理器数量的持续增长,如何高效的并发变得越来越 ...

  2. docker的安装以及使用命令

    docker的安装 安装docker https://docs.docker.com/install/linux/docker-ce/centos/#set-up-the-repository 从 2 ...

  3. TensorRT 开始

    TensorRT 是 NVIDIA 自家的高性能推理库,其 Getting Started 列出了各资料入口,如下: 本文基于当前的 TensorRT 8.2 版本,将一步步介绍从安装,直到加速推理自 ...

  4. ecos matlab版本安装

    官网链接 github地址 1.注意不仅要下载matlab版本,同时还要下载c版本,因为matlab版本缺少第三方软件,将两个版本解压缩后将c版本下的文件夹external,ecos_bb,inclu ...

  5. Ajax_Json用法

    Ajax_Json用法 关于json的服务端代码 //首先在方法里面设置一个响应json数据对象   const data = {       name:'chenxigua'   }​ //因为 s ...

  6. openSUSE修改grub来修复对win8的引导

    前言:继上一次安装试用各版本linux发行版后,由于做项目将机器纯windows了一把,现在又想安回centos,各种挫折折腾两天玩残一个u盘日,其中包括自己本本的原装系统也崩了,各种泪奔,下面记录一 ...

  7. IoC容器-Bean管理注解方式(创建对象)

    IoC操作Bean管理(基于注解方式) 1,什么是注解 (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值...) (2)使用注解,注解作用在类上面,方法上面,属性上面 ( ...

  8. 科技爱好者周刊(第 175 期):知识广度 vs 知识深度

    这里记录每周值得分享的科技内容,周五发布. 本杂志开源(GitHub: ruanyf/weekly),欢迎提交 issue,投稿或推荐科技内容. 周刊讨论区的帖子<谁在招人?>,提供大量程 ...

  9. shell循环ping ip的写法

    #!/bin/bash for i in `seq 1 20` do if ping -w 2 -c 1 192.168.43.$i | grep "100%" > /dev ...

  10. Windows mysql免安装版配置。(版本号-5.6.45);

    Windows mysql免安装版配置.(版本号-5.6.45); 来自对 https://blog.csdn.net/weixin_42831477/article/details/81325691 ...