PuppetでBaculaの設定を行っています。私がやりたいことの1つは、各パスワードフィールドが異なることを確認することです。私の現在の考えは、各ファイルデーモンに一意のパスワードがあり、そのパスワードをダイレクタ構成とファイルサーバーの両方に書き込むことができるようにするシークレット値でホスト名をハッシュすることです。 1台のマシンを危険にさらす可能性のある人がBaculaを介して任意のマシンにアクセスできるようになるため、1つのユニバーサルパスワードを使用したくありません。
ハッシュ関数を使用してパスワードを生成する以外に、これを行う別の方法はありますか?
これは[〜#〜] not [〜#〜]サービスのユーザーアカウントについてです。これは、クライアント/サーバーファイル内の(別の用語を使用するための)認証トークンに関するものです。スニペットの例:
Director { # define myself
Name = <%= hostname $>-dir
QueryFile = "/etc/bacula/scripts/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run/bacula"
Maximum Concurrent Jobs = 3
Password = "<%= somePasswordFunction =>" # Console password
Messages = Daemon
}
$secret = "super special complicated long secure random string"
$password = sha1("${fqdn}${secret}")
notify {$password:}
別のファイル(おそらく、バージョン管理に保持していない1つのpuppetクラス)から$secret
をインポートすると、そこにあります。魔法のパスワードの生成。
パスワードは、$secret
を変更することでグローバルに変更できます。または、$fqdn
以外のものを使用して各宣言で個別に変更できます。
別の方法は、extlookup()を介して何かを設定することです。これにより、共通の値に依存しないマシンごとの一意性を得ることができます。
私たちの場合、共通の秘密を持つハッシュ値が私たちに与えたものよりも多くの一意性を必要とする同様のツールを使用して、このようなことを行いました。
Site.ppで
$extlookup_datadir = "/etc/puppet/manifests/extdata"
$extlookup_precedence = ["hostname/%{hostname}", "common"]
次に、extデータは次のようになります。
/etc/puppet/manifests/extdata
/common.csv
/hostname
/foo.csv
Foo.csv内に、次のようなものを配置します。
bacula_password,"J()*JF)jj0j20f9j02rj9<whatever>"
次に、Baculaモジュールで、
$bacula_password = extlookup('bacula_password')
これをテンプレートで参照できます。
カタログが評価されると、ホスト名 "foo"がextの優先順位で最初に検出され、bacula_passwordの値がそこから取得されます。