class: center, middle # FreeIPA fernsteuern mit PHP und JSONRPC-API ### Hauke Goos-Habermann #### https://goos-habermann.de --- ### Über mich - Entwickler des Softwareverteilungssystems m23 - Organisator der Kieler Open Source und Linux Tage - Dienstleister zu m23, Linux und Freier Software - Softwareentwicklung (PHP, BASH, C/C++, JS, Python und was sonst so gebraucht wird...) - Administration - Schulungen - Support - Beratung - quasi **alles**, *was mit Linux zu tun hat* - Aktuell: Neues Kundenprojekt mit FreeIPA auf AlmaLinux --- ###Das habe ich dieses Mal vor - Erstellung eines Benutzers per Skript in FreeIPA mit den folgenden Eigenschaften: - SSH-Schlüssel hinterlegt - Kerberos keytab exportiert, die beim Anmelden per SSH automatisch ein Kerberos-Ticket für die Benutzung des ipa-Programms zieht - Nicht ablaufendes Paßwort (bis 2050), zum Anmelden an die Weboberfläche und die JSONRPC-API - FreeIPA-Adminrechte durch Zuweisung zu entsprechenden Gruppen - ipa-Programm - Vom ipa-Aufruf zu JSON-Parametern - PHP-Kommandozeile(n-Pakete) - PHP-Skript zum Aufrufen der JSONRPC-API --- ### API-Benutzer erstellen Das Skript zum Anlegen des Benutzers enthält alle Schritte, damit dieser Benutzer die JSONRPC-API und das ipa-Programm verwenden und sich per SSH-Schlüssel anmelden kann. Zum Installieren loggen wir uns auf dem FreeIPA-Server (als root) ein. Anschließend: * Das Skript **
API-Benutzer_erstellen.sh
** herunterladen * **Variablen am Skriptanfang ändern!** * Mit der BASH als **root** ausführen **Hinweis:** Es wird das Paßwort des FreeIPA-**admin**-Benutzers benötigt, um das Kerberos-Ticket für die Nutzung des ipa-Programms zu ziehen. --- ### ipa-Programm **ipa** ist das Kommandozeilen-Administrationsprogramm von FreeIPA, welches eine integrierte Hilfe mit Beispielen enthält. ```bash # Übersicht über die Themenbereiche ipa help topics # Beispiele zu DNS ipa help dns # DNS-Einträge anlegen und löschen ipa help dnsrecord-add ipa help dnsrecord-del ``` --- ### Vom ipa-Aufruf zu JSON-Parametern ```bash # Kerberos-Ticket holen, wenn kein gültiges vorhanden ist if ! klist -s then kinit admin fi # DNS-Eintrag eines Rechners löschen (JSON-Ein/Ausgabe: "-vv") ipa -vv dnsrecord-del --del-all almalinux.local ipatest4 ``` JSON-Parameter: ```json { "id": 0, "method": "dnsrecord_del/1", "params": [ [ "almalinux.local", { "__dns_name__": "ipatest4" } ], { "del_all": true, "version": "2.239" } ] } ``` --- ### PHP-Kommandozeilen-Pakete installieren Ja, es gibt einen PHP-Kommandozeileninterpreter, der z.B. für kleine Tests oder umfangreichere Skripte (z.B.
m23-autoTest
) verwendet werden kann. So wird er – zusammen mit der curl-Erweiterung – installiert: ```bash apt-get -y install php-cli php-curl ``` --- ### JSON-Parameter in PHP Aus dem Ergebnis **, (Zeilenumbruch) "version" ...** und **/1** entfernen und PHP-Variablen einfügen: ```php $domain = 'almalinux.local'; $client = 'ipatest4'; $q = '{ "id": 0, "method": "dnsrecord_del", "params": [ [ "'.$domain.'", { "__dns_name__": "'.$client.'" } ], { "del_all": true } ] }'; ``` **Hinweis:** Das Entfernen der Versionsnummer führt zu einer Warnung. Was passiert, wenn die Versionsnummern von Client und Server zu weit auseinanderliegen, müßte man im Einzelfall genauer untersuchen. --- ### PHP-Skript: Jetzt alles zusammen Das PHP-Skript **
API-Test.php.txt
** herunterladen, in **API-Test.php** umbenennen, die JSON-Parameter eintragen und auf der Kommandozeile mit ```bash php API-Test.php ``` ausführen. Viel Spaß beim weiteren Experimentieren :-) --- class: center, middle ### Informationen zu mir und meinen Dienstleistungen, m23, ... ### https://goos-habermann.de