我怎样才能让 Puppet 为用户使用本地(在主服务器上)密码哈希?

我怎样才能让 Puppet 为用户使用本地(在主服务器上)密码哈希?

我们对用户的定义如下:

user { 'belmin':
    ensure          => present,
    uid             => 308,
    comment         => 'Belmin Fernandez',
    managehome      => true,
    password        => '$6$NrtZpXEauUqjdRh0$vE9oJwbNTSWVCGrlDe4KHXFB0KXY7hszSas3v0DZvhUej4SIb/WLfaCy.lmSU7Hh8AAvAbPuDRai2p1X9mDcM0',
}

我想定义一个类型,它将在本地查找/etc/shadowPuppet Master,如果用户在那里,则使用该密码哈希。类似于:

define our_user ($user = $title, $uid, $fullname, $default_hash) {

    $shadow_hash = get_hash_from_local_shadown_somehow

    if $shadow_hash == '' {
        $shadow_hash = $default_hash
    }

    user { $user:
        ensure          => present,
        uid             => $uid,
        comment         => $fullname,
        managehome      => true,
        password        => $shadow_hash,
    }
}

在这种情况下会怎样get_hash_from_local_shadown_somehow?我看到文件功能puppet不确定如何利用它来解决这个问题,因为我需要更多的文本处理。

注意:我知道集中式身份验证是最明智的途径,但目前这不是一个立即的选择。

答案1

找到了一种方法来做到这一点Puppet 的论坛使用产生功能:

您可以使用 generate() 函数来实现这一点。

你基本上需要创建一个脚本来执行你需要的任何处理,然后$shadow_hash = generate('/path/to/script')。

我编写了一个简单的 Bash 脚本来检索哈希:

#!/bin/bash

SHADOW_FILE='/etc/shadow'

awk -F: "\$1 == \"$@\"" ${SHADOW_FILE} | awk -F: '{print $2}' || echo ''

generate函数如下所示:

$shadow_hash = generate('/bin/bash','/usr/local/sbin/extract_shadow_hash', $user)

希望这对其他人有帮助。似乎这是一个在很多用例中都很有用的功能。

相关内容