Shell脚本案例---修改配置文件

一 需求

声明:下列配置文件的参数数值是个人随意设置的,真实脚本请根据生产环境要求设置。

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
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shell脚本中,可以使用sed命令来修改文件内容。可以按照步骤进行操作: 1. 首先,使用grep命令来检查是否能够匹配到要修改的参数。如果无法匹配到,则可以使用echo命令将完整的参数和数值信息添加到文件末尾。 2. 如果能够匹配到要修改的参数,可以使用sed命令来替换参数所在的整行内容。可以使用sed命令的s选项来指定要替换的模式和替换的内容。 3. 在进行替换之前,建议先备份文件,以防止修改错误导致数据丢失。可以使用cp命令来创建文件的备份副本。 使用这些步骤,可以在Shell脚本中实现批量修改文件的内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Shell脚本实现批量替换文件内容](https://download.csdn.net/download/weixin_38686658/12846316)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Shell脚本案例---修改配置文件](https://blog.csdn.net/oldboy1999/article/details/128233372)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值