服务器及MySQL安全设置指南

news/2025/1/9 16:06:56 标签: 服务器, mysql, 安全

文章目录

    • Linux安全配置
      • 1、密码复杂度策略
      • 2、登陆失败策略
      • 3、登录超时策略
      • 4、安全日志记录
      • 5、账户策略
        • 5.1 创建系统管理员(应该对/var进行授权,修改可能会影响到ssh登录)
        • 5.2 创建安全管理员(应该对/etc进行授权)
        • 5.3 创建审计管理员(应该对/var/log进行授权)
    • MySQL安全配置
      • 1、安装validata_password插件
      • 2、创建系统管理员用户
      • 3、创建安全管理员用户
      • 4、创建审计管理员用户
      • 5、设置错误登录限制
      • 6、登陆超时时间
    • 总结

安全设置中,密码复杂度、登录失败和登录超时等策略是关键的安全措施。这些措施可以有效防止未授权访问,并增强系统的整体安全性。接下来我们将详细介绍如何配置这些安全策略。

Linux安全配置

1、密码复杂度策略

密码复杂度规则确保用户创建的密码足够强壮,难以被猜测或暴力破解。可以通过以下几种方式来实现:

  • 长度要求:设定最小密码长度(例如至少8个字符)。
  • 字符种类:要求密码包含大写字母、小写字母、数字以及特殊字符。
  • 历史记录:不允许使用最近几次使用的旧密码。

示例:配置有效期90天、长度不少于8位、至少3种字符的密码策略。

#vim /etc/login.defs
PASS_MAX_DAYS   90 (密码有效期)
PASS_MIN_DAYS   0  (密码修改间隔)
PASS_MIN_LEN    8 (密码最小长度)
PASS_WARN_AGE   7 (密码到期前警告)

设置包含字符、大写字母、小写字母

# cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
# vim /etc/pam.d/system-auth
找到包含pam_pwquality.so模块的行,将原有行注释并修改为如下的新配置:
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
# minlen=8 密码最小长度为8个字符。
# lcredit=-1 密码应包含的小写字母的至少一个
# ucredit=-1 密码应包含的大写字母至少一个
# dcredit=-1 将密码包含的数字至少为一个
# ocredit=-1 设置其他符号的最小数量,例如@,#、! $%等,至少要有一个
# enforce_for_root 确保即使是root用户设置密码,也应强制执行复杂性策略

测试:使用passwd测试是否配置成功
在这里插入图片描述

2、登陆失败策略

登录失败策略用于限制非法尝试登录的次数,以减少通过暴力破解攻击成功的机会。通常包括锁定账户一段时间或永久锁定直至管理员解锁。
示例:配置3次锁定、锁定时长60分钟的登陆失败策略。

# vim /etc/pam.d/sshd
新增以下配置:
auth required pam_tally2.so onerr=fail deny=3 unlock_time=1800 even_deny_root root_unlock_time=300
# root_unlock_time: 表示root用户锁定时间
# unlock_time: 表示普通用户锁定时间
# onerr=fail: 表示连续失败
# deny=3: 表示超过3次登录失败即锁定
# 如果不想限制root用户,可以去掉:even_deny_root root_unlock_time=300。

在这里插入图片描述
注意:auth要放到第二行,否则不生效!!
测试
在这里插入图片描述如果要查看某个用户的登陆失败次数,可以使用以下命令查看:

pam_tally2   --user luweihao

在这里插入图片描述
重置某个用户的登陆失败次数:

pam_tally2   --user luweihao --reset

3、登录超时策略

登陆超时策略为了防止会话被长时间闲置而被他人利用,应设置合理的会话超时时间,即当用户无活动状态达到一定时限后自动断开连接。
示例:配置会话超时时间为30分钟。

# vim /etc/profile
注意:在末尾增加(单位是s)
TMOUT=1800

4、安全日志记录

有效的日志记录不仅可以帮助管理员监控系统活动,还能在发生安全事件时提供关键信息用于调查和响应。
示例:启用auditd/rsyslog

service auditd status
service rsyslog status

5、账户策略

合理地分配不同的管理角色对于确保系统的安全性至关重要。通过创建系统管理员、安全管理员和审计管理员等角色,并为每个角色设定相应的权限,可以有效地实现职责分离,减少内部威胁风险。

5.1 创建系统管理员(应该对/var进行授权,修改可能会影响到ssh登录)
groupadd sysgroup
useradd sys -g sysgroup
passwd sys
usermod -G sysgroup sys
mkdir /vartest
chown -R sys:sysgroup /vartest
chmod 741 /vartest
5.2 创建安全管理员(应该对/etc进行授权)
useradd -d /security security
passwd security
chown -R security:security /security
chmod 700 /security
5.3 创建审计管理员(应该对/var/log进行授权)
useradd audit
passwd audit
vim /etc/sudoers
添加
audit     ALL = (ALL) NOPASSWD: /usr/bin/cat , /usr/bin/less , /usr/bin/more , /usr/bin/tail , /usr/bin/head
chown -R audit:audit /var/log
chmod 700 /var/log

MySQL安全配置

MySQL无法直接进行密码策略配置,需要安装插件。MySQL5.7默认有validata_password的插件,但是没有安装,需要手动安装。
注意:如果MySQL设置了只读账号,需要先关闭只读,安装完插件后,重新开启只读。

#关闭只设置
set global read_only=0;
#最后再打开只读设置(根据需求)
set global read_only=1;

1、安装validata_password插件

INSTALL PLUGIN validate_password SONAME 'validate_password.so';

在这里插入图片描述
查看当前设置

SHOW VARIABLES LIKE 'validate_password%';
SHOW VARIABLES LIKE '%password%';

在这里插入图片描述

#default_password_lifetime这个为全局设置,影响到所有账号,生产环境谨慎设置。
#validate_password_check_user_name:用于是否检查密码是否与用户名相似。设置为 OFF 表示不检查。
#validate_password_dictionary_file:用于指定用于密码验证的字典文件。如果为空,表示没有配置特定的字典。
#validate_password_length:密码的最小长度,这里表示密码至少需要 8 个字符。
#validate_password_mixed_case_count:密码中必须包含的大写和小写字母的最少数量。在此设置为 1,表示至少需要一个大写或小写字母。
#validate_password_number_count:密码中必须包含的数字的最少数量。在此设置为 1,表示至少需要一个数字。
#validate_password_policy:定义密码的复杂性策略。设置为 MEDIUM,表示密码需满足中等复杂性要求。
#validate_password_special_char_count:密码中必须包含的特殊字符的最少数量。未设置,表示没有要求。

可以自己修改配置,如密码长度修改成10位

SET GLOBAL validate_password_length = 10;

在这里插入图片描述

2、创建系统管理员用户

#创建系统管理员用户
CREATE USER 'sysdba'@'localhost' IDENTIFIED BY 'NBYl6vu9d5Bev&S2';
#修改系统管理员用户的密码过期时间
alter user 'sysdba'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
#赋予系统管理员相应的权限
GRANT ALL PRIVILEGES ON *.* TO 'sysdba'@'localhost' WITH GRANT OPTION;
#查看权限
show grants for 'sysdba'@'localhost';
#查看密码过期时间
show create user 'sysdba'@'localhost';

在这里插入图片描述

3、创建安全管理员用户

#创建安全管理员用户
CREATE USER 'safedba'@'localhost' IDENTIFIED BY 'CqLs@rGKt3RG@fMI';
#修改安全管理员用户密码过期时间
alter user 'safedba'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
#赋予安全管理员相应的权限
GRANT SELECT, SHOW VIEW ON *.* TO 'safedba'@'localhost';
#查看权限
show grants for 'safedba'@'localhost';
#查看密码过期时间
show create user 'safedba'@'localhost';

在这里插入图片描述

4、创建审计管理员用户

#创建审计管理员用户
CREATE USER 'auditdba'@'localhost' IDENTIFIED BY 'isn2ecX#ZVhjx#Eu';
#修改审计管理员用户密码过期时间
alter user 'auditdba'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
#赋予审计管理员相应的权限
GRANT RELOAD, PROCESS, SHOW DATABASES ON *.* TO 'auditdba'@'localhost';
#查看权限
show grants for 'auditdba'@'localhost';
#查看密码过期时间
show create user 'auditdba'@'localhost';

在这里插入图片描述

5、设置错误登录限制

#安装CONNECTION_CONTROL插件
INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so';
#提供了一个INFORMATION_SCHEMA类型的表,用户在此表中可以查看更详细关于登陆失败连接的信息。
INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';

在这里插入图片描述

#查看当前配置
show variables like '%connection%';

在这里插入图片描述

#connection_control_failed_connections_threshold:连续失败最大次数3次,0表示不开启
#connection_control_max_connection_delay:超过最大失败次数之后阻塞登录最大时间(毫秒)
#connection_control_min_connection_delay:超过最大失败次数之后阻塞登录最小时间(毫秒)
#例如:set global connection_control_failed_connections_threshold=0;
#查询各账号登录失败次数
use information_schema;
select * from connection_control_failed_login_attempts;

在这里插入图片描述

6、登陆超时时间

show variables like "%wait_timeout%";
#修改超时时间为600s
set global wait_timeout=600;

在这里插入图片描述

总结

正确地配置以上策略能够显著提高服务器安全性,但同时也需要注意不要给合法用户提供过多障碍。因此,在实施上述任何一种策略之前,请根据实际情况做出适当调整,确保既保证了安全性又不影响正常使用体验。


http://www.niftyadmin.cn/n/5817715.html

相关文章

使用Docker搭建npm私有仓库

由于文章格式和图片解析问题,为了更好的阅读体验,读者可前往 阅读原文 在公司团队内一般都会拥有私有的工具包或者其他依赖,这些东西又是比较敏感的信息,因此如npm私库的搭建在公司内部必不可少。 私库搭建方式有很多&#xff0c…

JS进阶--JS听到了不灭的回响

作用域 作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问 作用域分为局部和全局 局部作用域 局部作用域分为函数和块 那 什么是块作用域呢? 在 JavaScript 中使用 { } 包裹的代码称为代码块…

【集成学习】Bagging算法详解及代码实现

文章目录 1. Bagging集成学习算法1.1 简介1.2 基本步骤1.3 Bagging优缺点1.4 随机森林:Bagging的一个重要应用1.5 总结 2. Python代码实现3. 如何理解偏差与方差3.1 偏差(Bias)3.2 方差(Variance)3.3 方差与偏差的权衡…

MT6835天玑6100平台规格参数_MTK联发科安卓核心板方案定制开发

联发科MT6835平台集成了蓝牙、FM、WLAN 和 GPS 模块,是一个高度集成的基带平台。该芯片集成了两个 Arm Cortex-A76 内核(运行频率高达 2.2GHz)、六个 Arm Cortex-A55 内核(运行频率高达 2.0 GHz)和强大的多标准视频编解…

macOS 中,默认的 Clang 编译器和 Homebrew 安装的 GCC 都不包含 bits/stdc++.h 文件

在 macOS 中,默认的 Clang 编译器和 Homebrew 安装的 GCC 都不包含 bits/stdc.h 文件,因为它是一个 非标准 的头文件,主要由 MinGW 和某些 Linux 平台的 GCC 提供。 解决方案 : 手动创建 bits/stdc.h 1. 创建文件夹和文件 在你的 GCC 标准…

电脑32位和64位之区别(Difference between 32-Bit and 64 Bit Computers)

电脑32位和64位之区别 很多小伙伴还不知道电脑32位和64位是什么意思,今天小编就来普及一下。 32位和64位是指电脑处理器(CPU)和操作系统的架构,决定了电脑如何处理数据、存储信息、运行程序等。 32位和64位是指电脑系统中每个处…

conda 批量安装requirements.txt文件

conda 批量安装requirements.txt文件中包含的组件依赖 conda install --yes --file requirements.txt #这种执行方式,一遇到安装不上就整体停止不会继续下面的包安装。 下面这条命令能解决上面出现的不执行后续包的问题,需要在CMD窗口执行: 点…

SSL 证书格式和证书文件扩展名:完整指南

SSL 证书是什么以及它如何工作相当容易理解。但当涉及到在服务器上安装它时,有时,你可能觉得这是在处理火箭科学。 由于有如此多的SSL 证书格式与特定服务器要求相关,您更有可能感到困惑和沮丧,而不是从一开始就正确配置证书。但…