一、关于三级等保要求

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. 贝塞尔曲线(面)二三维可视化(Three+d3)

    贝塞尔曲线(面)二三维可视化(Three+d3) 在学完 games101 几何后开始实践,可视化贝塞尔曲线 我想实现三维的贝塞尔曲线,用 threejs,但是 threejs 控制太麻烦了,因此,我 ...

  2. Redis可视化内存分析工具--RDR:查看Redis中key的占用情况

    RDR(redis datareveal)是一个解析redis rdbfile的工具.与redis-rdb-tools 相比,RDR 是由 golang 实现的,速度要快得多(5GB rdbfile ...

  3. 【漏洞复现】CVE-2022–21661 WordPress核心框架WP_Query SQL注入漏洞原理分析与复现

    影响版本 wordpress < 5.8.3 分析 参考:https://blog.csdn.net/qq_46717339/article/details/122431779 在 5.8.3 ...

  4. 校招面试之——Java容器

    最近校招季,特把自己面试中遇到的问题整理整理,以巩固自己的知识. Java中对于容器有两大类存储方式,一种是单元素存放,还有一种就是key-value这种有关联的双元素存放了.对于Java中的容器,有 ...

  5. 学习AJAX必知必会(3)~自动重启工具nodemon、缓存问题、请求超时和网络异常、取消重复请求

    1.nodemon 自动重启工具(自动重启基于nodejs开发的服务端应用) ■ nodemon 是一个工具,通过在检测到目录中的文件更改时自动重新启动node应用程序来帮助开发node.js. // ...

  6. 【webpack4.0】---dev.config.js基本配置(六)

    一.开发环境配置准备 1.创建dev.config.js文件 用来配置开发环境的代码 2.安装webpack-merge cnpm install webpack-merge -D 用来合并webpa ...

  7. Web安全防护(二)

    点击劫持 点击劫持,也称UI覆盖攻击 1.1 iframe覆盖攻击 黑客创建一个网页,用iframe包含了目标网站,并且把它隐藏起来.做一个伪装的页面或图片盖上去,且按钮与目标网站一致,诱导用户去点击 ...

  8. Vulnhub DC-1靶场学习笔记

    0x00 环境准备 本文介绍了Vulnhub中DC-1靶机的实战渗透过程,实战的目标是获取到服务器中的5个flag,最终目标是获取到root目录下的thefinalflag文件: 测试环境 备注 Ka ...

  9. 五种IO模型(Model)

    目录 一:IO模型简介 1.五种IO Model: 二:五种IO模型简介 1.阻塞IO 2.非阻塞IO 3.多路复用IO 4.信号驱动IO模型 5.异步IO 三:5种I/O模型的比较 一:IO模型简介 ...

  10. dp学习(二)

    树和图上的dp. 4. 简单树形dp 这些是最为简单的树形dp. 一般来说,树形dp是通过子树的dp值推出当前点的dp值. 在这里,我们默认当前节点为u,它的儿子节点为v,树的根为rt. 例题4.1 ...