====== Puppet configuration ======
//The following are steps in demystifying/reverse-engineering how puppet works on the VMs://
1. Puppet is installed and updates to the puppet config files (from gitea) is via crontab:
##
## Puppet removed from configs here as no longer used.
# HEADER: This file was autogenerated at 2021-03-15 05:48:52 +1100 by puppet.
# HEADER: While it can still be managed manually, it is definitely not recommended.
# HEADER: Note particularly that the comments starting with 'Puppet Name' should
# HEADER: not be deleted, as doing so could cause duplicate cron jobs.
# Puppet Name: repofix
*/5 * * * * /usr/local/bin/repofix &> /dev/null
# Puppet Name: puppet-apply-reboot
@reboot /opt/puppetlabs/bin/puppet apply /var/lib/puppet/manifests/puppet-common/00_puppet.pp &> /tmp/puppet-apply-reboot-priority.log && /opt/puppetlabs/bin/puppet apply /var/lib/puppet/manifests &> /tmp/puppet-apply-reboot.log
# Puppet Name: puppet-apply
*/15 * * * * /opt/puppetlabs/bin/puppet apply /var/lib/puppet/manifests &> /tmp/puppet-apply
There are three cronjobs:
- **puppet-apply-reboot **- intended when there's a server reboot
- **repofix **- pulls down files from gitea into /var/lib/puppet/manifests
- **puppet-apply**, which calls puppet to apply new configs found in: /var/lib/puppet/manifests.
So the two regular ongoing jobs of interest are:
* repofix - keeps the server configs in synch with gitea (pulls them down, overwrites local files)
* puppet-apply - enact the instructions found in the puppet manifest files
Hence, to test a puppet config, add a puppet config to a directory then point the4 puppet command directly at that, e.g.:
''puppet apply /root/test/new.pp''
In /var/lib/puppet/manifests is the **puppet-common** directory, which contains the following files:
-rw-r--r--. 1 root root 2.4K Mar 15 2021 00_puppet.pp
-rw-r--r--. 1 root root 780 Mar 15 2021 01_packages.pp
-rw-r--r--. 1 root root 451 Mar 15 2021 02_rootpw.pp
-rw-r--r--. 1 root root 765 Mar 15 2021 03_fail2ban.pp
-rw-r--r--. 1 root root 1.8K Mar 15 2021 04_hardening.pp
-rw-r--r--. 1 root root 309 Mar 15 2021 06_pam.pp
-rw-r--r--. 1 root root 473 Mar 15 2021 07_hosts.pp
-rw-r--r--. 1 root root 2.2K Mar 15 2021 09_ssl.pp
-rw-r--r--. 1 root root 1.4K Mar 15 2021 10_email.pp
-rw-r--r--. 1 root root 3.2K Mar 15 2021 10_ssh.pp
-rw-r--r--. 1 root root 410 Mar 15 2021 20_iptables.pp
-rw-r--r--. 1 root root 284 Mar 15 2021 30_sudoers.pp
-rw-r--r--. 1 root root 526 Mar 15 2021 40_rkhunter.pp
-rw-r--r--. 1 root root 384 Mar 15 2021 60_firewalld.pp
-rw-r--r--. 1 root root 847 Mar 15 2021 61_firewalld-ipsets.pp
-rw-r--r--. 1 root root 139 Mar 15 2021 62_firewalld-direct-chains.pp
-rw-r--r--. 1 root root 574 Mar 15 2021 63_firewalld-services.pp
-rw-r--r--. 1 root root 356 Mar 15 2021 64_firewalld-direct-rules.pp
-rw-r--r--. 1 root root 413 Mar 15 2021 64_firewalld-rules.pp
-rw-r--r--. 1 root root 156 Mar 15 2021 69_firewalld-reload.pp
-rw-r--r--. 1 root root 2.6K Mar 15 2021 90_users.pp
drwxr-xr-x. 8 root root 198 Oct 4 06:20 .git/
-rw-r--r--. 1 root root 28 Mar 15 2021 README.md
The "repofix" script looks like:
#!/bin/bash
set -u
REPOBASE=/var/lib/puppet/manifests
RUNDATE=$(date +'%Y-%m-%d-%H-%M-%S')
LOGPATH=/var/log/repofix
LOGFILE=${LOGPATH}/${RUNDATE}.log
[ ! -d $LOGPATH ] && mkdir -p ${LOGPATH}
echo "RUN for ${RUNDATE}" &> $LOGFILE
for REPO in $(ls -d $REPOBASE/*)
do
cd ${REPO}
if [[ ! $(git status | tail -n1) == "nothing to commit, working directory clean" ]]
then
echo "need to fix $REPO, showing diff on next line" &>> ${LOGFILE}
git diff &>> ${LOGFILE}
git fetch origin &> /dev/null
git reset --hard origin/master &> /dev/null
fi
git pull &> /dev/null
done
echo "END RUN" &>> ${LOGFILE}
This is run by root and uses an SSH key found in **/root/.ssh/id_rsa_deploy.pub**. To make use of this, the following remediation also needed doing:
- create a gitea user called deploy
- add id_rsa_deploy.pub as a valid key to this account
- amended ~/.ssh/config so that the "deploy" hostname used "deploy" as an account (only for ssh purposes - the username is actually "git"
- tested with "git status" and "git pull" to check connectivity (outstanding: still some permissions to fix)
Also had to create **tombstones/puppet-common** repo in gitea so that the git pull commands worked (still some fixing required).
===== Puppet files: =====
The contents of **puppet-common **from albert have been committed to gitea (from fender, not albert) but there is still some issue with git on albert pulling them down - to be fixed. Once that's done, albert will begin using files checked into gitea.