文章目录
一 需求
声明:下列配置文件的参数数值是个人随意设置的,真实脚本请根据生产环境要求设置。
1 检查 /etc/login.defs
参考以下设置
PASS_MAX_DAYS 900
PASS_MIN_DAYS 10
PASS_WARN_AGE 25
PASS_MIN_LEN 15
在我们的系统环境中,该配置文件是有上述的参数,只不过后面的数值不同。
我们要做的是,将数值进行替换成上述要求的数值
2 检查 /etc/pam.d/system-auth
检查文件配置的密码复杂度参数,首先检查是否有pam_cracklib.so
这个参数
如果没有,则需要进行添加参数,并添加后面的数值
如果有,则要求与我们下面要求的内容保持一致
password requisite pam_cracklib.so minlen=8 ucredit=-2 lcredit=-1 dcredit=-4 ocredit=-1
3 查看 /etc/rsyslog.conf
查看是否设置了下列项
kern.warning;*.err;authpriv.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.emerg :omusrmsg:*
local7.* /var/log/boot.log
如果没有,则进行添加参数
二 分析
1 备份+替换
首先,在修改这些重要的系统配置文件之前,一定要进行备份,必要时可以在备份文件后面加上日期date
其次,经过分析,原文件中PASS_MAX_DAYS
这些参数是顶头写的,因此我们直接 sed 命令的替换部分可以不用匹配前面的,只匹配后面的即可,即PASS_MAX_DAYS.*$
。
然后,我们将以PASS_MAX_DAYS
开头的所在行内容,进行整行替换。之所以要加“开头”,是因为在注释部分也有PASS_MAX_DAYS
,因此要精准匹配。
最后,将匹配中的所有输出信息屏蔽掉,加上&> /dev/null
。
2 备份+添加
首先,老规矩备份原文件。
其次,在查找自己的配置文件可以发现,默认是没有这个密码认证信息的。但为了更谨慎的修改,我们需要考虑,假如有该参数,则进行整行替换。
于是,首先利用grep
查看能不能匹配到该参数:
如果不能,则在文件末尾添加完整的参数和数值信息;
如果能,则用sed
把参数所在的整行内容进行替换。
3 备份+替换
首先,老规矩备份。
其次,经过比较发现,所需要的第一行和第二行的告警等级内容都对应的是/var/log/messages
。
如果进行操作,只需要将其整合在一行即可。
然后,在利用for
循环遍历测试后,我们发现只缺少kern.warning
和*.err
这两个参数。
综上所述,我们只需要做的是,将kern.warning
和*.err
这两个参数添加到mail.none
所在的行即可。(之所以选择mail.none
,是因为它在全文是唯一的)
三 代码展示
[root@master scripts]# cat change2.sh
#!/bin/bash
# 1)修改/etc/login.defs的参数
# 备份源文件
cp /etc/login.defs /etc/login.defs-$(date +%F).bak
# 替换 PASS_MAX_DAYS
sed -i 's#^PASS_MAX_DAYS.*$#PASS_MAX_DAYS 900#g' /etc/login.defs &> /dev/null
# 替换 PASS_MIN_DAYS
sed -i 's#^PASS_MIN_DAYS.*$#PASS_MIN_DAYS 10#g' /etc/login.defs &> /dev/null
# 替换 PASS_WARN_AGE
sed -i 's#^PASS_WARN_AGE.*$#PASS_WARN_AGE 25#g' /etc/login.defs &> /dev/null
# 替换 PASS_MIN_LEN
sed -i 's#^PASS_MIN_LEN.*$#PASS_MIN_LEN 15#g' /etc/login.defs &> /dev/null
# 2)检查/etc/pam.d/system-auth 的密码复杂度
# 备份源文件
cp /etc/pam.d/system-auth /etc/pam.d/system-auth-$(date +%F).bak
# 检查文件是否有这个参数
grep 'pam_cracklib.so' /etc/pam.d/system-auth
# 如果没有这个参数
if [ $? -ne 0 ];then
# 就在文末添加参数和值
echo 'password requisite pam_cracklib.so minlen=8 ucredit=-2 lcredit=-1 dcredit=-4 ocredit=-1' >> /etc/pam.d/system-auth
else
# 否则存在这个参数,将所在的整行内容替换
sed -i 's#^.*pam_cracklib.so.*$#password requisite pam_cracklib.so minlen=8 ucredit=-2 lcredit=-1 dcredit=-4 ocredit=-1#g' /etc/pam.d/system-auth &> /dev/null
fi
# 3)检查/etc/rsyslog.conf 的参数
# 先备份文件
cp /etc/rsyslog.conf /etc/rsyslog.conf-$(date +%F).bak
# 把mail.none所在的那一行进行整行内容替换(mail.none全文只出现了一次)
sed -i 's#^.*mail.none.*$#kern.warning;*.err;*.info;mail.none;authpriv.none;cron.none /var/log/messages#g' /etc/rsyslog.conf