injection attacks; each host only receives its own configuration and no data
from other hosts
- *safety and security*: create files with "write to temporary file", "sync",
- "rename", "sync directory" for atomicity and durability; guard against
- symlink and other TOCTOU attacks; extensive test suite
+ "rename", "sync directory" for atomicity and durability; implemented in a
+ memory safe language and using a simple synchronization protocol to prevent
+ attacks on the local host; guard against symlink and other TOCTOU attacks;
+ extensive test suite
== Overview
- Commands are executed with `/bin/sh -c` on the remote host which might leak
sensitive information to other users via the command line (unless `/proc` is
- mounted with `hidepid=`). Store sensitive data in a file and execute or
- source it as a workaround.
+ mounted with `hidepid=` on GNU/Linux systems). Store sensitive data in a
+ file and execute or source it as a workaround.
- Permissions of existing files and directories will be overwritten with the
default (root/root, 0644 for files, 0755 for directories) unless manually
configured via `permissions.yaml`. This includes important paths like
`/root` which often have strict permissions by default, so carefully check
- the diff output for unwanted changes.
+ the output for unwanted changes.
- The full file content of all files is sent to the remote during
synchronization. This makes it impractical to synchronize large files with
== Requirements
- to build the `safcm` binary and remote helper:
- * Go >= 1.16
+ * Go >= 1.16 (for `go:embed`, `io/fs`)
* GNU make
- local host:
Adding support for other operating systems (e.g. BSDs) or distributions
including package managers (e.g. Arch, Gentoo) is easy. Please send patches.
+At the moment the remote helper is built for the following operating systems
+($GOOS) and architectures ($GOARCH). To add more architectures simply edit
+`cmd/safcm-remote/build.sh`.
+
+ - freebsd: amd64
+ - linux: amd64, armv7
+ - openbsd: amd64
+
== Authors