Skip to content

Commit cd57a33

Browse files
authored
Merge pull request #7 from codeGROOVE-dev/readme
Make the README make sense
2 parents 189b74d + 6d9eb46 commit cd57a33

File tree

1 file changed

+71
-42
lines changed

1 file changed

+71
-42
lines changed

README.md

Lines changed: 71 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,44 @@
44
![Go Version](https://img.shields.io/github/go-mod/go-version/codeGROOVE-dev/gitMDM)
55
![License](https://img.shields.io/github/license/codeGROOVE-dev/gitMDM)
66
![Go Report Card](https://goreportcard.com/badge/github.com/codeGROOVE-dev/gitMDM)
7-
![Platform Support](https://img.shields.io/badge/platform-linux%20%7C%20macos%20%7C%20bsd%20%7C%20windows-blue)
7+
![Platform Support](https://img.shields.io/badge/platform-linux%20%7C%20macos%20%7C%20bsd%20%7C%20windows%20%7C%20solaris%20%7C%20plan9%20-blue)
88

9-
A security-first MDM that proves compliance without compromising your infrastructure.
9+
A security-first MDM that manages compliance without compromising your infrastructure.
1010

1111
![logo](./media/logo_small.png "gitMDM logo")
1212

1313
## A Different Approach to Device Management
1414

1515
Traditional MDMs were designed for corporate IT control. They require root access, execute remote commands, and create a massive attack surface. One compromised MDM server can mean game over for your entire fleet.
1616

17-
gitMDM takes a security-first approach. Built on the principle that even your MDM server shouldn't be trusted with root access to your machines.
17+
gitMDM takes a security-first approach. Built on the principle that a compromise of your MDM server shouldn't result in an instant root-level compromise of its clients.
1818

19-
## Demo
19+
## Features
2020

21-
https://gitmdm.codegroove.dev/ - a real life instance of gitMDM.
21+
* Cross-platform (Linux, macOS, *BSD, Solaris, Windows)
22+
* YAML configuration - cryptographically signed using [sigstore](https://sigstore.org/)
23+
* Designed to run as a non-root user
24+
* Uses [git](https://git.org/) as a datastore for a persistent trail of events
25+
* Secure-by-design with a minimal attack surface
26+
* Low maintenance, low dependencies
27+
* Self-hostable on anything from [Google Cloud Run](https://cloud.google.com/run) to a [Raspberry Pi running Plan 9](https://luksamuk.codes/posts/plan9-setup-rpi.html)
2228

23-
### Core Security Principles
29+
## Demo
2430

25-
**Zero Trust Architecture**: The server cannot execute commands on agents - we didn't just disable it, we never built it. A compromised server gets you compliance reports, not a botnet.
31+
📺 https://gitmdm.codegroove.dev/ - a real-life unrestricted instance of gitMDM.
2632

27-
**Defense in Depth**: Agents run as unprivileged users (not root). Checks are compiled into the binary. With Sigstore, configurations are cryptographically signed. Even without signatures, a compromised server can't inject malicious code.
33+
## Default Compliance Checks
2834

29-
**Minimal Attack Surface**: No listening ports on agents. No remote execution capability. No auto-updates. The agent can only send data, never receive commands. This isn't configurable - it's architectural.
35+
By default, we verify only what we interpret as required for SOC 2 and ISO 27001 compliance:
36+
37+
- Disk encryption status
38+
- Screen lock configuration
39+
- OS security updates
40+
- Firewall status
41+
- Antivirus presence
42+
- Password policy (NIST 800-63B compliant)
3043

31-
**Transparency Through Simplicity**: Every check we run is visible in `checks.yaml`. The entire codebase is open source. Compliance data is stored in git with immutable history. Security through obscurity is not security.
44+
Want different checks? Edit `cmd/agent/checks.yaml`, sign the configuration, and run "make build". The checks are part of the binary, not runtime configuration.
3245

3346
## What Makes This Secure
3447

@@ -44,61 +57,77 @@ Instead of giving servers control over devices, we use a one-way reporting model
4457
(execute)
4558
```
4659

47-
Even if an attacker completely owns your server, they cannot:
48-
- Execute commands on agents
49-
- Install malware
50-
- Modify agent behavior
51-
- Access sensitive local files
52-
- Pivot to other machines
60+
Even if an attacker completely owns your server, they cannot modify agent behavior.
5361

54-
## Default Compliance Checks
62+
NOTE: We plan on making this approach more flexible in the future, but we will always choose secure-by-default.
5563

56-
We verify only what's required for SOC 2 and ISO 27001:
57-
- Disk encryption status
58-
- Screen lock configuration
59-
- OS security updates
60-
- Firewall status
61-
- Antivirus presence
62-
- Password policy (NIST 800-63B compliant)
64+
## Quick Start
6365

64-
Want different checks? Edit `cmd/agent/checks.yaml` and rebuild. The checks are part of the binary, not runtime configuration.
66+
### Server-less test of the agent
6567

66-
## Platform Support
68+
Want to see what the agent checks for without connecting it to a server? We've got you covered:
6769

68-
Secure on every platform:
69-
- Linux (all distros, all desktop environments)
70-
- macOS (10.15+)
71-
- BSD variants (Free/Open/Net/Dragonfly)
72-
- Windows 10/11
73-
- Solaris/Illumos
70+
```
71+
go run ./cmd/agent/ --run all --verbose
72+
🔍 Running compliance checks...
7473
75-
## Quick Start
74+
✅ AVAILABLE UPDATES [PASS]
75+
Command: softwareupdate -l
76+
Output:
77+
Software Update Tool
78+
79+
Finding available software
80+
Stderr: No new software available.
81+
82+
Status: OK
83+
...
84+
85+
```
86+
87+
### Client/Server configuration
88+
89+
Build the command-line utilities:
7690

7791
```bash
7892
make all
93+
```
94+
95+
To run the MDM server, there are two options for storage:
7996

80-
# Server (git-backed for auditability)
97+
* `-git`: the location of a git repo to clone and push to; if it's a local directory, we'll even `git init` the directory for you
98+
* `-clone`: the path to a locally checked out clone of a remote git repo.
99+
100+
```
81101
gitmdm-server -git /var/git
102+
```
103+
104+
By default, the server will generate a join key that clients need to confirm they are talking to the correct server. You can pass in a custom string using `--join scoobysnacks`. If the join key leaks, the worst someone can do is upload garbage compliance data for their machine.
105+
106+
We love Google Cloud Run for our deployment story - check out `./hacks/deploy.sh` to see how our own production infrastructure works.
107+
82108

83109
# Agent
84-
gitmdm-agent --install --server https://gitmdm.example.com --join KEY
110+
111+
To test the agent against the server, use:
112+
113+
```
114+
gitmdm-agent --server http://localhost:8080 --join KEY
85115
```
86116

87-
We love Google Cloud Run for our deployment story - check out `./hacks/deploy.sh` to see how our own production infrastructure works.
117+
To persistently install the agent, add `--install`, which will populate launchd (macOS), task scheduler (Windows), user-systemd (Linux), or cron (elsewhere).
88118

89119
## Security FAQ
90120

91-
**What's the worst case scenario if my server is compromised?**
92-
Attackers can read compliance reports and delete them. That's it. They cannot push commands, install software, or access agent machines.
121+
**What's the worst-case scenario if my server is compromised?**
93122

94-
**Why not just use osquery?**
95-
We ❤️ osquery – enough that we previously created [osquery-defense-kit](https://github.com/chainguard-dev/osquery-defense-kit) - but it's only part of an MDM solution, and didn't meet our goals when it came to platform support & operating with low privilege.
123+
Attackers can read compliance reports and trash them. They cannot push commands, install software, or access agent machines.
96124

97125
**How do you prevent supply chain attacks?**
98126
Agents are built from source, checks are compiled in, and with Sigstore integration, all configurations are cryptographically signed with identity verification. Minimal dependencies.
99127

100-
**What about insider threats?**
101-
Even malicious insiders with server access can only view compliance data. To modify agent behavior requires rebuilding and redistributing the binary - leaving an audit trail.
128+
## Contributions
129+
130+
... are very much appreciated. We actually want this to be useful.
102131

103132
---
104133

0 commit comments

Comments
 (0)