ubuntu安全配置基线
- [1. 身份鉴别策略组检测](#1. 身份鉴别策略组检测)
-
- [1.1. 口令周期检测](#1.1. 口令周期检测)
-
- [1.1.1. 最长使用周期小于等于90天(非强制)](#1.1.1. 最长使用周期小于等于90天(非强制))
- [1.1.2. 查看密码期限:最短更换周期大于等于2天](#1.1.2. 查看密码期限:最短更换周期大于等于2天)
- [1.1.3. 距失效提示天数大于等于5天](#1.1.3. 距失效提示天数大于等于5天)
- [1.2. 密码复杂度检测](#1.2. 密码复杂度检测)
-
- [1.2.1. 密码复杂性要求](#1.2.1. 密码复杂性要求)
- [1.3. 登录锁定检测](#1.3. 登录锁定检测)
- [1.4. Root权限用户](#1.4. Root权限用户)
-
- [1.4.1. root权限用户检测 (非强制)](#1.4.1. root权限用户检测 (非强制))
- [1.5. Wheel组(非强制)](#1.5. Wheel组(非强制))
-
- [1.5.1. wheel组检测 (非强制)](#1.5.1. wheel组检测 (非强制))
- [2. 访问控制策略组检测](#2. 访问控制策略组检测)
-
- [2.1. 空口令监测](#2.1. 空口令监测)
-
- [2.1.1. 空口令账户](#2.1.1. 空口令账户)
- [2.2. 弱口令检测](#2.2. 弱口令检测)
-
- [2.2.1. 弱口令账户](#2.2.1. 弱口令账户)
- [3. 安全审计策略组检测](#3. 安全审计策略组检测)
-
- [3.1. 日志守护进程](#3.1. 日志守护进程)
-
- [3.1.1. 开启日志守护进程](#3.1.1. 开启日志守护进程)
- [4. SSH策略检测](#4. SSH策略检测)
-
- [4.1. SSH检测](#4.1. SSH检测)
-
- [4.1.1. 最大失败尝试登录次数小于等于5(需要修改)](#4.1.1. 最大失败尝试登录次数小于等于5(需要修改))
- [4.1.2. 开启密码认证](#4.1.2. 开启密码认证)
- [4.1.3. 开启RSA认证](#4.1.3. 开启RSA认证)
- [5. 入侵防范策略组监测](#5. 入侵防范策略组监测)
-
- [5.1. 防火墙](#5.1. 防火墙)
1. 身份鉴别策略组检测
准备:
安装一个PAM模块来启用cracklib支持,这可以提供额外的密码检查功能。
在Debian,Ubuntu或者Linux Mint使用命令:
sudo apt-get install libpam-cracklib
这个模块在CentOS,Fedora或者RHEL默认安装了。但是在Ubuntu这些系统上就必需安装。
1.1. 口令周期检测
1.1.1. 最长使用周期小于等于90天(非强制)
sudo vim /etc/login.defs
bash
PASS_MAX_DAYS 90
PASS_MAX_DAYS 99999 代表永不过期
1.1.2. 查看密码期限:最短更换周期大于等于2天
bash
PASS_MIN_DAYS 2
检查命令:
bash
chage -l root
1.1.3. 距失效提示天数大于等于5天
bash
PASS_WARN_AGE 5
1.2. 密码复杂度检测
1.2.1. 密码复杂性要求
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用户输入旧密码,因此不会执行比较旧密码和新密码的检查
方法:
bash
vim /etc/pam.d/common-password
bash
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.3. 登录锁定检测
普通用户触发锁定次数小于等于5
普通用户锁定时间大于等于5分钟
Root用户触发锁定次数小于等于5
Root用户锁定时间大于等于5分钟具体安装配置:
1、修改如下配置文件:(不建议修改)
这个只是限制了用户从tty登录,而没有限制远程登录,如果想限制远程登录,需要改sshd
文件
bash
vim /etc/pam.d/login
在第二行添加
bash
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文件(建议修改)
bash
vim /etc/pam.d/sshd
继续在第二行上添加
bash
auth required pam_tally2.so deny=5 unlock_time=300 even_deny_root=5 root_unlock_time=300
查看用户登录失败的次数:
bash
sudo pam_tally2 --user
结果
bash
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
解锁指定用户:
bash
sudo pam_tally2 -r -u admin
bash
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的时候,输入密码错误超过三次但是没有提示,但是只要超过设定的值,输入正确的密码也是登陆不了的!,还是要等到设定的时间在重新尝试输入正确密码进行登录认证
1.4. Root权限用户
1.4.1. root权限用户检测 (非强制)
检查配置文件cat /etc/passwd
,不能包含用户标识号为0,除root用户外。
以第一行为例,从左至右,分别表示:
帐号名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
1.5. Wheel组(非强制)
1.5.1. wheel组检测 (非强制)
命令: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组那行的末尾。
1.6. 相同ID用户
1.6.1. 相同ID用户检测
命令:cat /etc/passwd
检查配置/etc/passwd
中,是否包含用户标识号相同的帐号,用户标识号位置如下:
以第一行为例,从左至右,依次为:
帐号名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
2. 访问控制策略组检测
2.1. 空口令监测
2.1.1. 空口令账户
命令:cat /etc/shadow
(检查shadow文件中密码为空且的用户)
如图上所示,输出test3为空口令账户,且可以登录的用户。
用户test2:!!:18820:0:99999:7:::
第二个字段是":!!:"
代表没有设置密码,但无法登录。
用户test3::18820:0:99999:7:::
第二个字段是"::"
代表第二个字段密码为空,且可以登录。
如果检测出有空口令账户,可以做以下处理:
A. 删除该用户
命令如下:
bash
userdel 用户名
rm -rf /home/用户名 (可选,表示删除该用户的主目录)
B. 给该用户设置密码
bash
passwd 用户名
2.2. 弱口令检测
2.2.1. 弱口令账户
如果检测出弱口令账户,建议设置符合秘密复杂度要求的密码,命令如下:
bash
passwd 用户名
3. 安全审计策略组检测
3.1. 日志守护进程
3.1.1. 开启日志守护进程
当rsyslog没有在运行,则检测失败,操作命令如下:
bash
systemctl status rsyslog (查看状态)
systemctl stop rsyslog (停止)
systemctl start rsyslog (启动)
启动成功后状态:
查看进程有没有启动:
命令:ps -ef | grep rsyslog
4. SSH策略检测
4.1. SSH检测
执行如下命令,修改配置文件
bash
sudo vim /etc/ssh/sshd_config
4.1.1. 最大失败尝试登录次数小于等于5(需要修改)
bash
MaxAuthTries 5
4.1.2. 开启密码认证
bash
PasswordAuthentication yes
4.1.3. 开启RSA认证
bash
RSAAuthentication yes (有的系统 需要手动添加)
4.1.4. 开启公钥验证
bash
PubkeyAuthentication yes
重启sshd生效,重启命令如下:
CentOS系列: systemctl restart sshd
后续随着建立应用账户会回收root权限登陆。
5. 入侵防范策略组监测
5.1. 防火墙
查看状态
bash
systemctl status firewalld.service
启动防火墙
bash
systemctl start firewalld.service
关闭防火墙
bash
systemctl stop firewalld.service
重新启动防火墙
bash
systemctl restart firewalld.service