制作centos/rhel 7虚拟机金模板(Golden Template)

制作centos/rhel 7虚拟机金模板(Golden Template)

制作centos/rhel 7虚拟机金模板(Golden Template)

纯干货分享
http://jiangjiang.space 回忆书签,转载请注明出处,谢谢

1. 什么是金模板(金影像)

golden template 或者 golden image 指的是纯净模板。虚机模板是用来作为新部署虚机得基础,因此模板是否纯净,是否有漏洞将影像以后实例化后得所有机器,因此需要特别对待。

2. 金模板制作

2.1 重模板和轻模板

在阐述金模板前,先讨论以模板的分类,我认为模板分为两类:

  • 重模板
  • 轻模板

两种模板的使用方式是不一样的

  1. 重模板, 一般除了操作系统还集成了一些常用服务、配置,并装有应用。是一种紧耦合的方式。
    重模板的方式是将所有可能用到软件和配置都集成到模板内, 实例化后根据实例的角色再做调整。
    这种调整可以是手工的,也可以是通过自动化配置工具

  2. 轻模板, 轻模板严重依赖自动化配置工具。 与重模板不同的是:轻模板一般采用最小安装(minimal)模板本身除了操作系统外不包含任何的服务和配置,不安装任何应用。 是一种松耦合的方式。
    轻模板的方式是将所有配置以及应用和服务器的角色定义全部放到模板外, 实例生成后全部依赖于自动化配置工具根据不同的角色,安装对应的服务,应用,实施各类参数调整。

两种方式对比:

  • 重模板的体积较大,模板一般都在5~10G不等。
  • 重模板启动后能够快速投入使用。需要再配置和安装的部件较少。
  • 轻模板的体积很小, 如:centos/rhel7.1模板约为1g左右,加入jdk和tomcat后约为3G
  • 轻模板启动后需要一定时间的配置才能投入使用。
  • 轻重模板的区别并不是容量大小的不同,而是管理方式的不同,各自有各自的玩法和优势。

我个人赞同轻模板方式,但是也有一些缺点:

  1. 实施门槛稍高,需要掌握一种自动化配置工具
  2. 编写自动配置角色耗费人力,需要反复测试。
  3. 轻模板的交付时间要比重模板的时间长
  4. 更改或增加服务需要再次执行配置(对比重模板要配置的项目会多一些,时间会长一点)

但是轻模板有以下几个好处,

  1. 解耦, 基础架构代码化,配置参数与基础架构脱离,与配置操作的脚本脱离。
  2. 配置参数版本化,可以配合版本控制工具(git、svn等)做到基础架构配置同步。
  3. 基于配置自动配置工具的幂等性特性和版本控制工具(git、svn等),可以做到基础架构配置的回退。
  4. 配置参数多态化,根据机器不同的运行区域和角色,同样的参数可以根据加载不同的值。(如:根据服务器的重要程度来加载不同的密码复杂度,登陆ip限制等参数)
  5. 如果能做到所有变更都通过自动配置工具实施, 那么只需要保存每次变更加载的不同参数,就可以获得一台服务器的所有变更轨迹。(基于变更版本的CMDB)
  6. 轻模板是灵捷的(agile)更少的加载不用的服务和应用能够减少被攻击的可能性。

关于轻模板的配给和应用请见本人的另一篇文章: 用ansible自动供应vmware虚拟机
关于轻模板的具体再配置过程这篇文章没有太多说, 以后我还会写一篇。
轻重模板全部可以制作成金模板。

2.2 安装OS

安装过程和制作金板没有太多关系,可以按照自己的习惯安装。
如果倾向于重模板:安装centos/rhel 时正常安装,安装nginx,php,jdk和tomcat等常用软件,即可。
如果倾向于轻模板: 安装centos/rhel 时选择最小安装(minimal install) 。不安装其他软件,注意这种安装方式有很多包都没有安装,后续如果是手工操作的话会不太顺利。比如没有wget等工具,操作会有些不方便。因为这种方式是自动化配置用的,所以不适合手工操作。

2.3 安装Open-VM-Tools

open vm tools 是 vmware vmtools的开源版本, 自centos/rhel 7 后推荐安装 ovmtools。

rpm -qi open-vm-tools
Name        : open-vm-tools
Version     : 10.0.5
Release     : 4.el7_3
Architecture: x86_64
Install Date: Fri 02 Jun 2017 05:33:32 PM CST
Group       : Applications/System
Size        : 1623590
License     : GPLv2
Signature   : RSA/SHA256, Thu 09 Feb 2017 02:49:53 PM CST, Key ID 199e2f91fd431d51
Source RPM  : open-vm-tools-10.0.5-4.el7_3.src.rpm
Build Date  : Sat 04 Feb 2017 12:26:30 AM CST
Build Host  : x86-030.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : http://open-vm-tools.sourceforge.net/
Summary     : Open Virtual Machine Tools for virtual machines hosted on VMware
Description :
The open-vm-tools project is an open source implementation of VMware Tools. It
is a suite of open source virtualization utilities and drivers to improve the
functionality, user experience and administration of VMware virtual machines.
This package contains only the core user-space programs and libraries of
open-vm-tools.

执行安装

yum install open-vm-tools -y

纯干货分享
http://jiangjiang.space 回忆书签,转载请注明出处,谢谢

2.4 清理启动项目

视自己组织的实际情况进行删减。
保留的项目

UNIT DESCRIPTION 说明
auditd.service Security Auditing Service selinux相关的保留
crond.service Command Scheduler 保留
dbus.service D-Bus System Message Bus 保留
getty@tty1.service Getty on tty1 保留
kdump.service Crash recovery kernel arming dump相关
kmod-static-nodes.service Create list of required static device n dump相关
lvm2-lvmetad.service LVM2 metadata daemon lvm相关
lvm2-monitor.service Monitoring of LVM2 mirrors, snapshots e lvm相关
lvm2-pvscan@8:2.service LVM2 PV scan on device 8:2 lvm相关
lvm2-pvscan@8:3.service LVM2 PV scan on device 8:3 lvm相关
network.service LSB: Bring up/down networking 网路服务保留
nscd.service Name Service Cache Daemon dns加速服务
nslcd.service ming services LDAP client daemon. ldap客户端服务,可关闭
ntpd.service Network Time Service 时间服务器
rhel-dmesg.service Dump dmesg to /var/log/dmesg 保留
rhel-import-state.service Import network configuration from initr 保留
rhel-readonly.service Configure read-only root support 保留
rngd.service Hardware RNG Entropy Gatherer Daemon 真随机数服务,可关闭
rsyslog.service System Logging Service rsyslog,保留
sshd.service OpenSSH server daemon sshd,保留
sysstat.service Resets System Activity Logs 系统状态,保留
systemd-journal-flush.service Flush Journal to Persistent Storage 保留
systemd-journald.service Journal Service 保留
systemd-logind.service Login Service 保留
systemd-random-seed.service Load/Save Random Seed 保留
systemd-remount-fs.service Remount Root and Kernel File Systems 保留
systemd-tmpfiles-setup-dev.service Create Static Device Nodes in /dev 保留
systemd-tmpfiles-setup.service Create Volatile Files and Directories 保留
systemd-udev-settle.service udev Wait for Complete Device Initializ 保留
systemd-udev-trigger.service udev Coldplug all Devices 保留
systemd-udevd.service udev Kernel Device Manager 保留
systemd-update-utmp.service Update UTMP about System Boot/Shutdown 保留
systemd-user-sessions.service Permit User Sessions 保留
systemd-vconsole-setup.service Setup Virtual Console 保留
vmtoolsd.service Service for virtual machines hosted on vmware tools 保留
tuned.service Dynamic System Tuning Daemon tuned性能和角色调整,可关闭

简单补充:

tuned.service:
tuned 是好工具, 可以将所有系统参数都汇集到一起,再加上电源选项,推荐使用。
nslcd.service:
如果不需要ldap登陆可以关闭。

屏蔽的启动项目

UNIT DESCRIPTION 说明
irqbalance.service irqbalance daemon 中断自动平衡,关闭
smartd.service Self Monitoring and Reporting Technolog 虚机硬盘不支持smartd关闭
abrt-ccpp.service Install ABRT coredump hook 自动上报关闭
abrt-oops.service ABRT kernel log watcher 自动上报关闭
abrtd.service ABRT Automated Bug Reporting Tool 自动上报bug工具 abrt系列
atd.service Job spooling tools at定时任务
NetworkManager-wait-online.service Network Manager Wait Online networkmanager相关
NetworkManager.service Network Manager networkmanager相关
libstoragemgmt.service libstoragemgmt plug-in server daemon 虚机无外置存储需要
polkit.service Authorization Manager 类似sudo
 # 屏蔽命令
    systemctl disable 服务名

2.5 【重点步骤】删除SSH KEY

大多数情况下, 看到很多单位用的模板都是从某一台服务器做的模板(非金模板)克隆的,你会发现这些克隆出来的服务器都是用一样的SSH Key。这就留下了一个安全隐患,理论上其中一台服务器的key泄露所有的服务器都面临危险。
因此删除SSH KEY 是金模板的最主要的步骤。 当然如果你还有其他基于openssl自己生成的key,也应该写脚本在部署应用时重新生成。 在模板中不要保存任何key和密码。

rm -f /etc/ssh/*key*

2.6 更新必要的包

yum update kernel* -y
# 按照实际需要升级需要的包

2.7 清理日志、缓存和网卡配置

systemctl stop rsyslog
systemctl stop auditd
/usr/bin/yum clean all
/bin/package-cleanup  --oldkernels --count=1  # 清理不需要的内核
logrotate -f /etc/logrotate.conf 
rm -f /var/log/*-???????? /var/log/*.gz 
rm -f /var/log/dmesg.old 
rm -rf /var/log/anaconda*
cat /dev/null > /var/log/audit/audit.log 
cat /dev/null > /var/log/wtmp 
cat /dev/null > /var/log/lastlog 
cat /dev/null > /var/log/grubby  
/bin/rm -f /etc/udev/rules.d/70* 
sed -i".bak"  '/UUID/d;/IPADDR/d;/NETMASK/d;/GATEWAY/d;/NM_CONTROLLED/d;/HWADDR/d' /etc/sysconfg/network-scripts/ifcfg-*
#注意-i后面没有空格, 这里的配置是不使用 network manager的。因此删除对应的配置
/bin/rm -f ~root/.bash_history 
unset HISTFILE 
/bin/rm -rf ~root/.ssh/

纯干货分享
http://jiangjiang.space 回忆书签,转载请注明出处,谢谢

2.8 清空systemd创建的机器唯一标识

为了避免所有机器都共用一个id文件,致空文件, 在模板实例化时会重新生成.

>/etc/machine-id 

2.9 关机制作模板

只需要执行以下命令

history -c
shutdown -h now

补充步骤(centos无视)

如果是rhel,也就是红帽linux, 还应该清除rhnid

> /etc/sysconfig/rhn/systemid

3. 总结

通过以上步骤就得到了一个金模板。
将此模板转化为vmware模板(Convert to Template),以后再克隆机器后,你就将得到一个纯净的标准环境。

4. 附录

4.1 删掉了一些流传的做法

sys-unconfig  # 这个实测在centos/rhel 7上只会删除udev下的所有rule,
              # 但是不会在重启时重设root密码等操作. 可能在centos 6管用,这里就去掉了.

rm /etc/hostname   # 实测没什么意义, 创建的实例如果没有vmware的自定义动作则文件就这么消失了..
                   #  主机名变为 localhost 个人觉得意义不大,没有加入.
重新生成initrd:  实测生成的新实例启动时报错,因此去除出去. 

4.2 主要步骤总结:

rm -f /etc/ssh/*key*
systemctl stop rsyslog
systemctl stop auditd
/usr/bin/yum clean all
/bin/package-cleanup  --oldkernels --count=1  
logrotate -f /etc/logrotate.conf 
rm -f /var/log/*-???????? /var/log/*.gz 
rm -f /var/log/dmesg.old 
rm -rf /var/log/anaconda*
cat /dev/null > /var/log/audit/audit.log 
cat /dev/null > /var/log/wtmp 
cat /dev/null > /var/log/lastlog 
cat /dev/null > /var/log/grubby
/bin/rm -f /etc/udev/rules.d/70* 
sed -i".bak"  '/UUID/d;/IPADDR/d;/NETMASK/d;/GATEWAY/d;/NM_CONTROLLED/d;/HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-*
/bin/rm -f ~root/.bash_history 
unset HISTFILE 
/bin/rm -rf ~root/.ssh/
>/etc/machine-id 
history -c
shutdown -h now

4.3 参考资料

https://ifireball.wordpress.com/2015/01/02/creating-rhel7-deployment-templates/
http://everything-virtual.com/2016/05/06/creating-a-centos-7-2-vmware-gold-template/
纯干货分享
http://jiangjiang.space 回忆书签,转载请注明出处,谢谢