Forum: CFEngine Help
Subject: Access to cf-serverd via external files
Author: berntjernberg
Link to topic: https://cfengine.com/forum/read.php?3,23091,23091#msg-23091

Hi all,

I want to hide the access- and trust-keys lists from everybody by reading those 
lists from the contents of directories
on the policy server. I have a directory, /cf/trustkeys, which may contain 
files named as ip addresses. Like this



# ls -1 /cf/trustkeys
10.10.10.10
10.10.10.11
......



The directory is not shared to clients.

My long term goal is for the client to report back to the policy server that 
the key exchange
is ready and then the policy server will remove the clients "ip-file" from 
/cf/trustkeys. The
reason for the files in /cf/trustkeys is easy configuration by an external 
script in our deploy
routine. The line:



trustkeysfrom         => { @(s.trustkeysfrom_acl) };



will always be there if this idea works.  

Part of my cf-serverd.cf looks like this. The syntax works but I have to 
restart cf-serverd to
change the trustkeys-list with the current code. cf-serverd, on the policy 
server, is run by
the normal user cfengine thus cf-serverd have its files in 
/home/cfengine/.cfagent and
cf-agent (run as root) in /var/cfengine.



bundle common s
{
    vars:
        policy_host::
            "addresses_to_split" string => execresult("$(g.ls) /cf/trustkeys 
2>/dev/null","useshell");

        acl_exists::
            "trustkeysfrom_acl"   slist => 
splitstring("$(s.addresses_to_split)","\n","30");

            "connect_acl" slist => {
                                   "XX.XXX..*",
                                   "XX.XXX..*",
                                   "XX.XXX..*"
                                   };

    classes:
        "acl_exists"                not => regcmp("$(addresses_to_split)","");
}

body server control 
{
    denybadclocks         => "true";
    allowconnects         => { @(s.connect_acl) };
    allowusers            => { "root","cfengine" };
    maxconnections        => "1000";
    logallconnections     => "true";
    bindtointerface       => "$(g.my_ip)";
    trustkeysfrom         => { @(s.trustkeysfrom_acl) };
}

bundle server access_rules()
{
    access:
        policy_host::
            "$(g.dir_repository)"
                handle => "grant_access_to_repository",
                comment => "Grant access to the repository",
                admit   => { @(s.connect_acl) };
}



Is this a good/bad solution? Any ideas?

_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to