ansible实现服务器安全配置基线自动化核查及修复

【个人感悟拙见】

吾生也有涯,而知也无涯,以有涯随无涯,则殆已! —《庄子·内篇·养生主第三节》

知识是无穷无尽无限多的,本随笔用到ansible相关技术栈,不建议去把ansible全部知识点学完,可大致了解ansible是什么,能做些什么。然后结合实际工作需要场景去现学现用特定知识点。参考链接:【拥抱运维次元的哆啦A梦】什么是Ansible?

【功效】

通过ansible playbook实现一次编排,对批量服务器开展安全基线核查及修复任务,提升安全运维自动化能力。同时ansible playbook基于.yml文件进行管理,方便后续更新维护。

【技术栈】

  • Ansible
  • Linux
  • Python

【代码】

  1. 密码过期安全配置,核查并配置/etc/login.defs文件

PASS_MAX_DAYS 90 #设置密码过期日期
PASS_MIN_DAYS 1 #设置密码最少更改日期
PASS_MIN_LEN 8 #设置密码最小长度
PASS_WARN_AGE 7 #设置过期提前警告天数

点击查看代码

---
- name: 服务器安全基线配置检查 
  hosts: k8s-test1           # 指定目标主机组/节点 
  gather_facts: no           # 禁用事实收集以加快执行速度 
  vars:                      # 定义变量区 
    file_name: "/etc/login.defs"   # 需修改的目标配置文件路径 
  become: true               # 启用特权权限执行任务 
  tasks:                     # 任务定义区 
    - name: "配置密码过期天数"
      lineinfile:            # 使用行编辑模块 
        path: '{{ file_name }}'   # 目标文件路径(变量引用)
        regexp: '^PASS_MAX_DAYS\s+\S+$'  # 正则匹配原配置行 
        line: 'PASS_MAX_DAYS   90'  # 新配置值(90天过期)
        state: present       # 确保存在该配置 
 
    - name: "配置密码最少更改日期"
      lineinfile:
        path: '{{ file_name }}'      
        regexp: '^PASS_MIN_DAYS\s+\S+$'
        line: 'PASS_MIN_DAYS   1'    # 最小间隔1天才能修改密码 
        state: present 
 
    - name: "配置密码最小长度" 
      lineinfile:
        path: '{{ file_name }}'
        regexp: '^PASS_MIN_LEN\s+\S+$'
        line: 'PASS_MIN_LEN    8'    # 密码长度至少8位 
        state: present 
 
    - name: "配置密码过期提前警告天数"
      lineinfile:
        path: '{{ file_name }}'
        regexp: '^PASS_WARN_AGE\s+\S+$'
        line: 'PASS_WARN_AGE   7'    # 过期前7天提醒 
        state: present 

  1. 密码复杂度安全配置,核查并配置/etc/pam.d/system-auth文件
    password requisite pam_cracklib.so minlen=8 ucredit=-2 lcredit=-1 dcredit=-4 ocredit=-1
  • minlen:最小密码长度
  • dcredit:最少数字
  • ucredit:最少大写字母
  • ocredit:最少特殊字符
  • lcredit:最少小写字符
  • retry:尝试次数
  • difok:最少不同字符

点击查看代码

- name: 服务器安全基线配置检查
  hosts: k8s-test1
  gather_facts: no
  vars:
    file_name: "/etc/pam.d/system-auth"
  become: true
  tasks:
    - name: "配置密码复杂度"
      lineinfile:
        path: '{{ file_name }}'
        regexp: '^password    requisite     pam_cracklib.so.*$'
        line: 'password    requisite     pam_cracklib.so retry=3 minlen=8 maxrepeat=4 ucredit=-2 lcredit=-1 dcredit=-4 ocredit=-1 difok=3 gecoscheck=1'
        state: present

【隐含前提】

  1. 已在linux服务器上安装ansible,安装方法可自行上网搜索。

  2. 配置了ansible操作主机对客户端主机的免密登录,linux免密登录配置方法可自行上网搜索。

来源链接:https://www.cnblogs.com/akita95/p/18782451

© 版权声明
THE END
支持一下吧
点赞5 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容