如何用Puppet和Augeas管理Linux配置

简介:

如何用Puppet和Augeas管理Linux配置

虽然Puppet是一个真正独特的有用工具,但在有些情况下你可以使用一点不同的方法来用它。比如,你要修改几个服务器上已有的配置文件,而且它们彼此稍有不同。Puppet实验室的人也意识到了这一点,他们在 Puppet 中集成了一个叫做Augeas的伟大的工具,它是专为这种使用情况而设计的。

Augeas可被认为填补了Puppet能力的空白,比如在其中一个指定对象的资源类型(例如用于维护/etc/hosts中的条目的主机资源)还不可用时。在这个文档中,您将学习如何使用Augeas来减轻你管理配置文件的负担。

Augeas是什么?

Augeas基本上就是一个配置编辑工具。它以他们原生的格式解析配置文件并且将它们转换成树。配置的更改可以通过操作树来完成,并可以以原生配置文件格式保存配置。

这篇教程要达成什么目的?

我们会针对我们之前构建的Puppet服务器安装并配置Augeas。我们会使用这个工具创建并测试几个不同的配置文件,并学习如何适当地使用它来管理我们的系统配置。

前置阅读

我们需要一台工作的Puppet服务器和客户端。如果你还没有,请先按照我先前的教程来。

Augeas安装包可以在标准CentOS/RHEL仓库中找到。不幸的是,Puppet用到的Augeas的ruby封装只在puppetlabs仓库中(或者EPEL)中才有。如果你系统中还没有这个仓库,请使用下面的命令:

在CentOS/RHEL 6.5上:


  
  
  1. # rpm ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabs­release­6­10.noarch.rpm

在CentOS/RHEL 7上:


  
  
  1. # rpm ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs­release­7­10.noarch.rpm

在你成功地安装了这个仓库后,在你的系统中安装Ruby­Augeas:


  
  
  1. # yum install ruby­augeas

或者如果你是从我的上一篇教程中继续的,使用puppet的方法安装这个包。在/etc/puppet/manifests/site.pp中修改你的custom_utils类,在packages这行中加入“ruby­augeas”。


  
  
  1. class custom_utils {
  2. package { ["nmap","telnet","vim­enhanced","traceroute","ruby­augeas"]:
  3. ensure => latest,
  4. allow_virtual => false,
  5. }
  6. }

不带Puppet的Augeas

如我先前所说,最初Augeas并不是来自Puppet实验室,这意味着即使没有Puppet本身我们仍然可以使用它。这种方法可在你将它们部署到Puppet环境之前,验证你的修改和想法是否是正确的。要做到这一点,你需要在你的系统中安装一个额外的软件包。请执行以下命令:


  
  
  1. # yum install augeas

Puppet Augeas 示例

用于演示,这里有几个Augeas使用案例。

管理 /etc/sudoers 文件

  1. 给wheel组加上sudo权限。

这个例子会向你展示如何在你的GNU/Linux系统中为%wheel组加上sudo权限。


  
  
  1. # 安装sudo
  2. package { 'sudo':
  3. ensure => installed, # 确保sudo包已安装
  4. }
  5.  
  6. # 允许用户属于wheel组来使用sudo
  7. augeas { 'sudo_wheel':
  8. context => '/files/etc/sudoers', # 目标文件是 /etc/sudoers
  9. changes => [
  10. # 允许wheel用户使用sudo
  11. 'set spec[user = "%wheel"]/user %wheel',
  12. 'set spec[user = "%wheel"]/host_group/host ALL',
  13. 'set spec[user = "%wheel"]/host_group/command ALL',
  14. 'set spec[user = "%wheel"]/host_group/command/runas_user ALL',
  15. ]
  16. }

现在来解释这些代码做了什么:spec定义了/etc/sudoers中的用户段,[user]定义了数组中给定的用户,所有的定义放在该用户的斜杠( / ) 后那部分。因此在典型的配置中这个可以这么表达:


  
  
  1. user host_group/host host_group/command host_group/command/runas_user

这个将被转换成/etc/sudoers下的这一行:


  
  
  1. %wheel ALL = (ALL) ALL
  1. 添加命令别称

下面这部分会向你展示如何定义命令别名,它可以在你的sudoer文件中使用。


  
  
  1. # 创建新的SERVICE别名,包含了一些基本的特权命令。
  2. augeas { 'sudo_cmdalias':
  3. context => '/files/etc/sudoers', # 目标文件是 /etc/sudoers
  4. changes => [
  5. "set Cmnd_Alias[alias/name = 'SERVICES']/alias/name SERVICES",
  6. "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[1] /sbin/service",
  7. "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[2] /sbin/chkconfig",
  8. "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[3] /bin/hostname",
  9. "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[4] /sbin/shutdown",
  10. ]
  11. }

sudo命令别名的语法很简单:Cmnd_Alias定义了命令别名字段,[alias/name]绑定所有给定的别名,/alias/name SERVICES 定义真实的别名,alias/command 是属于该别名的所有命令的数组。以上将被转换如下:


  
  
  1. Cmnd_Alias SERVICES = /sbin/service , /sbin/chkconfig , /bin/hostname , /sbin/shutdown

关于/etc/sudoers的更多信息,请访问官方文档

向一个组中加入用户

要使用Augeas向组中添加用户,你也许要添加一个新用户,不管是排在 gid 字段还是最后的用户 uid 之后。我们在这个例子中使用SVN组。这可以通过下面的命令达成:

在Puppet中:


  
  
  1. augeas { 'augeas_mod_group:
  2. context => '/files/etc/group', #目标文件是 /etc/group
  3. changes => [
  4. "ins user after svn/*[self::gid or self::user][last()]",
  5. "set svn/user[last()] john",
  6. ]
  7. }

使用 augtool:


  
  
  1. augtool> ins user after /files/etc/group/svn/*[self::gid or self::user][last()] augtool> set /files/etc/group/svn/user[last()] john

总结

目前为止,你应该对如何在Puppet项目中使用Augeas有点明白了。随意地试一下,你肯定需要浏览官方的Augeas文档。这会帮助你了解如何在你的个人项目中正确地使用Augeas,并且它会让你知道可以用它节省多少时间。

如有任何问题,欢迎在下面的评论中发布,我会尽力解答和向你建议。

原文发布时间:2014-11-25

本文来自云栖合作伙伴“linux中国”

目录
相关文章
|
15天前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
37 3
|
2月前
|
网络协议 安全 Linux
如何配置Linux端的ftp?
如何配置Linux端的ftp?
140 64
|
5天前
|
Java Linux 网络安全
NIFI在Linux服务区上的部署配置过程是什么?
【10月更文挑战第21天】NIFI在Linux服务区上的部署配置过程是什么?
20 2
|
18天前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
165 3
|
22天前
|
监控 安全 网络协议
快速配置Linux云服务器
【10月更文挑战第3天】快速配置Linux云服务器
|
2月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
2月前
|
Linux 编译器 开发工具
快速在linux上配置python3.x的环境以及可能报错的解决方案(python其它版本可同样方式安装)
这篇文章介绍了在Linux系统上配置Python 3.x环境的步骤,包括安装系统依赖、下载和解压Python源码、编译安装、修改环境变量,以及常见安装错误的解决方案。
70 1
|
2月前
|
Ubuntu Linux
Linux服务器的自动启动可以在哪里进行配置?
Linux服务器的自动启动可以在哪里进行配置?
139 3
|
23天前
|
应用服务中间件 Linux Shell
Linux 配置 Nginx 服务的详细步骤,绝对干货
Linux 配置 Nginx 服务的详细步骤,绝对干货
54 0
|
24天前
|
Unix Linux Go
Linux 使用Yum安装Go和配置环境
Linux 使用Yum安装Go和配置环境