Forum: Cfengine Help
Subject: Making cf-runagent work
Author: sauer
Link to topic: https://cfengine.com/forum/read.php?3,22525,22525#msg-22525

So, I've given up on the manual.  I'm not sure what I'm missing to make 
cf-runagent actually work.  I have a test server running cf-serverd with the 
folowing config.  I've run the config and the cf-serverd through a sed filter 
(replacing hostnames/IP addresses) to keep the lawyers happy.  I've done the 
key exchange, and that appears to work, but I'm clearly missing a critical 
component required to allow running the command.  I don't know if I've messed 
up a regex or if I'm just completely missing the boat somewhere.  I've tried 
removing the escapes on the IP addresses and using netmasks (/8 and /32, as 
relevant) to no avail.  Here's the cf-runagent output, the server 
configuration, and the server output.  Can someone who's made this work let me 
know what dumb mistake I'm making (and make a suggestion for helping the 
documentation)? :)

cf-runagent - Open Source 3.0.4 and 3.1.5 behave the same
cf-serverd - Open Source 3.1.5 from cfengine-provided RPM

runagent:

$ sudo cf-runagent -i -H testserver -n
sf_cf3  !!  Unspecified server refusal (see verbose server output)



control configuration in promises.cf:

body server control {
  allowconnects         => { @(access_rules.mynet) };
  allowallconnects      => { @(access_rules.mynet) };
  trustkeymyrom         => { @(access_rules.mynet) };

  maxconnections        => "1024";
  hostnamekeys          => "true";
  logallconnections     => "false";
  logencryptedtranmyers => "false";
  serverfacility        => "LOG_USER";

  cfruncommand => "$(sys.cf_agent)";
  allowusers   => { "root", "user" };
}

# group server access rules together in a bundle
bundle server access_rules()
{
  vars:
    "mynet" slist => { escape("127.0.0.1"),
                       escape("::1"),
                       "1\..*",
                       ".*\.domain\.org" };
  access:
    "$(sys.cf_agent)"
      admit   => { @(access_rules.mynet) },
      maproot => { @(access_rules.mynet) };
    "/opt/security/cfconf/"
      admit => { @(access_rules.mynet) };
  roles:
    ".*" authorize => { "root", "user" };
}



Server output (I hit enter a couple of times before firing up cf-runagent):

myprefix>
myprefix> Summarize control promises
myprefix> Granted access to paths :
myprefix> Path: "/var/cfengine/bin/cf-agent" (encrypt=0)
myprefix>    Admit: .*\.domain\.org root=
myprefix> .*\.domain\.org,
myprefix> 1\..*,
myprefix> \:\:1,
myprefix> 127\.0\.0\.1,
myprefix>    Admit: 1\..* root=
myprefix> .*\.domain\.org,
myprefix> 1\..*,
myprefix> \:\:1,
myprefix> 127\.0\.0\.1,
myprefix>    Admit: \:\:1 root=
myprefix> .*\.domain\.org,
myprefix> 1\..*,
myprefix> \:\:1,
myprefix> 127\.0\.0\.1,
myprefix>    Admit: 127\.0\.0\.1 root=
myprefix> .*\.domain\.org,
myprefix> 1\..*,
myprefix> \:\:1,
myprefix> 127\.0\.0\.1,
myprefix> Path: /opt/security/cfconf (encrypt=0)
myprefix>    Admit: .*\.domain\.org root=
myprefix>    Admit: 1\..* root=
myprefix>    Admit: \:\:1 root=
myprefix>    Admit: 127\.0\.0\.1 root=
myprefix> Path: /opt/security/gathered_keys (encrypt=0)
myprefix>    Admit: .*\.domain\.org root=
myprefix>    Admit: 1\..* root=
myprefix>    Admit: \:\:1 root=
myprefix>    Admit: 127\.0\.0\.1 root=
myprefix> Denied access to paths :
myprefix> Path: "/var/cfengine/bin/cf-agent"
myprefix> Path: /opt/security/cfconf
myprefix> Path: /opt/security/gathered_keys
myprefix>  -> Host IPs allowed connection access :
myprefix>  .... IP: 127\.0\.0\.1
myprefix>  .... IP: \:\:1
myprefix>  .... IP: 1\..*
myprefix>  .... IP: .*\.domain\.org
myprefix> Host IPs denied connection access :
myprefix> Host IPs allowed multiple connection access :
myprefix>  .... IP: 127\.0\.0\.1
myprefix>  .... IP: \:\:1
myprefix>  .... IP: 1\..*
myprefix>  .... IP: .*\.domain\.org
myprefix> Host IPs from whom we shall accept public keys on trust :
myprefix>  .... IP: 127\.0\.0\.1
myprefix>  .... IP: \:\:1
myprefix>  .... IP: 1\..*
myprefix>  .... IP: .*\.domain\.org
myprefix> Users from whom we accept connections :
myprefix>  .... USERS: root
myprefix>  .... USERS: user
myprefix> Host IPs from NAT which we don't verify :
myprefix> Dynamical Host IPs (e.g. DHCP) whose bindings could vary over time :
myprefix> Listening for connections ...
myprefix>  -> Writing last-seen observations
myprefix>  -> Keyring is empty


myprefix>  -> Accepting a connection
myprefix> Accepting connection from "1.2.3.4"
myprefix> New connection...(from 1.2.3.4:sd 4)
myprefix> Spawning new thread...
myprefix> Allowing 1.2.3.4 to connect without (re)checking ID
myprefix> Non-verified Host ID is host.domain.org (Using skipverify)
myprefix> Non-verified User ID seems to be root (Using skipverify)
myprefix>  -> Public key identity of host "1.2.3.4" is 
"MD5=7f21e6dfcc6fdcb970f4db7a2841705d"
myprefix>  -> Last saw 1.2.3.4 (-MD5=7f21e6dfcc6fdcb970f4db7a2841705d) first 
time now
myprefix>  -> Going to secondary storage for key
myprefix>  -> Going to secondary storage for key
myprefix> A public key was already known from host.domain.org/1.2.3.4 - no 
trust required
myprefix> Adding IP 1.2.3.4 to SkipVerify - no need to check this if we have a 
key
myprefix> The public key identity was confirmed as r...@host.domain.org
myprefix>  -> Strong authentication of client host.domain.org/1.2.3.4 achieved
myprefix>  -> Receiving session key from client (size=256)...
myprefix> User root granted connection privileges
myprefix> Host host.domain.org denied access to /var/cfengine/bin/cf-agent
myprefix> Server refusal due to denied access to requested object
myprefix> From (host=host.domain.org,user=root,ip=1.2.3.4)
myprefix> REFUSAL of request from connecting host: (EXEC )
myprefix>  -> Writing last-seen observations
myprefix>  -> Last saw -MD5=7f21e6dfcc6fdcb970f4db7a2841705d (alias 1.2.3.4) at 
Mon Jun 20 01:58:31 2011
 (noexpiry 21.1 <= 168.0)


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

Reply via email to