|
1 | | -# gitMDM: The MDM that isn't |
| 1 | +# gitMDM |
2 | 2 |
|
3 | | - |
| 3 | +Security-first compliance reporting that doesn't compromise your infrastructure. |
4 | 4 |
|
5 | | -⚠️ **HIGHLY EXPERIMENTAL - MAY EAT YOUR CAT** ⚠️ |
| 5 | +## The Problem |
6 | 6 |
|
7 | | -## What |
| 7 | +Every MDM is a backdoor. They typically require root access and arbitrary remote code execution. They're incompatible with secure-by-default operating systems. Yet auditors require them for SOC 2. |
8 | 8 |
|
9 | | -A "Mobile Device Management" solution that stores compliance data in Git. Built to pass SOC 2 without requiring a highly privileged RCE |
| 9 | +## The Solution |
10 | 10 |
|
11 | | -## Why |
| 11 | +gitMDM proves compliance without compromising security: |
| 12 | +- **No arbitrary remote code execution** - Checks are compiled into the agent binary |
| 13 | +- **No privileged access** - Runs as a normal user |
| 14 | +- **No phone-home** - Your git repo, your endpoint, your control |
| 15 | +- **Works everywhere** - Including secure-by-default systems such as OpenBSD. |
12 | 16 |
|
13 | | -Because real MDMs are backdoors with compliance features. This just generates the reports auditors want without the ability to actually control your devices. |
14 | | - |
15 | | -## Philosophy |
16 | | - |
17 | | -- **Can't manage devices** - Only reports on them |
18 | | -- **Can't execute commands** - Read-only by design |
19 | | -- **Can't phone home** - Your Git repo, your control |
20 | | -- **Can't compromise systems** - No privileges, no access |
21 | | - |
22 | | -## Architecture |
| 17 | +## How It Works |
23 | 18 |
|
24 | 19 | ``` |
25 | | -Device → Agent (reads) → Server (receives) → Git (stores) → Auditor ✅ |
| 20 | +[Agent] [Server] [Git] |
| 21 | +Run compiled checks → Receive reports only → Immutable audit trail |
26 | 22 | ``` |
27 | 23 |
|
28 | | -## Features |
| 24 | +The server **cannot** push commands. Ever. That's the point. |
29 | 25 |
|
30 | | -Proves compliance without control: |
31 | | -- Disk encryption status |
32 | | -- Firewall configuration |
33 | | -- User accounts |
34 | | -- System updates |
35 | | -- Screensaver locks |
| 26 | +## Quick Start |
36 | 27 |
|
37 | | -## Cross Platform |
| 28 | +```bash |
| 29 | +# Server |
| 30 | +./gitmdm-server -git [email protected]:org/compliance.git -api-key SECRET |
38 | 31 |
|
39 | | -We currently support: |
| 32 | +# Agent (checks compiled in from checks.yaml) |
| 33 | +./gitmdm-agent -server https://server:8080 |
| 34 | +``` |
40 | 35 |
|
41 | | -* Linux |
42 | | -* macOS |
43 | | -* FreeBSD |
44 | | -* OpenBSD |
45 | | -* NetBSD |
46 | | -* DragonFlyBSD |
47 | | -* Solaris |
48 | | -* illumos |
49 | | -* Windows 11 |
| 36 | +## What You Get |
50 | 37 |
|
51 | | -gitMDM supports any architecture supported by the Go programming language: from riscv to ppc64. |
| 38 | +SOC 2 compliance evidence in git: |
| 39 | +``` |
| 40 | +devices/laptop-alice/disk_encryption.json ✓ |
| 41 | +devices/laptop-alice/screen_lock.json ✓ |
| 42 | +devices/server-prod/firewall.json ✓ |
| 43 | +``` |
52 | 44 |
|
53 | | -## Installation |
| 45 | +Every check, every change, cryptographically signed and timestamped. |
54 | 46 |
|
55 | | -```bash |
56 | | -# Build |
57 | | -make build |
| 47 | +## Supported Platforms |
58 | 48 |
|
59 | | -# Server (pick one) |
60 | | -./gitmdm-server -git https://github.com/you/compliance.git # Clone & push |
61 | | -./gitmdm-server -clone /path/to/repo # Use existing |
| 49 | +Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, Solaris, illumos |
62 | 50 |
|
63 | | -# Agent |
64 | | -./gitmdm-agent -server http://your-server:8080 |
| 51 | +## checks.yaml |
65 | 52 |
|
66 | | -# Deploy |
67 | | -echo "gitmdm-agent -server http://your-server:8080" | crontab - |
| 53 | +```yaml |
| 54 | +checks: |
| 55 | + disk_encryption: |
| 56 | + openbsd: "bioctl softraid0 | grep -q CRYPTO" |
| 57 | + linux: "lsblk -o NAME,FSTYPE | grep -q crypto_LUKS" |
| 58 | + darwin: "fdesetup status | grep -q 'On'" |
68 | 59 | ``` |
69 | 60 |
|
70 | | -## GitHub Auth |
71 | | - |
72 | | -```bash |
73 | | -# Use SSH (recommended) |
74 | | -./gitmdm-server -git [email protected]:you/compliance.git |
| 61 | +Edit, compile, deploy. No runtime configuration files to tamper with. |
75 | 62 |
|
76 | | -# Or GitHub CLI |
77 | | -gh auth setup-git |
78 | | -``` |
| 63 | +## Security Guarantees |
79 | 64 |
|
80 | | -## Configuration |
| 65 | +- Server compromise = read-only access to compliance reports |
| 66 | +- No arbitrary code execution, even with root on the server |
| 67 | +- Agent decides what runs based on compiled-in checks |
| 68 | +- Bash restricted mode when shell execution is needed |
81 | 69 |
|
82 | | -Edit `checks.yaml` to define compliance checks. Default config satisfies most auditors. |
| 70 | +## Building |
83 | 71 |
|
84 | | -## Security |
85 | | - |
86 | | -Traditional MDMs: Give someone your house keys to check if the door is locked. |
87 | | -gitMDM: Someone photographs your locked door from across the street. |
| 72 | +```bash |
| 73 | +vim checks.yaml # Define your compliance checks |
| 74 | +make build # Compiles checks into binary |
| 75 | +``` |
88 | 76 |
|
89 | | -**Result**: Compliance without compromise. |
| 77 | +## FAQ |
90 | 78 |
|
91 | | -**Note**: The server accepts reports without authentication by default. While this means anyone could submit false compliance data, they still can't access or control your actual devices. Enable API key authentication (`-api-key`) or use network-level controls if you need to verify report sources. |
| 79 | +**Q: Is this SOC 2 compliant?** |
| 80 | +A: It generates the reports auditors need. Without the backdoors. |
92 | 81 |
|
93 | | -## Disclaimer |
| 82 | +**Q: What if we need to change checks?** |
| 83 | +A: Rebuild and redeploy. Immutability is a feature. |
94 | 84 |
|
95 | | -This software proves compliance. It doesn't actually manage devices. That's the point. |
| 85 | +**Q: Why git?** |
| 86 | +A: Cryptographic proof, audit trail, existing tooling, no database. |
96 | 87 |
|
97 | 88 | --- |
98 | 89 |
|
99 | | -*Built with spite by someone who wanted to pass SOC 2 with OpenBSD.* |
| 90 | +*Built for organizations that refuse to compromise security for compliance.* |
0 commit comments