sshd配置
配置文件:/etc/ssh/sshd_config
Note: 更改ssh相关配置后需要重启sshd服务 systemctl restart sshd
参考文档:https://man.openbsd.org/ssh.1
ssh访问控制
AllowUsers <userlist> AllowGroups <grouplist> DenyUsers <userlist> DenyGroups <grouplist>
配置加密算法
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文件,最终因密码过期等原因无法登录服务器——后果惨重!!!
参考
更多示例请见: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
:
# 默认 *.* @@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
(adsbygoogle = window.adsbygoogle || []).push({});
来源:oschina
链接:https://my.oschina.net/u/2353881/blog/3197441