0

私のcf-serverdのpromises.cfには、次のようなバンドルがあります

bundle server host_rules(key, host) {
    access:
        "/srv/cfengine3/$(host)"
        admit_keys      => { "$(key)" };
}

私はそれをインスタンス化しようとしました

body common control {
        bundlesequence =>
        {
        generic_rules,
        host_rules("MD5=362c5fcf568b492f78ae392229299c05", "foo.example.com"),
        };
}

しかし (cfengine-3.8.1 では) これは効果がないようです。たとえばcf-serverd -v、バンドル内のアクセス ルールのみを報告し、generic_rulesfoo.example.com のファイルへのアクセスは拒否されます。

generic_rules(単純なbundle server generic_rules { ... }バンドルです) は、共通のリストにない場合に評価されるようbundlesequenceです。

host_rulescf-serverd セットアップでバンドルを展開するにはどうすればよいですか?

編集:

キーによって識別される対応するホストにのみ、いくつかのディレクトリへのアクセスを許可するつもりです。パス名で使用できることは知っています$(connection.key)が、嫌いなので

  • 読めません (無意味な MD5=...名前のディレクトリが多数あると、「foo.example.com」に属するディレクトリを見つけるのが難しくなります)

  • クライアントキーが変更されたときに問題が発生します (たとえば、侵害された、またはホストが再インストールされるため)。「git」(cfengine ルールの編成に使用) は、ファイル/ディレクトリの名前変更をサポートしていないため、「git mv」による変更履歴が失われます。

4

4 に答える 4

1

参考:https ://groups.google.com/d/msg/help-cfengine/ba5i_1UXPrU/xaWciJoIDQAJ

bundle server my_host_access_rules
{
  vars:
    # You can build a map of hostname to keys.
    # You might prefer to do this in an external data file formated as
JSON and
    # use readjson to read it in.
    #
    # {
    #   "hub":     "SHA=e...",
    #   "host001": "SHA=b..."
    # }

    "name_to_key[hub]" string =>
"SHA=ee29780b3c86d486699f97e30c5924431475b1b06e02c2724dd925c1524afef6";
    "hosts" slist => getindices( name_to_key );

  access:
    # Grant access to the directory named for the currently iterated
host to the public key sha for that host.
    "/srv/cfengine3/$(hosts)/."
      admit_keys => { "$(name_to_key[$(hosts)])" };
} 

これを 3.7.3 のプレリリース ビルドでテストしたところ、空のホスト名を使用する必要はありませんでした。

于 2016-03-22T17:16:46.470 に答える
0

参考:https ://groups.google.com/forum/#!topic/help-cfengine/ba5i_1UXPrU

接続変数はcf-serverd、クライアントが接続するときに展開されます。の場合、変数は、cf-serverd からのリバース DNS ルックアップconnection.hostnameによって決定された接続エージェントのホスト名に展開されます。したがって、それを使用するには、適切な逆引き DNS 解決があることを確認する必要があります。ファイルをホスト名で整理する代わりに、キー sha で整理した場合は、次のような方法を使用して、各ホストが独自のディレクトリにアクセスできるようにする必要があります。

  bundle server my_special_access_rules
  {
    access:
        # /srv/cfengine3/MD5=0a9082478b1a1466f6e56fd5e48db8c4/directory full of files
        "/srv/cfengine3/$(connnection.key)"
          shortcut => "host_cfinput",
          admit_keys => { $(connetion.key) };
  }

そして、エージェントバンドルでこれを行うことができます:

  bundle agent have_a_copy_of_my_files
  {
    files:
        # Using the shortcut
        "/tmp/myfiles/."
          copy_from => remote_dcp("host_cfinput", $(sys.policy_hub)),
          depth_search => recurse(inf);

        # Without using the shortcut
        "/tmp/another_myfiles/."
          copy_from => remote_dcp("/srv/cfengine3/$(sys.key_digest)/.", $(sys.policy_hub)),
          depth_search => recurse(inf);
  }

/srv/cfengine3/これで、ホストの公開鍵 sha の名前を付けて、各ホストのディレクトリを作成できます。1 対 1 の関係でディレクトリを Admission_keys にマップしたため、各ホストは自身のディレクトリにのみアクセスできます。

于 2016-03-22T16:18:54.830 に答える
0

これを試して:

bundle server host_list {
    vars:
        # Each host should only have one key
        "keymap" data => parsejson('
        {
          "foo.example.com" : "MD5=362c5fcf568b492f78ae392229299c05",
        }');

        "hosts" slist   => getindices( keymap );

    access:
        "/srv/cfengine3/$(hosts)"
        admit_keys      => { $(keymap[${hosts}]) };

        "/srv/cfengine3/KEYS/$(hosts)"
        admit_keys      => { $(keymap[${hosts}]) };
}
于 2016-03-22T19:10:47.437 に答える