ansible自动化:操作系统初始化具体实现

《运维思索:操作系统配置规范化、自动化》一文介绍了对于一台基于安装规范交付的操作系统,还不能够直接用于生产环境,我们还需要进一步的优化,如内核参数、时间同步、排查工具、安全加固等等,保证主机安全的同时、避免因操作系统配置引发的问题。

需求

在此我们将操作系统基于安全、审计、管理等角度出发,进行了一系列优化:

用户

服务器使用固定用户,主要为管理用户、应用用户、日志用户。此处可根据堡垒机的系统用户进行分配,避免用户混乱。

软件源

安装基础组件需要通过统一的软件源。

关闭服务

统一关闭selinux、iptables、sendmail、postfix等无用服务,保证服务的最小化。

初始目录

创建固定的初始目录,如应用、日志、备份等目录,可参照《运维思索:目录管理规范的重要性》中的目录规范。

limit及内核参数

文件句柄、进程数等

DNS及NTP

环境变量及历史命令记录

终端超时

历史命令记录及远程备份

ssh优化

禁止root登录

ssh登录慢优化

修改默认端口

安全设置

密码复杂度及长度、禁止ctrl+alt+delete等,可按照具体的安全审计要求自行扩展。

规划

从上述需求来看,我们可以轻松利用ansible playbook来编排实现。但此时请先不要上头,我们还是来按以下场景来规划下:

对于新服务器,我们可以playbook直接执行所有初始化操作;

对于老服务器,我们只需单独执行某个优化即可;

playbook需要兼容Centos6、Centos7等多个版本;

因此,我们需要利用playbook的tag功能以及gather_facts获取操作系统版本,现将我们的需求按task进行分类:

vim task/main.yml- include: user.yml 

(1)需要区分操作系统版本号的task,如safe.yml、repo.yml、zabbix_agent.yml、iptables.yml、init_pkg.yml,可以通过gather_facts获取相关信息,并进行以下判断:

when: ansible_distribution_major_version == “7”或when: ansible_distribution_major_version == “6”

(2)需要区分功能的task,如safe.yml、user.yml、zabbix-agent.yml等,可以通过tag打上自定义标签,以便后续的个性化执行:

通过以上两种方式,我们就可以通过playbook实现按需订制了,满足以后的多样性需求的优化。

另外,为方便订制,我们还需要提前规划变量,即将在不同场景下将可变参数提取为变量,这样减少了对playbook的侵入,如:

vim vars/main.yml

具体实现

1.目录结构

[root@test roles]

2.vars变量

vim vars/main.yml

3.task 任务

(1)user.yml

(2)repl.yml

(3)init_pkg.yml

(4)profile.yml

(5)selinux.yml

– name: stop selinux selinux: state=disabled tags: stop_selinux

– name: disable selinux replace: path=/etc/selinux/config regexp=^SELINUX=enforcing replace=SELINUX=disabled  tags: disable_selinux

(6)dir.yml

(7)limit.yml

– name: change limits lineinfile: path=/etc/security/limits.conf line={{ item }} with_items: – “* soft nofile 655350” – “* hard nofile 655350” – “* soft nproc 65535” – “* hard nproc 65535”  tags: limits

(8)iptables.yml

– name: stop firewalld service: enabled=false name=firewalld state=stopped when: ansible_distribution_major_version == “7”

– name: stop iptables service: enabled=false name=iptables state=stopped  when: ansible_distribution_major_version == “6”

(9)sysctl.yml

– name: set sysctl.conf template: src: sysctl.conf.j2 dest: /etc/sysctl.conf backup: yes tags: set_sysctl

– name: “sysctl -p” command: sysctl -p ignore_errors: True  tags: reload_sysctl

(10)rc.local.yml

– name: chmod +x /etc/rc.d/rc.local  file: path=/etc/rc.d/rc.local mode=0755

(11)dns.yml

– name: config dns lineinfile: path: /etc/resolv.conf line: “{{ item }}” with_items: – “search test.com” – “nameserver 10.10.58.2”

(12)ntp.yml

– name: set ntp cron: name=”time sync for ntp” job=”/usr/sbin/ntpdate ntp.test.com && /sbin/hwclock -w” hour=”*” state=present tags: set_ntp

(13)rsyslog.yml

– name: modify rsyslog.conf replace: path: /etc/rsyslog.conf regexp: ‘cron.none’ replace: ‘cron.none;local3.none’ notify: restart rsyslog tags: rsyslog

– name: add rsyslog.conf lineinfile:  path: /etc/rsyslog.conf line: “{{ item }}” with_items: – “local3.notice @10.164.201.114:514” – ‘:msg, contains, “zabbix” ~’ – ‘authpriv.* @10.164.201.114:514’ notify: restart rsyslog tags: rsyslog

– name: restart rsyslog service: enabled=true name=rsyslog state=restarted  tags: restart rsyslog

(14)zabbix_agent.yml

– name: copy zabbix-agent7 rpm file to server copy: src: “{{ item }}”  dest: “{{ soft_dir }}” with_items: – “zabbix-agent-3.0.14-1.el7.x86_64.rpm” – “zabbix-release-3.0-1.el7.noarch.rpm” – “zabbix-sender-3.0.14-1.el7.x86_64.rpm” when: ansible_distribution_major_version == “7” tags: zabbix-agent

– name: install rpm yum: 

(15)safe.yml

(16)ssh.yml

– name: set sshd_config replace: path=/etc/ssh/sshd_config regexp={{ item.regexp }} replace={{ item.replace }} with_items:

注意:请最后执行ssh.yml,由于进行了ssh优化,一旦过程中有问题,会导致root无法登录。

4.templates 模板

5.handlers 

– name: restart sshd service: name=sshd state=restarted- name: restart rsyslog service: name=rsyslog state=restarted- name: restart zabbix-agent service: name=zabbix-agent state=restarted

6.files 

files目录中主要存放task所有需要的源文件。

执行

总结

经过playbook的编排,我们实现了基于《操作系统安装规范》、《操作系统配置规范》、《目录管理规范》等的操作自动化。此过程中最重要的不是playbook的具体实现,而是我们怎样去根据规范去有目的的去配置。

ansible自动化:mysql主从同步

K8SEASY:一键安装K8S高可用集群

运维思索:操作系统配置规范化、自动化

运维思索:目录管理规范的重要性

运维思索:操作系统安装规范化

 

ansible自动化:操作系统初始化具体实现》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:http://www.hashtobe.com/636.html