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 [email protected]
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
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine