Here is my complete configuration, not just what I think are the
relevant bits (thank you, Mark). Please note that when I swap out
the 3.1.4 or 3.1.2 RPM for the 3.1.0 version (built from source), I
get the expected behavior (I can copy files).
1. Server configuration:
#######################################################
#
# promises.cf
#
#######################################################
body common control
{
bundlesequence => {
"update",
"garbage_collection",
"main",
"cfengine"
};
inputs => {
"update.cf",
"site.cf",
"cfengine_stdlib.cf"
};
}
#######################################################
body agent control
{
# if default runtime is 5 mins we need this for long jobs
ifelapsed => "15";
}
#######################################################
body monitor control
{
forgetrate => "0.7";
histograms => "true";
}
#######################################################
body executor control
{
splaytime => "1";
mailto => "[email protected]";
smtpserver => "localhost";
mailmaxlines => "30";
# Instead of a separate update script, now do this
exec_command => "$(sys.workdir)/bin/cf-agent -f failsafe.cf &&
$(sys.workdir)/bin/cf-agent";
}
#######################################################
body reporter control
{
reports => { "performance", "last_seen", "monitor_history" };
build_directory => "$(sys.workdir)/reports";
report_output => "html";
}
#######################################################
body runagent control
{
hosts => {
"127.0.0.1"
# , "myhost.example.com:5308", ...
};
}
#######################################################
body server control
{
allowconnects => { "127.0.0.1" , "::1", "205.186.156.208" };
allowallconnects => { "127.0.0.1" , "::1", "205.186.156.208" };
trustkeysfrom => { "127.0.0.1" , "::1", "205.186.156.208" };
skipverify => { "127.0.0.1" , "::1", "205.186.156.208" };
bindtointerface => "205.186.147.195";
# Make updates and runs happen in one
cfruncommand => "$(sys.workdir)/bin/cf-agent -f failsafe.cf
&& $(sys.workdir)/bin/cf-ag
ent";
allowusers => { "root" };
}
and site.cf:
#######################################################
#
# Site specific promises
#
#######################################################
bundle common g
{
vars:
SuSE::
"crontab" string => "/var/spool/cron/tabs/root";
redhat::
"crontab" string => "/var/spool/cron/root";
(!SuSE).(!redhat)::
"crontab" string => "/var/spool/cron/crontabs/root";
}
#######################################################
# Start with cfengine itself
#######################################################
bundle agent cfengine
{
classes:
"integrate_cfengine2"
and => {
fileexists("$(sys.workdir)/inputs/cfagent.conf"),
fileexists("$(sys.workdir)/bin/cfagent")
};
vars:
"cf2bits" slist => { "cfenvd", "cfservd", "cfexecd" };
commands:
integrate_cfengine2::
"$(sys.workdir)/bin/cfagent"
action => if_elapsed("240");
files:
# Warn about rules relating to cfengine 2 in inputs - could conflict
"$(sys.workdir)/inputs/.*"
comment => "Check if there are still promises about
cfengine 2 that need removing",
edit_line => delete_lines_matching(".*$(cf2bits).*"),
file_select => OldCf2Files,
action => warn_only;
# Check cf-execd and schedule is in crontab
"$(g.crontab)"
comment => "Add cfengine as a cron job, or check for cfengine 2
jobs to replace",
create => "true",
edit_line => upgrade_cfexecd;
processes:
exec_fix::
"cron" signals => { "hup" };
}
#######################################################
# General site issues can be in bundles like this one
#######################################################
bundle agent main
{
vars:
"component" slist => { "cf-monitord", "cf-serverd" };
# - - - - - - - - - - - - - - - - - - - - - - - -
files:
"$(sys.resolv)" # test on "/tmp/resolv.conf" #
comment => "Edit the resolver file",
create => "true",
edit_line => resolver,
edit_defaults => def;
# Uncomment this to perform a change-detection scan
# "/usr"
# changes => lay_trip_wire,
# depth_search => recurse("inf"),
# action => measure;
processes:
"cfenvd" signals => { "term" };
# Uncomment this if/when you are ready to upgrade a cf2 server
#
# "cfservd" signals => { "term" };
#
# Now make sure the new parts are running, cf-serverd will fail if
# the old server is still running
"$(component)" restart_class => canonify("start_$(component)");
# - - - - - - - - - - - - - - - - - - - - - - - -
commands:
"$(sys.workdir)/bin/$(component)"
ifvarclass => canonify("start_$(component)");
}
#######################################################
# Garbage collection issues
#######################################################
bundle agent garbage_collection
{
files:
"$(sys.workdir)/outputs"
delete => tidy,
file_select => days_old("3"),
depth_search => recurse("inf");
}
#######################################################
bundle edit_line resolver
{
vars:
"search" slist => { "search cfengine.com" };
delete_lines:
"search.*";
insert_lines:
"$(search)" location => start;
}
###########################################################
body file_select OldCf2Files
{
leaf_name => {
"promises.cf",
"site.cf",
"library.cf",
"failsafe.cf",
".*.txt",
".*.html",
".*~",
"#.*"
};
file_result => "!leaf_name";
}
###########################################################
body action measure
{
measurement_class => "Detect Changes in /usr";
ifelapsed => "240";
expireafter => "240";
}
#######################################################
# Anomaly monitoring
#######################################################
bundle agent anomalies
{
reports:
rootprocs_high_dev2::
"RootProc anomaly high 2 dev on $(mon.host) at $(mon.env_time)
measured value $(mon.value_rootprocs) av $(mon.av_rootprocs) pm
$(mon.dev_rootprocs)"
showstate => { "rootprocs" };
entropy_www_in_high&anomaly_hosts.www_in_high_anomaly::
"HIGH ENTROPY Incoming www anomaly high anomaly dev!! on
$(mon.host) at $(mon.env_time)
- measured value $(mon.value_www_in) av $(mon.av_www_in) pm
$(mon.dev_www_in)"
showstate => { "incoming.www" };
entropy_www_in_low.anomaly_hosts.www_in_high_anomaly::
"LOW ENTROPY Incoming www anomaly high anomaly dev!! on $(mon.host)
at $(mon.env_time)
- measured value $(svalue_www_in) av $(av_www_in) pm $(dev_www_in)"
showstate => { "incoming.www" };
entropy_tcpsyn_in_low.anomaly_hosts.tcpsyn_in_high_dev2::
"Anomalous number of new TCP connections on $(mon.host) at $(mon.env_time)
- measured value $(mon.value_tcpsyn_in) av $(mon.av_tcpsyn_in) pm
$(mon.dev_tcpsyn_in)"
showstate => { "incoming.tcpsyn" };
entropy_dns_in_low.anomaly_hosts.dns_in_high_anomaly::
"Anomalous (3dev) incoming DNS packets on $(mon.host) at $(mon.env_time)
- measured value $(mon.value_dns_in) av $(av_dns_in) pm $(mon.dev_dns_in)"
showstate => { "incoming.dns" };
entropy_dns_in_low.anomaly_hosts.udp_in_high_dev2::
"Anomalous (2dev) incoming (non-DNS) UDP traffic on $(mon.host) at
$(mon.env_time)
- measured value $(mon.value_udp_in) av $(mon.av_udp_in) pm
$(mon.dev_udp_in)"
showstate => { "incoming.udp" };
anomaly_hosts.icmp_in_high_anomaly.!entropy_icmp_in_high::
"Anomalous low entropy (3dev) incoming ICMP traffic on $(mon.host)
at $(mon.env_time)
- measured value $(mon.value_icmp_in) av $(mon.av_icmp_in) pm
$(mon.dev_icmp_in)"
showstate => { "incoming.icmp" };
}
#######################################################
# Server configuration
#######################################################
bundle server access_rules()
{
access:
"/var/cfengine/masterfiles"
admit => { "127.0.0.1", "205.186.156.208" };
roles:
".*" authorize => { "root" };
}
########################################################
bundle edit_line upgrade_cfexecd
{
classes:
"exec_fix" not => regline(".*cf-execd.*","$(edit.filename)");
insert_lines:
exec_fix::
"0,5,10,15,20,25,30,35,40,45,50,55 * * * * /var/cfengine/bin/cf-execd -F";
replace_patterns:
"cfexecd" replace_with => value("cf-execd");
reports:
exec_fix::
"Added a 5 minute schedule to crontabs";
}
#######################################################
body edit_defaults def
{
empty_file_before_editing => "false";
edit_backup => "false";
max_file_size => "100000";
}
2. Client configuration:
body common control
{
bundlesequence => { "updatefrom2" };
inputs => { "cfengine_stdlib.cf" };
}
#########################################################
body agent control {
skipidentify => "true";
bindtointerface => "205.186.156.208";
}
#########################################################
bundle agent updatefrom2
{
vars:
"master_location" string => "/var/cfengine/masterfiles";
files:
"/var/cfengine/inputs"
perms => u_p("600"),
copy_from => mycopy("$(master_location)","cfengine02"),
depth_search => recurse("inf"),
action => immediate;
}
############################################
body perms u_p(p)
{
mode => "$(p)";
}
#########################################################
body copy_from mycopy(from,server)
{
source => "$(from)";
servers => { "$(server)" };
compare => "digest";
encrypt => "true";
trustkey => "true"; # trust the server's public key
}
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine