centos 等保三级_linux-centos7 基于等保3的系统安全体系

sshd配置

配置文件:/etc/ssh/sshd_config

Note: 更改ssh相关配置后需要重启sshd服务 systemctl restart sshd

ssh访问控制

AllowUsers

AllowGroups

DenyUsers

DenyGroups

配置加密算法

Ciphers aes256-ctr,aes192-ctr,aes128-ctr # 使用已批准的加密类型

MACs hmac-sha2-512,hmac-sha2-256 # 使用已批准的Mac算法

密码验证

PermitEmptyPasswords no # 禁止无密码访问服务器

PermitRootLogin yes # 是否禁止使用root登录(为方便管理,暂未收回权限)

如果禁用root需要创建一个超级管理员。

openssh主机认证

HostbasedAuthentication no

限制用户认证次数

MaxAuthTries 4 # 等保三要求该值小于等于 4

ssh空闲超时

ClientAliveInterval 300 # 小于等于300s

ClientAliveCountMax 3 # 存活用户数小于等于3

用户认证及密码强度管理(pam)

pam 简介

Linux-PAM(linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式.。换句话说,不用(重新编写)重新编译一个包含PAM功能的应用程序,就可以改变它使用的认证机制。这种方式下,就算升级本地认证机制,也不用修改程序。

PAM使用配置 /etc/pam.d/ 下的文件,来管理对程序的认证方式。应用程序调用相应的配置文件,从而调用本地的认证模块。模块放置在 /lib/security 下,以加载动态库的形式进,像我们使用su命令时,系统会提示你输入root用户的密码,这就是su命令通过调用PAM模块实现的。

pam 配置文件介绍

PAM配置文件有两种写法:

一种是写在 /etc/pam.conf 文件中,但centos6之后的系统中,这个文件就没有了。

另一种写法是,将PAM配置文件放到 /etc/pam.d/ 目录下,其规则内容都是不包含 service 部分的,即不包含服务名称,而 /etc/pam.d 目录下文件的名字就是服务名称。如: vsftpd,login等。

配置文件示例:

由上图可以将配置文件内容划分为四列:

第一列:代表模块类型

第二列:代表控制标记

第三列:代表模块路径

第四列:代表模块参数

pam 模块类型

Linux-PAM有四种模块类型,分别代表四种不同的任务,它们是:

认证管理(auth)

账号管理(account)

会话管理(session)

密码(password)管理

一个类型可能有多行,它们按顺序依次由PAM模块调用 。

管理方式

说明

auth

用来对用户的身份进行识别。如:提示用户输入密码,或判断用户是否为root等。

account

对帐号的各项属性进行检查。如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等。

session

这个模块用来定义用户登录前的,及用户退出后所要进行的操作。如:登录连接信息,用户数据的打开与关闭,挂载文件系统等。

password

使用用户信息来更新。如:修改用户密码。

pam 控制标记

PAM使用控制标记来处理和判断各个模块的返回值。(在此只说明简单的认证标记)

控制标记

说明

required

表示即使某个模块对用户的验证失败,也要等所有的模块都执行完毕后,PAM 才返回错误信息。这样做是为了不让用户知道被哪个模块拒绝,如果对用户验证成功,所有的模块都会返回成功信息。

requisite

与required相似,但是如果这个模块返回失败,则立刻向应用程序返回失败,表示此类型失败,不再进行同类型后面的操作。

sufficient

表示如果一个用户通过这个模块的验证,PAM结构就立刻返回验证成功信息(即使前面有模块fail了,也会把 fail结果忽略掉),把控制权交回应用程序。后面的层叠模块即使使用requisite或者required 控制标志,也不再执行。如果验证失败,sufficient 的作用和 optional 相同

optional

表示即使本行指定的模块验证失败,也允许用户接受应用程序提供的服务,一般返回PAM_IGNORE(忽略)。

模块路径

模块路径,即要调用模块的位置.。如果是64位系统,一般保存在/lib64/security,如:pam_unix.so。

同一个模块,可以出现在不同的类型中。它在不同的类型中所执行的操作都不相同。这是由于每个模块针对不同的模块类型,编制了不同的执行函数。

模块参数

模块参数,即传递给模块的参数。参数可以有多个,之间用空格分隔开,如:

password requisite pam_cracklib.so try_first_pass retry=3 minlen=14 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

常用pam模块介绍

pam模块

结合管理类型

说明

pam_unix.so

auth

提示用户输入密码,并与/etc/shadow文件相比对。匹配返回0

account

检查用户的账号信息(包括是否过期等)。帐号可用时,返回0

password

修改用户的密码。将用户输入的密码,作为用户的新密码更新shadow文件

pam_shells.so

auth/account

如果用户想登录系统,那么它的shell必须是在/etc/shells文件中之一的shell

pam_deny.so

account/auth/password/session

该模块可用于拒绝访问

pam_permit.so

account/auth/password/session

模块任何时候都返回成功

pam_securetty.so

auth

如果用户要以root登录时,则登录的tty必须在 /etc/securetty 之中

pam_listfile.so

account/auth/password/session

访问应用程的控制开关

pam_cracklib.so

password

这个模块可以插入到一个程序的密码栈中,用于检查密码的强度

pam_limits.so

session

定义使用系统资源的上限,root用户也会受此限制,可以通过 /etc/security/limits.conf 或 /etc/security/limits.d/*.conf 来设定

pam_tally2.so

auth

设置认证限制(见实例)

实例及参数介绍

实例1:密码强度及用户认证方式

配置密码复杂度和认证方式(同时修改文件 /etc/pam.d/system-auth 和 /etc/pam.d/password-auth ):

#%PAM-1.0

auth required pam_faillock.so preauth audit silent deny=5 unlock_time=900

auth [success=1 default=bad] pam_unix.so

auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900

auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=900

auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=10

# deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户

# unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;

# root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒;

# 此处使用的是 pam_tally2 模块,如果不支持 pam_tally2 可以使用 pam_tally 模块。另外,不同的pam版本,设置可能有所不同,具体使用方法,可以参照相关模块的使用规则

password requisite pam_cracklib.so try_first_pass retry=3 minlen=14 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1

# try_first_pass:表明该模块首先应当使用前一个模块从用户那里得到的密码,如果该密码验证不通过,再提示用户输入新的密码

# minlen:指定密码最小长度为14

# dcredit/ucredit/ocredit/lcredit=-1:至少含有1个数字、大写字母、小写字母、特殊字符

# retry=3:配置密码时,提示3次用户密码错误输入

# difok=6:配置密码时,新密码中至少6个字符与旧密码不同(默认为5)

# reject_username:新密码中不能包含与用户名称相同的字段

# maxrepeat=N:拒绝包含超过N个连续字符的密码,默认值为0表示此检查已禁用

# maxsequence=N:拒绝包含大于N的单调字符序列的密码,例如’1234’或’fedcb’,默认情况下即使没有这个参数配置,一般大多数这样的密码都不会通过,除非序列只是密码的一小部分

# maxcla***epeat=N:拒绝包含相同类别的N个以上连续字符的密码。默认值为0表示此检查已禁用。

# use_authtok:强制使用先前的密码,不提示用户输入新密码(不允许用户修改密码)

实例2:su权限配置

配置文件位置:/etc/pam.d/su auth required pam_wheel.so use_uid

创建有sudo权限的用户组 /etc/group : wheel \:x\:10:root,<user list>

上述操作可限定具有sudo权限的用户。

注意事项

在[pam模块类型](pam 模块类型)中有讲到各个模块按顺序依次由PAM模块调用,所以在配置时要严格按顺序配置,否则可能导致配置不生效,以下面的配置为例:

# tag1

password requisite pam_cracklib.so try_first_pass retry=3 minlen=14 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

# tag2

password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

在该配置中我标记了其顺序分别为tag1、tag2,pam_cracklib.so用于密码强度验证,pam_unix.so用于提示用户更新密码并将密码保存到shadow文件中。

# 密码过期,登录时需要更改密码

You are required to change your password immediately (password aged)

Last login: Fri Nov 16 10:54:11 2018 from host2

Changing password for root.

(current) UNIX password:

New password:

Retype new password:

如果将tag1放到tag2后面,会导致远程更改用户密码无法更新到shadow文件,最终因密码过期等原因无法登录服务器——后果惨重!!!

参考

密码过期时间

命令:chage $ chage -h

用法:chage [选项] 登录

选项:

-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”

-E, --expiredate 过期日期 将帐户过期时间设为“过期日期”

-h, --help 显示此帮助信息并推出

-I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态

-l, --list 显示帐户年龄信息

-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”

-M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数”

-R, --root CHROOT_DIR chroot 到的目录

-W, --warndays 警告天数 将过期警告天数设为“警告天数”

对应的配置文件 /etc/login.defs : PASS_MAX_DAYS 90 # 密码过期时间

PASS_MIN_DAYS 0 # 两次密码更改时间差最小天数

PASS_MIN_LEN 14 # 密码最小长度(密码强度在 /etc/pam.d/password-auth 配置)

PASS_WARN_AGE 7 # 密码过期前警告天数

用户及密码活跃性

将默认密码不活动期限设置为30天: useradd -D -f 30

将不合规的用户设置为失效状态:chage --inactive 30

邮件管理

将邮件传输代理配置为仅限本地模式:

编辑 /etc/postfix/main.cf 文件, inet_interfaces = localhost ;

重启postfix。

日志管理

只记录指定日志 /etc/rsyslog.conf :

# 默认

*.* @@remote-host:514

等保要求:

可以将"*.*"替换为你实际需要的日志信息。比如:kern.* ; mail.* 等等;

或者关闭远程记录日志功能(直接注销即可)。

grub加密

编辑配置文件 /etc/grub.d/40_custom 添加如下配置:

password xxxxxxxx

aide工具

AIDE(Advanced Intrusion Detection Environment,高级入侵检测环境)是个入侵检测工具,主要用途是检查文档的完整性。AIDE生产一个文件系统状态的快照,其中包括修改时间,权限和文件哈希值,然后可以其与文件系统的当前状态进行比较,以检测对系统的修改。

yum install -y aide

内核管理

检查可疑数据包是否被记录,内核配置如下:

# 在 /etc/sysctl.conf 文件中设置以下参数:

net.ipv4.conf.all.log_martians = 1

net.ipv4.conf.default.log_martians = 1

生效以上配置:

# 开启并记录欺骗,源路由和重定向包

$ sysctl -w net.ipv4.conf.all.log_martians=1

$ sysctl -w net.ipv4.conf.default.log_martians=1

# 清空路由缓存

$ sysctl -w net.ipv4.route.flush=1

# 更新系统内核配置

$ sysctl -p

你可能感兴趣的:(centos,等保三级)