如何使用 Puppet 强制执行本地组成员身份?

如何使用 Puppet 强制执行本地组成员身份?

从 Ask@PuppetLabs 交叉发布此内容。(那里的流量实在不够。)

我见过许多使用 Augeas 将用户添加到 %wheel 的示例。这些都是同一件事的变体;在末尾插入用户节点。

我还需要做的是删除在配置管理之外添加的用户。为了让 Puppet 管理该组,只有我的 Puppet 类中定义的用户应该存在,其他用户都应被删除。

执行一个简单的 Sed 命令似乎要容易得多,但很多人建议尽量远离 exec。在这种情况下,这是一个糟糕的解决方案吗?

答案1

以这种方式定义轮子用户会导致他们被添加,但是如果您从类中删除 jane,她将不会在下次 Puppet 运行时从轮子组中删除。

class wheel {
  augeas { "wheelgroup":
    context => "/files/etc/group/wheel",
    changes => [
      'set user[1] bob',
      'set user[2] jane',
    ]
  }
}

我发现解决这个问题的唯一方法是每次清除轮组然后重新添加它们。

class wheel {
  augeas { "wheelgroup":
    context => "/files/etc/group/wheel",
    changes => [
      'rm user',
      'set user[1] bob',
      'set user[2] jane',
    ]
  }
}

我考虑onlyif使用匹配我定义的用户的方法,以防止这种情况在每次运行 Puppet 时发生。但是,这也是删除在 Puppet 之外添加的用户以确保 %wheel 仅由 Puppet 管理的唯一方法。

该解决方案也不利于参数化和重复使用。

答案2

也许可以使用群组成员类型专门设置组的成员。您可能需要使用 forcelocal 选项。

相关内容