如何用 Puppet 和 Augeas 管理 Linux 配置

发布于 2024-11-10 12:54:43 字数 5152 浏览 20 评论 0

虽然 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 上:

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

在 CentOS/RHEL 7 上:

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

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

 # yum install ruby­augeas 

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

class custom_utils {
        package { ["nmap","telnet","vim­enhanced","traceroute","ruby­augeas"]:
                ensure => latest,
                allow_virtual => false,
        }
} 

不带 Puppet 的 Augeas

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

# yum install augeas 

Puppet Augeas 示例

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

管理 /etc/sudoers 文件

  1. 给 wheel 组加上 sudo 权限。

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

# 安装 sudo 包
package { 'sudo':
    ensure => installed, # 确保 sudo 包已安装
}

# 允许用户属于 wheel 组来使用 sudo
augeas { 'sudo_wheel':
    context => '/files/etc/sudoers', # 目标文件是 /etc/sudoers
    changes => [
        # 允许 wheel 用户使用 sudo
        'set spec[user = "%wheel"]/user %wheel',
        'set spec[user = "%wheel"]/host_group/host ALL',
        'set spec[user = "%wheel"]/host_group/command ALL',
        'set spec[user = "%wheel"]/host_group/command/runas_user ALL',
    ]
} 

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

user host_group/host host_group/command host_group/command/runas_user

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

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

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

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

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

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

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

向一个组中加入用户

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

在 Puppet 中:

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

使用 augtool:

 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,并且它会让你知道可以用它节省多少时间。

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

有用的链接

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

情深缘浅

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文