一、关于三级等保要求

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 随机数相关 API 的演进与思考(下)

    本系列将 Java 17 之前的随机数 API 以及 Java 17 之后的统一 API 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算 ...

  2. Sentry 开发者贡献指南 - Feature Flag

    功能 flag 在 Sentry 的代码库中声明. 对于自托管用户,这些标志然后通过 sentry.conf.py 进行配置. 对于 Sentry 的 SaaS 部署,Flagr 用于在生产中配置标志 ...

  3. 输出前 n 个Fibonacci数

    本题要求编写程序,输出菲波那契(Fibonacci)数列的前N项,每行输出5个,题目保证输出结果在长整型范围内.Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,例如 ...

  4. 一条 Git 命令减少了一般存储空间,我的服务器在偷着笑

    元旦不是搭建了一个<Java 程序员进阶之路>的网站嘛,其中用到了 Git 来作为云服务器和 GitHub 远程仓库之间的同步工具. 作为开发者,相信大家都知道 Git 的重要性.Git ...

  5. actf2020upload

    actf2020upload .php后缀过滤 1.上传文件,要求后缀为.png/.gif/.jpg 2.抓包,后缀改成.phtml后放行,上传成功,访问地址,根目录下找到flag

  6. vue3源码node的问题

    下载vue3源码后,下载依赖时,node的版本需要在10.0.0以上,并且不同的vue3里面的插件的配置对版本依赖还不同,14.0.0以上的版本基本都不支持win7了, win7系统可以安装12.0. ...

  7. Kubernetes的故事之持久化存储(十)

    一.Storage 1.1.Volume 官网网址:https://kubernetes.io/docs/concepts/storage/volumes/ 通过官网说明大致总结下就是这个volume ...

  8. 1. idea spark scala 语言支持设置

     Spark 版本为 3.0.0,默认采用的 Scala 编译版本为 2.12 1. 创建名为spark-project 的项目  2. 将src 删除,把spark-project 当成一个父项目, ...

  9. oracle 相关查询和非相关查询,oracle 去除重复数据,以及oracle的分页查询!

    一.oracle中的相关查询?和非相关查询? 二.oracle去除重复数据 1. 2. 3.oracle 实现分页? 利用rownum的唯一性,和子查询,将rownum从伪列变成实际列!

  10. JVM学习一:常用JVM配置参数

    原文链接:https://www.cnblogs.com/pony1223/p/8661219.html 在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技 ...