Christian/ November 30, 2022/ Betriebssysteme, Comannds

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

  1. Es muss eine Developer Subscription (ca. 99USD/Jahr) bezogen werden
  2. 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)
Share this Post