zabbix密码复杂度有效期安全增强,符合三级等保要求。
一、关于三级等保要求
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密码复杂度有效期安全增强,符合三级等保要求。的更多相关文章
- linux(centos)下密码有效期和密码复杂度设置
1.密码有效期 方法一: chage -l 用户名 查看用户的过期时间 chage -M 99999 用户名 用命令修改过期时间为永久 chage -M 90 用户名 设置密码有效期为90天 chag ...
- JS正则密码复杂度校验之:至少有多种字符中的其中几种
概述 续接上文的密码校验要求: 这个需求有两个难点,一,是如何使用正则匹配所有半角英文标点符号,二,是如何验证密码段中在要求的四种(大写字母,小写字母,数字,标点符号)类型中至少存在三种. 第一个难点 ...
- linux 密码复杂度设置
/etc/login.defs文件,里面几个选项 PASS_MAX_DAYS 90 #密码最长过期天数 PASS_MIN_DAYS 80 #密码最小过期天数 PASS_MIN_LEN 10 #密码最小 ...
- Linux系统密码复杂度安全配置
密码有效期控制 在文件/etc/login.defs中进行设置,如下参数 PASS_MAX_DAYS 180 #密码最长过期天数 PASS_MIN_DAYS 30 #密码最小过期天数 PASS_MIN ...
- MySQL密码复杂度与密码过期策略介绍
前言: 年底了,你的数据库是不是该巡检了?一般巡检都会关心密码安全问题,比如密码复杂度设置,是否有定期修改等.特别是进行等保评测时,评测机构会要求具备密码安全策略.其实 MySQL 系统本身可以设置密 ...
- JavaScript密码复杂度
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- 检查密码复杂度的C#正则表达式
在用户注册与修改.重置密码时,强制密码达到一定的复杂度,是减少盗号的有效措施之一. 而在代码中检查密码复杂度就需要用到正则表达式,比如要求密码必须包含数字.小写或大写字母.特殊字符.字符数在8-30之 ...
- Oracle11g R2创建PASSWORD_VERIFY_FUNCTION对应密码复杂度验证函数步骤
Oracle11g R2创建PASSWORD_VERIFY_FUNCTION对应密码复杂度验证函数步骤 运行测试环境:数据库服务器Oracle Linux 5.8 + Oracle 11g R2数据库 ...
- Javascript校验密码复杂度的正则表达式
1.密码中必须包含大小字母.数字.特称字符,至少8个字符,最多30个字符. var regex = new RegExp('(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.* ...
随机推荐
- 函数实现将 DataFrame 数据直接划分为测试集训练集
虽然 Scikit-Learn 有可以划分数据集的函数 train_test_split ,但在有些特殊情况我们只希望它将 DataFrame 数据直接划分为 train, test 而不是像 tr ...
- JS里默认和常用转换
* { font-family: PingFang, Monaco } JS里的六大简单数据类型 string 字符类型 number 数字类型 boolean 布尔类型 symbol ES6语法新增 ...
- 《剑指offer》面试题31. 栈的压入、弹出序列
问题描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2 ...
- SQL安全执行
begin tran begin -----------执行SQL开始----------------- update Audioset Name =3 -----------执行SQL结束----- ...
- docker 修改容器env配置
docker 修改容器env配置 场景:修改zabbix数据库密码 zabbix容器构成: 数据库:zabbix-mysql server端:zabbix-server-mysql web端:zabb ...
- java多态成员变量、成员函数(非静态)、静态函数特点
1 package face_09; 2 3 /* 4 * 多态时, 5 * 成员的特点: 6 * 1,成员变量. 7 * 编译时:参考引用型变量所属类中的是否有调用的成员变量,有,编译通过:没有,编 ...
- Linux创建运行C/C++代码
不同于在Windows操作系统下借助IDE运行C++程序,Linux操作系统可以使用g++编译 创建文件及编译文件的流程 1. 先进入某一文件目录下,创建一个文件(也可以用mkdir创建文件) to ...
- 【存】008 Linux 文件查找 find
01 一起来认识 find! 在 Linux 系统,find 毫无疑问是最强的文件查找工具.find 一般会与其他命令结合,将查找到的结果作为参数传入到后置命令中,进行删除.统计.复制迁移等操作. 0 ...
- 元数据性能大比拼:HDFS vs OSS vs JuiceFS
背景 存储是大数据的基石,存储系统的元数据又是它的核心大脑,元数据的性能对整个大数据平台的性能和扩展能力非常关键.本文选取了大数据平台中 3 个典型的存储方案来压测元数据的性能,来个大比拼. 其中 H ...
- Mybatisplus和JdbcTemplate的简单使用
Mybatisplus 简介 MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的 ...