Nun nach einem knappen Jahrzehnt musste ich meinen MacMini mit dem Apple MDM leider doch so langsam aufgeben und in den Jordan schicken. Lange zeit war ich auf der Suche nach einem Device Management um Profile auf meine Apple Devices sinnvoll zu pushen und bin all zu oft bei bezahlten Lösungen gelandet, welche ich privat mir dann so nicht einfach leisten wollte.
So war ich auf der Suche nach einer open source Lösung und bin letztlich bei MicroMDM hängen geblieben.
Anforderungen und Limitationen
- MicroMDM ist keine fertige Lösung: Das Produkt selbst benötigt noch einen Webhook-Server (ich setzte hier auf MDMDirectory – von welchem mein zweiter Post handeln wird)
- Profile müssen extern editiert und erstellt werden (ebenfalls ein weiterer Post)
- Es gibt keine UI und die Verwaltung passiert via CLI oder API
- Es wird ein SSL Zertificate (ich verwende intern meine eigene CA via Reverse Proxy mit Lets Encrypt)
- Um Profile zu signieren wird ein PKCS12 Zertifikat benötigt – Auch hier meine eigene CA und via lokalem Trust Profile auf dem Device hinterlegt
- Linux (ich bevorzuge Debian) mit mind. 2 CPU / 4 RAM (aktuell läuft es aber auch mit 2GB RAM)
- MicroMDM signiert keine Profile – muss extern, via CLI oder mit MDMDirectory gemacht werden
MicroMDM – Installation step by step
Download Binaries
Die letzte Version können wir im Git Repository als zip File herunterladen und entdecken, anschliessen verschieben wir die Binaries entsprechend ins Bin-Verzeichnis des Debians. https://github.com/micromdm/micromdm/releases/tag/v1.9.0
wget https://github.com/micromdm/micromdm/releases/download/v1.9.0/micromdm_XYZ.zip
unzip micromem_vXYZ.zip
mv micromdm /usr/bin/
mv mdmctl /usr/bin/
Non-root Service User
Aus Sicherheitsgründen möchte ich den Server nicht als Root-User ausführen und lege deshalb eine dedizierten User an – in meinem Falle den User “mdm”.
- useradd mdm
Anschließend generieren wir noch entsprechende Verzeichnisse und Rechte.
- mkdir /home/mdm && mkdir /home/mdm/pkg
- chown -r mdm:mdm /home/mdm
- chown mdm:root /usr/bin/micromdm && chown mdm:root /usr/bin/mdmctl
- setcap ‘cap_net_bind_service=+ep’ /usr/bin/micromdm && setcap ‘cap_net_bind_service=+ep’ /usr/bin/mdmctl
API Key & Start des Services
Nun loggen wir uns mir dem mdm-User ein und setzen den API Key, welcher von MicroMDM verwendet wird, um die API-Authentifizierung durchzuführen.
- su mdm
- vi ~/.bash_profile
export apikey=SECRETTOKEN
Start des Services
Um den Service in der Terminal Session zu starten, geben wir folgenden Befehl ein:
micromdm serve \
-server-url=https://MDM.DOMAIN.TLD \
-api-key $apikey \
-filerepo /home/mdm/pkg
-tls-cert /etc/ssl/MDM.crt \
-tls-key /etc/ssl/MDM.key
Dabei bitte die Parameter entsprechend deinen Werten setzten:
- MDM.DOMAIN.TLD = MDM-FQDN
- MDM.crt = Signiertes Webserver Zertifikat inkl. Chain
- MDM.key = Private Key des Webserver Zertifikat
Anschließend öffnen wir eine zweite Terminal-Session um das CLI-Tool von MicroMDM aufzusetzen:
mdmctl config set \
-name production \
-api-token $apikey \
-server-url https://MDM.DOMAIN.TLD
mdmctl config switch -name production
Apple Push Certificate
Das Apple Push Certificate wird von MicroMDM dazu verwendet, um über Apple dem jeweiligen Device mitzuteilen, das eine bestimmte Operation angestoßen wird (z.B. ein Profile nachzuladen).
Es gibt hier zwei Optionen ein entsprechendes Zertifikat zu bekommen
- Es muss eine Developer Subscription (ca. 99USD/Jahr) bezogen werden
- Verwendung des open source Service von: mdmcert.download (siehe nachfolgend)
Generien des Keys und CSRs via mdmcert.download
Ich verwenden den Service von MDMcert – das renewal des Push Certificates muss jährlich gemacht werden. Um den Service zu verwenden muss man sich auf mdmcert.download initial mit einer Mail-Adresse registrieren.
- mkdir ~/mdmcert && cd ~/mdmcert
- mdmctl mdmcert.download -new -email=YOUREMAIL
- Nach Ausführen erhalten wir eine Mail mit einem verschlüsselten Attachment.
- Dieses Laden wir auf den Server in das Directory hoch.
- scp ~/Downloads/*.p7 mdm:/home/mdm/mdmcert
- Nun können wir das verschlüsselten Attachment wie folgend entschlüsseln und erhalten ein CSR
- mdmctl mdmcert.download -decrypt=<xyz.p7>
Signieren des CSR via Apple
Das CSR muss nun wieder auf den Client runtergeladen, entsprechend von Apple signiert und anschließend auf den Server hochgeladen werden:
- scp mdm:/home/mdm/mdmcert/mdmcert.download.push.req ~/Downloads/
- Signieren bei Apple:: https://identity.apple.com
- Upload auf Server
- scp ~/Downloads/MDM*Certificate.pem mdm:/home/mdm/mdmcert/mdmcert.download.push.pem
Zuletzt müssen wir noch das Zertifikat via CLI beim MicroMDM einspielen
- mdmctl mdmcert upload -cert mdmcert.download.push.pem -private-key mdmcert.download.push.key
Run MicroMDM as Service Daemon
Damit MicroMDM nicht nur läuft wenn wir in eine aktive Terminal-Session den Service starten, lohnt es sich einen Service Daemon zu konfigurieren.
Create a Service
vi /etc/systemd/system/micromdm.service
[Unit]
Description=MicroMDM - a MDM Server for Apple Devices
Documentation=https://github.com/micromdm/micromdm
After=network.target
[Service]
User=mdm
ExecStart=/usr/bin/micromdm serve \
-server-url=https://MDM.DOMAIN.TLD \
-api-key APITOKEN \
-filerepo /home/mdm/pkg \
-tls-cert /etc/ssl/mdm.crt \
-tls-key /etc/ssl/mdm.key \
-command-webhook-url=http://WEBHOOK.DOMAIN.TLD:8000/webhook \
-http-proxy-headers true
Restart=on-failure
[Install]
WantedBy=multi-user.target
Enable the Service
- systemctl daemon-reload
- systemctl enable micromdm.service && systemctl start micromdm.service
Service Handling
- systemctl start micromdm.service
- systemctl restart micromdm.service
- systemctl status micromdm.service
Service Logs
- journalctl -u micromdm.service -f
Nächste schritte
An dieser Stelle läuft nun MicroMDM und Devices können mit dem enrollment Profile registriert werden.
Dazu einfach die Webseite des MicroMDM aufrufen (“MDM.DOMAIN.TLD”) und das Enrollment Profile entweder direkt auf den Gerät Installieren oder via 3 Lösung pushen.
Damit wir nun den Service aber sinnvoll verwenden können benötigt es wie eingehend erwähnt noch
- Das erstellen und Editieren, bzw. auch das signieren von Profilen (hier gehts weiter)
- Den MDMDirectory Service um alle Funktionalitäten zu verwenden (hier gets weiter)