服务器及MySQL安全设置指南

文章目录

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

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;

总结

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

相关推荐
阿杰学编程2 小时前
1、什么是GO
服务器·开发语言·golang
Danileaf_Guo2 小时前
当你买了一台Linux云主机,应该如何测试主机性能?
linux·运维·服务器
我的运维人生2 小时前
MySQL深度解析:高性能优化与实战案例
数据库·mysql·性能优化·运维开发·技术共享
美摄科技4 小时前
美摄科技为企业打造专属PC端视频编辑私有化部署方案
大数据·科技·安全
好记忆不如烂笔头abc4 小时前
netplan apply报错No module named ‘netifaces‘
linux·服务器·数据库
我还能再卷一点4 小时前
linux服务器安装mysql数据库和nginx
linux·服务器·数据库
酥暮沐4 小时前
shell脚本回顾1
linux·运维·服务器
Lueeee.4 小时前
Linux Oled显示字符
linux·运维·服务器
xixingzhe24 小时前
linux删除用户
linux·运维·服务器
zr5268554474 小时前
单通道串口服务器(三格电子)
运维·服务器·单片机