在 precise32 virtualbox 上使用 puppet (+vagrant) 指定用户密码时出现问题

在 precise32 virtualbox 上使用 puppet (+vagrant) 指定用户密码时出现问题

我正在使用 vagrant+puppet 配置precise32VirtualBox 服务器以编程方式添加用户。一切正常,但似乎无法通过 puppet 自动设置密码。这是我的 puppet 脚本:

package { "ruby-shadow":
  name => "libshadow-ruby1.8",
  ensure => installed,
}
user { 'biff':
  home       => '/home/biff',
  shell      => '/bin/bash',
  uid        => 201,
  managehome => 'true',
  password   => '$6$kxHLEuHW$zHRAZcVLu0XzukqU79bT.PEg./FfcloJiWmlH2rf.Lmnyke7uAaHkQTXvErqikWeraSiHFBwDSMDV4hRImqjr7.',
  groups     => ['sudo', ],
  requires   => Package['ruby-shadow'],
}

为了获取哈希值$6$kx...,我登录虚拟机,运行sudo passwd biff系统设置密码,然后将哈希密码(中的第二个字段/etc/shadow)复制到上面的 puppet 脚本中。删除用户重置密码并重新运行 puppet 脚本后,密码未设置,我根本无法登录:

[precise32]$ sudo grep biff /etc/shadow
biff:!:15862:0:99999:7:::

事实上,看起来用户biff已被锁定在系统之外(/etc/shadow 说明)。我是否将正确的哈希值设置为password变量?您如何确定它是什么?

看起来一种方法可能是运行usermod事后设置密码,但这似乎从一开始就违背了使用 Puppet 的初衷。有什么想法吗?

答案1

您使用的 vagrant box 可能正在使用 ruby​​ 库,/opt/vagrant_ruby/lib/1.8/而不使用任何系统安装的 ruby​​ 库。检查您的 vagrant box 是否有文件/etc/profile.d/vagrant_ruby.sh。如果有,则该文件将覆盖要puppet使用的命令,然后确定要使用哪些 ruby​​ 库。尝试删除该文件 ;) 如果一切仍然有效(在系统上安装 puppet 和 libshadow-ruby 后),请使用 重新打包该框并将vagrant package其重新用作您的precise32框。

我确信使用 usr 有很多好的理由/opt/vagrant_ruby,但是它缺少一个非常重要的库,并且在使用框内引入 ruby​​ 库的其他工具时会造成一些混乱。

答案2

如果没有 gem,Puppet 将无法设置密码 libshadow,因为这是使用影子密码所必需的。如果我没记错的话,有一个关于提供程序的错误消息。 libshadow需要mkmf.rb安装,可以在软件包中找到libruby2.0、ruby1.9.1-dev 或 ruby​​1.8-dev(取决于你的 ruby​​ 版本)

我的清单中有这个: package { "ruby1.9.1-dev": ensure => installed; "libshadow": ensure => installed, require => Package['ruby1.9.1-dev'], provider => gem; }

相关内容