准备:
安装一个PAM模块来启用cracklib支持,这可以提供额外的密码检查功能。
在Debian,Ubuntu或者Linux Mint使用命令:
sudo apt-get install libpam-cracklib
这个模块在CentOS,Fedora或者RHEL默认安装了。但是在Ubuntu这些系统上就必需安装。
sudo vim /etc/login.defs
PASS_MAX_DAYS 90
PASS_MAX_DAYS 99999 代表永不过期
PASS_MIN_DAYS 2
检查命令:
chage -l root
PASS_WARN_AGE 5
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用户输入旧密码,因此不会执行比较旧密码和新密码的检查
方法:
vim /etc/pam.d/common-password
password requisite pam_cracklib.so retry=3 minlen=10 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1
在pam_cracklib.so 后添加minlen=10 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1
参数含义:密码长度最小为10位,数字出现的最少次数为1次,大写字母出现最少1次,小写字母出现最少1次,特殊字符出现最少1次
1、修改如下配置文件:(不建议修改)
这个只是限制了用户从tty登录,而没有限制远程登录,如果想限制远程登录,需要改sshd文件
vim /etc/pam.d/login
在第二行添加
auth required pam_tally2.so deny=5 unlock_time=300 even_deny_root=5 root_unlock_time=300
此处使用的是 pam_tally2 模块,如果不支持 pam_tally2 可以使用 pam_tally 模块。另外,不同的pam版本,设置可能有所不同,具体使用方法,可以参照相关模块的使用规则。
注意
在第二行,添加内容,一定要写在前面,如果写在后面,虽然用户被锁定,但是只要用户输入正确的密码,还是可以登录的!
这个只是限制了用户从tty登录,而没有限制远程登录,如果想限制远程登录,需要改sshd文件
2、修改sshd文件(建议修改)
vim /etc/pam.d/sshd
继续在第二行上添加
auth required pam_tally2.so deny=5 unlock_time=300 even_deny_root=5 root_unlock_time=300
查看用户登录失败的次数:
sudo pam_tally2 --user
结果
ubuntu@VM-0-5-ubuntu:~$ sudo pam_tally2 --user
Login Failures Latest failure From
root 3 09/29/19 15:53:24 45.119.212.105
ubuntu 9 09/29/19 15:46:58 223.107.140.84
解锁指定用户:
sudo pam_tally2 -r -u admin
admin@VM-0-5-ubuntu:~$ sudo pam_tally2 -r -u admin
Login Failures Latest failure From
admin 15 09/29/19 15:58:49 223.107.140.84
ps:这个远程ssh的时候,输入密码错误超过三次但是没有提示,但是只要超过设定的值,输入正确的密码也是登陆不了的!,还是要等到设定的时间在重新尝试输入正确密码进行登录认证
检查配置文件cat /etc/passwd,不能包含用户标识号为0,除root用户外。
以第一行为例,从左至右,分别表示:
帐号名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
命令:cat /etc/group
检查文件/etc/group中,wheel后面是否有用户名,如果有,将其删除。
如下图中示例,viewer用户加入了wheel组中,因此viewer用户拥有了root的部分功能和权限,因此需要将viewer删除。
Wheel组概念
Wheel组是Unix系统一个遗留物。当服务器需要做比日常例行维护更高级的工作的时候,就经常需要用到root权限了。而这个wheel组就是建立用来归纳一些特殊的系统用户用的,这其中的用户都或多或少地拥有root的部分功能和权限。也就是说如果你不是wheel组成员,那就没有root身上任何的特权。也因为这样,使用wheel组成员用户的话,会尽量减少对系统“摧毁性”破坏的概率和风险。如今大多数的Linux发行版本中,仍然保留了wheel这个组,虽然它已经不像当初设计出来的那样必要了,但是有些老玩家还是忠于这种旧式经典风格的,所以他们经常还是依旧让wheel组发挥着以往的作用。他们是这样做的:在建立他们自己的用户时,将其添加入wheel组中(用wheel组作为用户的主组),或者使用vigr来编辑/etc/group文件,将他们的用户名追加到wheel组那行的末尾。
命令:cat /etc/passwd
检查配置/etc/passwd中,是否包含用户标识号相同的帐号,用户标识号位置如下:
以第一行为例,从左至右,依次为:
帐号名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
命令:cat /etc/shadow(检查shadow文件中密码为空且的用户)
如图上所示,输出test3为空口令账户,且可以登录的用户。
用户test2:!!:18820:0:99999:7:::第二个字段是“:!!:”代表没有设置密码,但无法登录。
用户test3::18820:0:99999:7:::第二个字段是“::”代表第二个字段密码为空,且可以登录。
如果检测出有空口令账户,可以做以下处理:
A. 删除该用户
命令如下:
userdel 用户名
rm -rf /home/用户名 (可选,表示删除该用户的主目录)
B. 给该用户设置密码
passwd 用户名
如果检测出弱口令账户,建议设置符合秘密复杂度要求的密码,命令如下:
passwd 用户名
当rsyslog没有在运行,则检测失败,操作命令如下:
systemctl status rsyslog (查看状态)
systemctl stop rsyslog (停止)
systemctl start rsyslog (启动)
启动成功后状态:
查看进程有没有启动:
命令:ps -ef | grep rsyslog
执行如下命令,修改配置文件
sudo vim /etc/ssh/sshd_config
MaxAuthTries 5
PasswordAuthentication yes
RSAAuthentication yes (有的系统 需要手动添加)
PubkeyAuthentication yes
重启sshd生效,重启命令如下:
CentOS系列: systemctl restart sshd
后续随着建立应用账户会回收root权限登陆。
查看状态
systemctl status firewalld.service
启动防火墙
systemctl start firewalld.service
关闭防火墙
systemctl stop firewalld.service
重新启动防火墙
systemctl restart firewalld.service
安装EDR
安装ntpdateNTP时间同步配置
apt-get install ntpdate
编辑/etc/ntp.conf文件
vim /etc/ntp.conf
添加配置
server 10.14.1.11 prefer iburst
其中的prefer优先级最高,不然在多个同步服务时,可能自己本地的ntp服务不被选中,会使用其他的源作为同步的时间选项。
其中的iburst是初始化时,每2秒发送一批同步
重新启动NTP服务器:
service ntp restart
查看同步情况:
watch ntpq –p