前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux-centos7 基于等保3的系统安全体系

linux-centos7 基于等保3的系统安全体系

作者头像
阿dai学长
发布2019-04-03 10:02:10
2.2K0
发布2019-04-03 10:02:10
举报
文章被收录于专栏:阿dai_linux阿dai_linux

sshd配置

配置文件:/etc/ssh/sshd_config

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

参考文档:https://man.openbsd.org/ssh.1

ssh访问控制

代码语言:javascript
复制
AllowUsers <userlist> 
AllowGroups <grouplist> 
DenyUsers <userlist> 
DenyGroups <grouplist> 

配置加密算法

代码语言:javascript
复制
Ciphers aes256-ctr,aes192-ctr,aes128-ctr  # 使用已批准的加密类型
MACs hmac-sha2-512,hmac-sha2-256          # 使用已批准的Mac算法

密码验证

代码语言:javascript
复制
PermitEmptyPasswords no  # 禁止无密码访问服务器
PermitRootLogin yes      # 是否禁止使用root登录(为方便管理,暂未收回权限)

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

openssh主机认证

代码语言:javascript
复制
HostbasedAuthentication no

限制用户认证次数

代码语言:javascript
复制
MaxAuthTries 4  # 等保三要求该值小于等于 4

ssh空闲超时

代码语言:javascript
复制
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等。
  • 配置文件示例:
20181119154261048337715.png
20181119154261048337715.png

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

  • 第一列:代表模块类型
  • 第二列:代表控制标记
  • 第三列:代表模块路径
  • 第四列:代表模块参数

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。

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

模块参数

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

代码语言:javascript
复制
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 ):

代码语言:javascript
复制
#%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模块调用,所以在配置时要严格按顺序配置,否则可能导致配置不生效,以下面的配置为例:

代码语言:javascript
复制
# 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文件中。

代码语言:javascript
复制
# 密码过期,登录时需要更改密码
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文件,最终因密码过期等原因无法登录服务器——后果惨重!!!

参考

更多示例请见:linux中pam模块

关于各个模块参数详解请见:The Linux-PAM System Administrators' Guide

密码过期时间

  • 命令: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 <user>

邮件管理

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

  • 编辑 /etc/postfix/main.cf 文件, inet_interfaces = localhost
  • 重启postfix。

日志管理

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

代码语言:javascript
复制
# 默认
*.* @@remote-host:514

等保要求:

  • 可以将"*.*"替换为你实际需要的日志信息。比如:kern.* ; mail.* 等等;
  • 或者关闭远程记录日志功能(直接注销即可)。

grub加密

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

代码语言:javascript
复制
password xxxxxxxx

aide工具

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

代码语言:javascript
复制
yum install -y aide

内核管理

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

代码语言:javascript
复制
# 在 /etc/sysctl.conf 文件中设置以下参数:
net.ipv4.conf.all.log_martians = 1 
net.ipv4.conf.default.log_martians = 1

生效以上配置:

代码语言:javascript
复制
# 开启并记录欺骗,源路由和重定向包
$ 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

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/11/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sshd配置
    • ssh访问控制
      • 配置加密算法
        • 密码验证
          • openssh主机认证
            • 限制用户认证次数
              • ssh空闲超时
              • 用户认证及密码强度管理(pam)
                • pam 简介
                  • pam 配置文件介绍
                    • pam 模块类型
                      • pam 控制标记
                        • 模块路径
                          • 模块参数
                            • 常用pam模块介绍
                              • 实例及参数介绍
                                • 实例1:密码强度及用户认证方式
                                • 实例2:su权限配置
                                • 注意事项
                              • 参考
                                • 密码过期时间
                                  • 用户及密码活跃性
                              • 邮件管理
                              • 日志管理
                              • grub加密
                              • aide工具
                              • 内核管理
                              相关产品与服务
                              主机安全
                              主机安全(Cloud Workload Protection,CWP)基于腾讯安全积累的海量威胁数据,利用机器学习为用户提供资产管理、木马文件查杀、黑客入侵防御、漏洞风险预警及安全基线等安全防护服务,帮助企业构建服务器安全防护体系。现支持用户非腾讯云服务器统一进行安全防护,轻松共享腾讯云端安全情报,让私有数据中心拥有云上同等级别的安全体验。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档