一、操作系统
(1)Linux账户管理重命名默认账户
1.vi /etc/passwd
修改第1行第1个root为新的用户名。
各个字段的顺序和含义如下:
注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释程序。
2.vi /etc/shadow
修改第1行第1个root为新的用户名。
每个字段的含义如下:
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段。
若文件为只读,按【:wq!】 强制保存后离开。
修改后重启服务器。
创建用户:
useradd -d /DATA/ -m test
-d 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
修改test用户的密码:
passwd test
修改用户所属组:
usermod -g root test
查看用户信息:
cat /etc/passwd|grep test
(2)密码复杂度策略
chage -l 用户名 查看用户的过期时间。
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
chage -m 0 -M 180 -W 10 test
设置密码最低有效期0和最高有限期180,提前10天发警报提示。
设置复杂度:
CentOS密码复杂度配置通过/etc/pam.d/system-auth文件中的pam_cracklib.so模块来实现。
首先查看/etc/pam.d/system-auth文件
可以看到当前并没有看到pam_cracklib.so模块
查找资料发现:
pam_pwquality.so是兼容pam_cracklib.so模块的,所以pam_cracklib.so的选项也适用于pam_pwquality.so
pam_cracklib.so支持的部分选项如下:
retry=N:定义登录/修改密码失败时,可以重试的次数
minlen=N:新密码的最小长度
dcredit=N:当N>0时表示新密码中数字出现的最多次数;当N<0时表示新密码中数字出现最少次数;
ucredit=N: 当N>0时表示新密码中大写字母出现的最多次数;当N<0时表示新密码中大写字母出现最少次数;
lcredit=N: 当N>0时表示新密码中小写字母出现的最多次数;当N<0时表示新密码中小写字母出现最少次数;
ocredit=N:当N>0时表示新密码中特殊字符出现的最多次数;当N<0时表示新密码中特殊字符出现最少次数;
maxrepeat=N:拒绝包含多于N个相同连续字符的密码。 默认值为0表示禁用此检查
maxsequence=N:拒绝包含长于N的单调字符序列的密码。默认值为0表示禁用此检查。实例是'12345'或'fedcb'。除非序列只是密码的一小部分,否则大多数此类密码都不会通过简单检查。
enforce_for_root: 如果用户更改密码是root,则模块将在失败检查时返回错误。默认情况下,此选项处于关闭状态,只打印有关失败检查的消息,但root仍可以更改密码。不要求root用户输入旧密码,因此不会执行比较旧密码和新密码的检查
接下来修改system-auth文件,配置密码复杂度策略:
验证生效:
详见:CentOS7密码复杂度配置 - 夜信。 - 博客园 。
(3)登录失败处理策略
详见:centos7下如何设置输入密码三次错误后锁定用户-CentOS-PHP中文网 , linux pam模块篇(1)_pam_tally2模块 – 云原生之路 。
1、限制用户远程登录
vim /etc/pam.d/sshd
#%PAM-1.0
auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=10
2、限制用户从tty登录
vim /etc/pam.d/login
在#%PAM-1.0的下面,即第二行,添加内容,一定要写在前面,如果写在后面,虽然用户被锁定,但是只要用户输入正确的密码,还是可以登录的!
auth required pam_tally2.so deny=3 lock_time=300 even_deny_root root_unlock_time=10
使用ssh工具登录,故意输错密码3次:
此时,用户已经被锁定了,输入正确密码也无法登录。
查看登录失败次数:
pam_tally2 --user test
解锁账号:
pam_tally2 -r -u test
此时输入正确密码就可以成功登录。
(4)安全补丁升级
官方没有发布关于centos操作系统的补丁,更新操作系统软件包:yum update 。
(5)日志审计
详见:Linux 设置日志保存半年_huofeige-CSDN博客_linux系统日志保存6个月 。
logrotate是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志文件。修改/etc/logrotate.conf 中的
# keep 4 weeks worth of backlogs
rotate 4
改为rotate 12
将/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1 中的1改为3,
}
重启:sudo systemctl restart rsyslog 。
(6)病毒查杀
安装杀毒软件ClamAV。
详见:centos7安装杀毒软件ClamAV - 何为实施 - 博客园 。
二、数据库
(1)重命名默认账户
mysql -u root -p
UPDATE mysql.user set user='datacenter' where user='root';
service mysql restart重启数据库后,再用root账号登录则不可用访问了。
表数据能够正确查询,但视图查询报错:
详见:更改数据库权限导致视图不能查询 - 知乎 ,https://blog.csdn.net/michaelwoshi/article/details/104034670 。
这里我将安全性定义由definer设置为invoker。
创建用户:
create user exporter identified by '`1Qazx123_';
用户授权:
grant all privileges on *.* to exporter@'%' identified by '`1Qazx123_' with grant option;
删除用户:
drop user datauser@'%';
详见: MySQL用户管理:添加用户、授权、删除用户 - 陈树义 - 博客园 。
(2)密码复杂度策略
查看默认策略配置:
show variables like 'validate_password%';
validate_password_dictionary_file:密码策略文件,策略为STRONG才需要
validate_password_length:密码最少长度
validate_password_mixed_case_count:大小写字符长度,至少1个
validate_password_number_count :数字至少1个
validate_password_special_char_count:特殊字符至少1个。
详见:MySQL密码复杂度与密码过期策略介绍 - 程序员丁先生 - 博客园 。
(3)登录失败处理策略
1.查看插件:
show variables like '%connection_control%';
上图表示没有安装控制插件。
2.安装MySQL控制插件。
install plugin CONNECTION_CONTROL soname 'connection_control.so';
install plugin CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS soname 'connection_control.so';
现在已经可以看到插件了,但属于没有没有配置策略的状态,锁定时间仅为:1000毫秒 = 1秒(失败三次锁定1秒)。
3.配置策略MySQL登录失败锁定策略。
vim /etc/my.cnf
connection-control-failed-connections-threshold=3
connection-control-min-connection-delay=1800000 (30分钟)
4.重启mysql。
show variables like '%connection_control%';
5.验证
添加完策略后,在输入错误口令第4次时输入框的位置卡住不动了,强制退出输入正确口令依然卡住无法登录。
详见:MySQL数据库登录失败锁定策略的设置 - 海龙。 - 博客园 。
(4)限制访问策略
指定的管理终端或应用、接口服务器的ip限制访问策略。
数据库mysql中的user表datacenter的原始数据如下:
表示只允许mysql服务器连接:mysql -udatacenter -p,输入密码后连接成功。
这条数据的host不做任何修改,否则可能引起服务器端连接失败。此时,客户端任一ip都无法连接数据库。
采用授权的方式指定能连接的ip,可以指定特定ip,也可以指定ip段。
指定ip,如:
mysql> grant all privileges on *.* to datacenter@'192.168.162.35' identified by 'datacenter的密码';
mysql> flush privileges;
指定ip后客户端ip为192.168.100.147无法连接,192.168.162.35能正常连接。
改为ip段:
mysql> grant all privileges on *.* to datacenter@'192.168.%' identified by 'datacenter的密码';
mysql> flush privileges;
此时192.168.100.147可以正常连接。