专栏首页WalkingCloud【CentOS7操作系统安全加固系列】第(1)篇

【CentOS7操作系统安全加固系列】第(1)篇

1、口令锁定策略

规则描述:设置口令认证失败后的锁定策略 为了保障用户系统的安全,建议用户设置口令出错次数的阈值,以及由于口令尝试被锁定用户的自动解锁时间。用户锁定期间,任何输入被判定为无效,锁定时间不因用户的再次输入而重新计时;解锁后,用户的错误输入记录被清空。通过上述设置可以有效防范口令被暴力破解,增强系统的安全性。

修改方法:例如设置口令最大的出错次数 5 次,系统锁定后的解锁时间为 180 秒 在配置文件/etc/pam.d/system-auth 和/etc/pam.d/password-auth 中添加

auth required pam_faillock.so preauth audit silent deny=5 unlock_time=180
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=180
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=180

pam_faillock.so 配置项说明

  • authfail:捕获用户登录失败的事件
  • deny=5:用户连续登录失败次数超过 5 次即被锁定
  • unlock_time=180:普通用户自动解锁时间为 180 秒(即 3 分钟)
  • even_deny_root:同样限制 root 帐户

操作步骤截图

修改前

修改后

验证测试

centos用户ssh登录多次输错密码

faillock命令查看锁定情况

faillock --user username --reset解锁操作

2、口令生存期

出于系统安全性考虑,建议设置口令有效期限,且口令到期前通知用户更改口令。

规则描述:该设置确定在系统要求用户更改某个密码之前可以使用改口令的期限及口令过期提前告警时间(以天为单位),此策略使得攻击者用来破解用户密码以及访问网络资源的时间受到限制

审计描述:设置检查配置文件/etc/login.defs 的选项:应设置 PASS_MAX_DAYS 的值大于等于 10 且小于等于 90,PASS_MIN_DAYS 的值为 10, PASS_WARN_AGE(口令过期提前时间)的值为 7,同时还要检查文件/etc/shadow 中有口令且可登录用户(root 用户除外)的口令保持有效的最大天数为大于等于 10 且小于等于 90,两次修改口令之间所需的最小天数为 10,口令失效告警时间为 7。

修改建议:设置配置文件/etc/login.defs 的选项:PASS_MAX_DAYS 90(10~90), PASS_MIN_DAYS 10, PASS_WARN_AGE 7,同时对已有用户还需要修改/etc/shadow 文件中有密码且可登录用户(root 用户除外)的口令保持有效的最大天数为大于等于 10 且小于等于 90,两次修改口令之间所需的最小天数为 10,口令失效告警时间为 7

实现:口令有效期的设置通过修改/etc/login.defs 文件实现

login.defs 配置项说明

  • PASS_MAX_DAYS 口令最大有效期:建议设置为 90
  • PASS_MIN_DAYS 两次修改口令的最小间隔时间:建议设置为 10
  • PASS_WARN_AGE 口令过期前开始提示天数:建议设置为 7

说明:login.defs 是设置用户帐号限制的文件,可配置口令的最大过期天数、最大长度约束等。该文件里的配置对 root 用户无效。如果/etc/shadow 文件里有相同的选项,则以/etc/shadow 配置为准,即/etc/shadow 的配置优先级高于/etc/login.defs。口令过期后用户重新登录时,提示口令过期并强制要求修改,不修改则无法进入系统。

sed -i '/^PASS_MAX_DAYS/cPASS_MAX_DAYS   90' /etc/login.defs
sed -i '/^PASS_MIN_DAYS/cPASS_MIN_DAYS   10' /etc/login.defs

修改前

修改后

3、口令复杂度

规则描述:该设置确定用户账户口令包含的最少字符数

审计描述:执行命令:cat /etc/pam.d/password-auth /etc/pam.d/system-auth | grep -v '^\s*#' | grep password | grep pam_pwquality.so

检查是否存在以下内容:password requisite pam_pwquality.so try_first_pass retry=3 minlen=8 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

执行命令:cat /etc/security/pwquality.conf

检查是否存在以下内容:minlen = 8 dcredit = -1 ucredit = -1 ocredit = -1 lcredit = -1

修改建议:编辑/etc/pam.d/password-auth 和 /etc/pam.d/system-auth 文件,分别修改包含 minlen 的 pam_pwquality.so 模块如下:password requisite pam_pwquality.so try_first_pass retry=3 minlen=8 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1 或编辑/etc/security/pwquality.conf 文件,修改以下内容:minlen = 8 dcredit = -1 ucredit = -1 ocredit = -1 lcredit = -1

备注:当配置文件/etc/pam.d/password-auth 和/etc/pam.d/system-auth 未配置 minlen、dcredit、ucredit、ocredit、lcredit 时,/etc/security/pwquality.conf 文件设置生效

编辑/etc/security/pwquality.conf 文件,修改以下内容:

  • minlen = 8 口令长度至少包含 8 个字符
  • dcredit = -1 口令包含N个数字
  • ucredit = -1 口令包含N大写字母
  • ocredit = -1 口令包含N个特殊字符
  • lcredit = -1 口令包含N个小写字母
  • N<0可以自行man pwquality.conf查看解释
cat >>/etc/security/pwquality.conf << EOF
minlen = 8
dcredit = -1
ucredit = -1
ocredit = -1
lcredit = -1
EOF

4、删除无关账号

规则描述:删除无关账号

审计描述:检查/etc/shadow文件,确认是否有以下用户(adm|lp|sync|halt|news|nfsnobody|mail|uucp|operator|games|gopher|ftp|nobody|nobody4|noaccess|listen|webservd|rpm|dbus|avahi|mailnull|smmsp|nscd|vcsa|rpc|rpcuser|nfs|sshd|pcap|ntp|haldaemon|distcache|apache|webalizer|squid|xfs|gdm|sabayon|named)

若有则检查文件中是否存在系统中未锁定的无关用户(用户密码字段列不是以*或者!开头)和需要锁定和删除的shell域设置的用户(用户shell域不是/bin/false或/sbin/nologin),均不存在则pass

修改建议:删掉不符规范的用户,执行:userdel username。或者编辑/etc/passwd文件,修改用户的密码字段和shell域。

egrep "^(adm|lp|sync|halt|news|nfsnobody|mail|uucp|operator|games|gopher|ftp|nobody|nobody4|noaccess|listen|webservd|rpm|dbus|avahi|mailnull|smmsp|nscd|vcsa|rpc|rpcuser|nfs|sshd|pcap|ntp|haldaemon|distcache|apache|webalizer|squid|xfs|gdm|sabayon|named):" /etc/passwd 2>/dev/null|awk -F':' '($7 != "/bin/false" && $7 != "/sbin/nologin") {print $1":"$7}'

返回的结果中含有 sync:/bin/sync halt:/sbin/halt

解决方法

userdel sync
userdel halt

5、禁止存在空密码的帐号

安全起见,在/etc/passwd 中用户的密码是被保护的状态,即使用了*号来隐藏。而实际的密码内容是加密后保存在/etc/shadow 文件中,我们确认是否存在空口令的用户就确认该文件中密码对应字段的长度是否为 0, 如果为 0 则证明该用户密码为空。通过使用命令来查找是否存在该字段长度为 0 的用户

awk -F: 'length($2)==0 {print $1}' /etc/shadow

passwd -d 将用户密码设置为空

本文分享自微信公众号 - WalkingCloud(WalkingCloud2018),作者:yuanfan2012

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【CentOS7操作系统安全加固】第(2)篇

    规则描述:重新启用某个旧密码,要确保此密码在继上次使用后已被修改过几次。此策略是管理员能够通过确保旧密码不被连续重新使用来增强安全性

    yuanfan2012
  • CentOS7下部署JumpServer开源堡垒机

    JumpServer 是全球首款完全开源的堡垒机, 使用 GNU GPL v2.0 开源协议, 是符合 4A 的专业运维审计系统。

    yuanfan2012
  • CentOS7下使用growpart工具进行磁盘热扩容

    growpart - extend a partition in a partition table to fill available space

    yuanfan2012
  • 两个字解读“看病中心”北京的就医难

    两会代表和全国人民都在关心“就医难”问题,作为国内拥有顶尖医院最多的“看病中心”北京,“就医难”问题更加突出。 腾讯位置大数据带你来解读北京的就医难:哪里难?...

    腾讯位置服务
  • [不再“恐接”]苹果 iOS10 上线防骚扰 腾讯安全大数据积累再度释放

    腾讯云安全
  • Linux系统安全及应用

    L宝宝聊IT
  • 【help of python】ones

    py3study
  • Win10 + Ubuntu 16.04双系统完美安装教程【详细】

    设置BIOS,需要查询对应自己机型的BIOS快捷键,以我的Thinkpad E550为例,F1为进入BIOS,F12为启动项选择。 【注意】此时设置BIOS不...

    砸漏
  • AI人才年薪80万,这些人竟来自新工科

    互联网、云计算、大数据、智能机器人、三维(3D)打印等技术人才培养与争夺,成为焦点

    腾讯智慧教育
  • 跟林彪同志学数据挖掘

    用户1756920

扫码关注云+社区

领取腾讯云代金券