一、关于三级等保要求

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. 【PTA】5-1 输入一个正整数n,再输入n个学生的姓名和百分制成绩,将其转换为两级制成绩后输出。

    5-1 输入一个正整数n,再输入n个学生的姓名和百分制成绩,将其转换为两级制成绩后输出.要求定义和调用函数set_grade(stu, n),其功能是根据结构数组stu中存放的学生的百分制成绩scor ...

  2. [Windows]为windows系统鼠标右键添加软件和图标

    转载自 https://blog.csdn.net/p312011150/article/details/81207059 一.打开注册表 首先打开windows的注册表,当然了,我个人倾向于 (1) ...

  3. golang中使用kafka客户端sarama消费时需要注意的一个点

    kafka消费者的Consume()方法会阻塞: 当Consume()方法返回err时,不确定继续消费有没有问题:保险起见,退出进程,然后重新初始化. 当Consume()方法返回nil是,是可以继续 ...

  4. Android系统编程入门系列之硬件交互——通信硬件NFC

    在上篇文章介绍了接入式USB硬件的简单使用,接下来将介绍不依赖物理连接的硬件通信了.本文的重点是近距离通信的硬件NFC. NFC硬件 应用程序中可以通过NFC硬件读取或发送指定协议的技术实现,在And ...

  5. K8s PV and PVC and StorageClass

    PVC和PV之间没有依靠ID.名称或者label匹配,而是靠容量和访问模式,PVC的容量和访问模式需要是某个PV的子集才能自动匹配上.注意:PVC和PV是一对一的,也即一个PV被一个PVC自动匹配后, ...

  6. mysql 相关练习题

    /* 自己查询自己 把一张表看成是两张表. 表的设计. SELECT * FROM depart; SELECT d1. NAME '部门', d2. NAME '分部门' FROM depart d ...

  7. ABC220H - Security Camera

    考虑折半,将点按照标号是否 \(\le \frac{n}{2}\) 分成两个集合 \(S_1, S_2\). 首先原问题的形式有点奇怪,我们不妨统计没有被覆盖覆盖的边为偶数条的情况. 这样一来问题转化 ...

  8. 封装jar问题java.lang.SecurityException: Invalid signature file digest for Manifest main attributes以及maven依赖重提解决

    1.jar包封装完成后,其他项目引用jar,启动时报错java.lang.SecurityException: Invalid signature file digest for Manifest m ...

  9. JSP中的请求转发与重定向

    在说请求转发和重定向之前,得了解下JSP九大内置对象中的response和request response:将服务器端数据发送到客户端,可通过在客户端浏览器中显示,用户浏览页面的重定向以及在客户端创建 ...

  10. 深入了解Element Form表单动态验证问题 转载

    随风丶逆风 2020-04-03 15:36:41  2208  收藏 3 分类专栏: Vue 随笔 文章标签: 动态验证 el-form elementUI 表单验证 版权 在上一篇<vue ...