Enterprise Policy Generator

  • In gut einem Monat erscheint Firefox ESR 60, daher möchte ich die Gelegenheit für eine kleine Vorankündigung nutzen. Ich arbeite derzeit an einer neuen WebExtension, welche in Zusammenhang mit der neuen Policy Engine von Firefox 60 steht. Die Policy Engine wird die Konfiguration von Firefox erlauben, z.B. about:config deaktivieren, Telemetrie deaktivieren, Startseite festlegen usw., eben alles, was für Unternehmen relevant ist. Die Erweiterung generiert die Konfigurations-Datei, welche nur noch in das Installationsverzeichnis von Firefox kopiert werden muss - keine weitere Konfiguration notwendig! Meine Erweiterung Enterprise Policy Generator wird damit quasi ein inoffizieller Nachfolger des CCK2 Wizards werden, für die Generation Firefox Quantum.

    Mancher erinnert sich vielleicht, in die Entwicklung meiner Erweiterung Bookmarks Organizer habe ich auch vom ersten Tag an Einblicke gegeben. Daran möchte ich anknüpfen. Zwar gibt es noch nichts für euch zum Testen, aber ich möchte schon einmal zeigen, wo ich nach dem ersten Tag Entwicklung stehe.

    Anbei ein Screenshot, der zeigt, wie es momentan aussieht.

    [attachment=1]epg-preview-1.png[/attachment]

    Sieht noch nicht schön aus, aber es ist ja auch noch die Implementierungsphase. Ein schönes Design ist in Arbeit, aber das wird erst am Ende implementiert.

    Das funktioniert bereits:

    - Die technische Implementierung der Boolean-Optionen ist abgeschlossen, sowohl für Einstellungen, welche auf 'true' gesetzt werden, als auch für Einstellungen, welche auf 'false' gesetzt werden. Das heißt, alles, was ganz schlicht mit "Anschalten" bzw. "Abschalten" beantwortet werden kann, kann die Erweiterung technisch gesehen bereits leisten.
    - Die Erweiterung kann bereits die Konfigurationsdatei generieren.
    - Die Erweiterung kann bereits Einstellungen, welche nur in Firefox ESR funktionieren, entsprechend markieren.
    - Die Wartbarkeit ist für mich extrem einfach, was es mir ermöglicht, zusätzliche Policies sehr schnell zu implementieren. Ich habe das Ganze so entwickelt, dass ich als Entwickler nur eine einzige Konfigurations-Datei erweitern muss, um zusätzliche Optionen bereitzustellen. Die Darstellung in der Oberfläche sowie die ganze Funktionalität wird durch meine abstrakte Implementierungsweise ganz automatisch gewährleistet, ohne dass ich (die vollständige Implementierung aller Typen vorausgesetzt) jemals etwas dazu programmieren muss, um neue Policies zu unterstützen. Heißt natürlich auch, dass es für andere extrem einfach ist, zur Erweiterung beizutragen, wenn Mozilla neue Policies implementiert. Siehe der folgende Screenshot, wie Policies ergänzt werden:

    [attachment=0]epg-preview-2.png[/attachment]

    (nur der einfachste Typ, Booleans, sind hier sichtbar, siehe oben, mehr ist ja noch nicht implementiert)

    Das ist noch offen:

    - Derzeit werden wie gesagt nur die Boolean-Einstellungen unterstützt. Die Unterstützung für sämtliche komplexere Einstellungen ist noch offen.
    - Wie im ersten Screenshot zu sehen, sind erst sechs Policies implementiert, Firefox unterstützt bereits sehr viele mehr. Die kommen alle noch.
    - Die Möglichkeit, Einstellungen vor Veränderungen zu schützen, wird noch implementiert.
    - Mehrsprachigkeit wird noch unterstützt werden.
    - Konfigurationen wird man später speichern und laden können, so dass man nicht jedes Mal alles neu zusammenklicken muss, z.B. wenn man nur eine Sache anders haben will.
    - Eine Versionserkennung kommt noch für Policies, die erst nach Firefox 60.0 kommen.
    - Das Design muss noch implementiert werden.

  • Ja, das schaut doch schon mal ganz gut aus. :)
    War wahrscheinlich auch nicht so schwer, die Boolean-Einstellungen zu integrieren.


    Die Unterstützung für sämtliche komplexere Einstellungen ist noch offen.


    Heisst das, du weisst noch nicht, ob das überhaupt in die Extension übernommen wird oder nur, das es zu einem späteren Zeitpunkt hinzukommt? Und falls ja, werden dann solche Geschichten wie etwa Bookmarks, Cookies und Popups ebenfalls berücksichtigt?
    Das würde ja schon eine umfangreichere Eingabe-Maske erforderlich machen, wenn ich das richtig sehe.

    Windows 10 | FF 62.0 (64-Bit) / FF 61.0 (64-Bit) / FF 63.0 (64-Bit)

  • Ja, das schaut doch schon mal ganz gut aus. :)

    Danke! :)

    War wahrscheinlich auch nicht so schwer, die Boolean-Einstellungen zu integrieren.

    Es war natürlich von allen Options-Typen das Einfachste und ich habe mit dem Einfachsten begonnen, weil sich auf der Grundlage dann aufbauen lässt.

    Auf der anderen Seite musste ich ja auch erst einmal die allgemeine Architektur aufbauen und dabei ging es nicht nur darum, dass eine Checkbox etwas zur Ausgabe hinzufügt, sondern eben auch darum, dass die Erweiterung selbst alle Optionen aus einer Konfiguration liest und dann selbständig die Oberfläche aufbaut. Das heißt, ich füge ein Policy-Objekt zur Konfiguration der Erweiterung dazu und die Checkbox samt Beschreibungstext, Versionsprüfung, ESR-Prüfung etc. findet alles automatisch statt und muss nicht für jede Einstellung neu implementiert werden. So gesehen war es am Ende gar nicht tatsächlich einfacher, weil die Architektur erst konzipiert und implementiert werden musste. Jetzt, wo die Architektur steht, muss diese "nur" noch erweitert werden. Von den Options-Typen her sind die anderen definitiv schwieriger als Boolean-Optionen, aber gut machbar, wenn man verstanden hat, wie Mozilla die Options-Typen implementiert hat. Dabei hilft sehr, dass Mozilla ein Schema in Form einer JSON-Datei erstellt hat, so dass ich nur dieses Schema, welches eine einzige Datei ist, verstehen und interpretieren muss und dann nicht mehr die Implementierung jeder einzelnen Policy im Quellcode suchen und überprüfen muss. So kann ich wirklich eine abstrakte Architektur bauen, die selbst schlau genug ist, mit den Daten, die ich in die Erweiterung werfe, zu arbeiten, sowohl für bereits bestehende, aber auch für alle noch kommenden Policies!


    Heisst das, du weisst noch nicht, ob das überhaupt in die Extension übernommen wird oder nur, das es zu einem späteren Zeitpunkt hinzukommt? Und falls ja, werden dann solche Geschichten wie etwa Bookmarks, Cookies und Popups ebenfalls berücksichtigt?
    Das würde ja schon eine umfangreichere Eingabe-Maske erforderlich machen, wenn ich das richtig sehe.

    Zu einem späteren Zeitpunkt, aber definitiv noch vor Veröffentlichung von Firefox 60. Ich denke, eine Erweiterung wie diese ergibt nur eingeschränkt viel Sinn, wenn sie nicht alles unterstützt, ergo ist das natürlich auch mein Ziel.

    Das Wichtigste ist, dass ich erst einmal für jeden Options-Typen die Unterstützung einer Policy implementiere. Läuft die erste Policy eines Typs, müssen die anderen nur noch hinzugefügt werden. Das sind eh nicht so viele verschiedene Options-Typen. Da zahlt sich meine Architektur dann nämlich direkt aus: sobald alle Typen unterstützt sind, kann jeder helfen, die fehlenden Policies einzufügen, was keine (!) Programmier-Kenntnisse erfordert, sondern wirklich nur ein Übertragen von Daten ist!

  • Das klingt wirklich sehr gut. :)
    Ja, ich denke auch, dass das Hinzufügen von Policies ein Kinderspiel wird, sobald du alle Policy-Schemen implementiert hast.
    Eben weil es immer das gleiche Schema ist.
    Du schreibst, dass die Erweiterung selbst alle Optionen aus einer Konfiguration liest. Wie darf ich mir das vorstellen? Ist damit eine bereits bestehende policies.json gemeint oder wird da direkt auf die Firefox-Konfiguration zugegriffen? Wird in der endgültigen Version 60 automatisch eine policies.json angelegt oder muss man die selbst bzw. über die Extension anlegen?

    Windows 10 | FF 62.0 (64-Bit) / FF 61.0 (64-Bit) / FF 63.0 (64-Bit)

  • Du schreibst, dass die Erweiterung selbst alle Optionen aus einer Konfiguration liest. Wie darf ich mir das vorstellen? Ist damit eine bereits bestehende policies.json gemeint oder wird da direkt auf die Firefox-Konfiguration zugegriffen?

    Dabei handelt es sich um eine interne Konfiguration der Erweiterung, die sieht der Anwender nicht. Die kommt auch nicht von Firefox, sondern von der Erweiterung selbst. Diese Konfiguration definiert, welche Policies von der Erweiterung unterstützt werden und dementsprechend welche Optionen in der Oberfläche der Erweiterung angezeigt werden. Die Konfiguration beinhaltet alles, was für die Generierung der Oberfläche und Funktionalität wichtig ist: was für ein Options-Typ das ist (je nachdem geht die Erweiterung anders damit um), die Beschreibung der Policy, die Mindest-Firefox-Version, ob es nur für ESR oder auch im Mainstream-Firefox funktioniert, ob die Einstellung vor Veränderungen des Nutzers gesperrt werden kann oder nicht. Daraus wird alles generiert, was der Nutzer sieht und verändern kann.

    Wird in der endgültigen Version 60 automatisch eine policies.json angelegt oder muss man die selbst bzw. über die Extension anlegen?

    WebExtensions können nichts im Installationsverzeichnis anlegen und genau dort muss die generierte Policy-Datei hin. Ich werde die generierte Ausgabe a) am Bildschirm anzeigen und b) eine Download-Schaltfläche bereitstellen. Der Anwender muss die Policy-Datei am Ende aber selbst an den gewünschten Ort bringen.

  • Ah, okay. Die interne Extension-Konfig geht also zunächst mal von Default-Werten aus.

    >> WebExtensions können nichts im Installationsverzeichnis anlegen und genau dort muss die generierte Policy-Datei hin.

    Das kam falsch an. Ich weiss, dass dies nicht geht, wollte aber auch eher wissen, ob Firefox von sich aus bereits grundsätzlich eine solche policies.json anlegt.
    Nehmen wir an, ich erstelle mir mit der Extension eine policies.json und bearbeite die nachträglich händisch. Werden diese zusätzlichen Einträge bei einem erneuten Einlesen in die Extension berücksichtigt oder sind die nach erneutem Speichern gelöscht?

    Windows 10 | FF 62.0 (64-Bit) / FF 61.0 (64-Bit) / FF 63.0 (64-Bit)

  • Ah, okay. Die interne Extension-Konfig geht also zunächst mal von Default-Werten aus.

    Wenn du als Standard-Wert siehst, dass überhaupt keine Policy angewendet wird. Ich würde es so formulieren, dass ich erst einmal von überhaupt nichts ausgehe und dann Abweichungen vom Standard anwende. ;) Anders gesagt: Die Erweiterung geht nicht von irgendwelchen konkreten Standard-Werten aus, sondern fügt gar nicht erst hinzu, was du nicht anklickst. Das heißt, wenn du nur eine Sache festlegen möchtest, ist deine generierte Policy-Datei am Ende auch sehr viel kleiner als wenn du alles anklickst. Siehe erster Screenshot im ersten Beitrag: es sind sechs Checkboxen zu sehen, drei davon sind aktiviert und die generierte Ausgabe enthält dementsprechend auch nur drei Einträge.

    >> WebExtensions können nichts im Installationsverzeichnis anlegen und genau dort muss die generierte Policy-Datei hin.
    Das kam falsch an. Ich weiss, dass dies nicht geht, wollte aber auch eher wissen, ob Firefox von sich aus bereits grundsätzlich eine solche policies.json anlegt.

    Nein, Firefox legt die Datei standardmäßig nicht an. Ich muss das noch testen, aber ich glaube, dass alleine die Existenz der Datei bereits reicht, dass in about:support, eventuell sogar in about:preferences ein Hinweis angezeigt wird, dass eine solche Datei aktiv ist.

    Nehmen wir an, ich erstelle mir mit der Extension eine policies.json und bearbeite die nachträglich händisch. Werden diese zusätzlichen Einträge bei einem erneuten Einlesen in die Extension berücksichtigt oder sind die nach erneutem Speichern gelöscht?

    Die Erweiterung kann die Datei nur generieren, weder schreiben noch automatisch einlesen. Damit weiß die Erweiterung auch nichts von händischen Änderungen. Darum werde ich aber auch eine Option anbieten, um Konfigurationen zu speichern und zu laden. Denn dann besteht zumindest die Möglichkeit, Sachen zu ändern, ohne alles komplett neu konfigurieren zu müssen. Ob es das noch ins MVP schafft oder erst später kommt, weiß ich aber noch nicht. Das ist eine reine Zeitfrage. Ein Import einer generierten Datei wäre um einiges komplizierter, weil ich dann quasi alles rückwärts nochmal machen muss. Das kommt auf keinen Fall ins MVP, wäre für die Zukunft aber definitiv interessant (Pull Requests gerne gesehen ;) ).

  • Ich bin mal davon ausgegangen, das es Default-Werte gibt. :wink:
    Ich meinte es so, dass wenn durch die Extension z.B. BlockAboutAddons auf true gesetzt wird, dass eben folglich der Default-Werte false sein dürfte.
    Aber man kann natürlich auch von gar nichts ausgehen. :)
    Meine theoretisch grundlegende Überlegung war halt, dass man eine bereits generierte policies.json wieder einlesen, die darin enthaltenen Werte mit Default-Werten vergleichen und die Checkboxen entsprechend an- und ausknipsen kann. Aber wie du schreibst, scheint das komplizierter zu sein. Aber gut, eine Möglichkeit, die Konfig zu speichern und zu laden ist auch nicht zu verachten. Dann muss man eben nur darauf achten, evtl. händisch gemachte Änderungen/Zusätze ebenfalls wieder einzutragen.

    Windows 10 | FF 62.0 (64-Bit) / FF 61.0 (64-Bit) / FF 63.0 (64-Bit)

  • Jetzt habe ich von Mike Kaply (Ersteller vom CCK2 Wizard und mittlerweile bei Mozilla für die Enterprise-Features angestellt) noch eine gute Dokumentation erhalten, die derzeit in Arbeit ist und morgen Abend fertig werden soll. Das macht es mir definitiv leichter und das Ziel realistischer, rechtzeitig zur Veröffentlichung von Firefox 60 fertig zu werden. ;)

  • //


    ... Mike Kaply (Ersteller vom CCK2 Wizard und mittlerweile bei Mozilla für die Enterprise-Features angestellt)..

    .. sicher eine gute Entscheidung...

  • Ein kurzes Status-Update, weil es zuletzt ruhig darum wurde (primär wegen Urlaub):

    - Komplexere Objekttypen werden nun unterstützt, d.h. theoretisch sind nun alle Policies umsetzbar. Ich bin gerade dabei, alle 45 bisher existierenden Policies einzufügen, um die letzten fehlenden funktionalen Teile herauszufinden und zu implementieren.
    - Felder, welche beliebig viele Eingaben ermöglichen, z.B. können ja mehrere Startseiten in Firefox eingestellt werden, können jetzt auch in der Erweiterung um beliebig viele Felder erweitert werden
    - Es gab diverse weitere Verbesserungen unter der Haube, beispielsweise werden keine leeren Policies mehr zur Ausgabe hinzugefügt, wenn z.B. die Checkbox zum Überschreiben der Startseite ausgewählt wird, aber dann keine Startseite angegeben wird. Auch werden die Unter-Optionen von komplexeren Einstellungen nun standardmäßig deaktiviert dargestellt und erst aktiviert, wenn die Checkbox geklickt wird.
    - Ach, und die Erweiterung hat nun ein Logo. ;)

    [attachment=0]logo-large.png[/attachment]

    Also lange Rede, kurzer Sinn: es geht vorwärts. Es ist immer noch einiges zu tun, aber eine erste Preview-Version (rein funktional, ohne Design) kann sicher bald bereitgestellt werden.

  • Na, wenn sogar inzwischen komplexere Objekttypen Unterstützung finden, bist du doch ganz gut vorangekommen, scheint mir. :)
    Und das Logo finde ich auch cool. :klasse:

    Windows 10 | FF 62.0 (64-Bit) / FF 61.0 (64-Bit) / FF 63.0 (64-Bit)

  • Ich werde das Kompliment für das Logo an meinen Logo-Designer in Albanien, der auch schon für die Logos von New Tab Override und Bookmarks Organizer verantwortlich war, weitergeben. ;)

    43 von 45 Policies sind jetzt implementiert, für die anderen beiden muss ich noch ein bisschen was am Konfigurator anpassen. Danach noch ein bisschen Refactoring betreiben, weil sich ein wenig Code-Duplizierung angesammelt hat, und dann steht einem ersten Test nichts mehr im Wege. Außerdem muss ich die Kategorien der Policies noch finalisieren, alles korrekt zuordnen, die Reihenfolge anpassen und die Beschreibungen überarbeiten.

    Ich habe die Öffnung als Open Source begonnen, das Repository befindet sich hier:
    https://github.com/cadeyrn/enterprise-policy-generator

    Es befindet sich bereits Code darin, aber man wird schnell feststellen, dass der Großteil des Codes noch fehlt. Das wird dann im Laufe der kommenden Tage dazu kommen. Aber wer das Repository abonnieren möchte, kann das jetzt schon tun.

  • Status-Update: Krankheitsbedingt fehlen mir drei fest eingeplante Arbeitstage (letztes Wochenende plus der Feiertag am Dienstag), d.h. ich stehe nun unter Zeitdruck, immerhin erscheint bereits in drei Tagen Firefox 60. Ich bin wieder gesund, muss die erste Version deswegen aber abspecken. Die Funktion zum Speichern und Laden von Konfigurationen wird daher leider nicht in der ersten Version dabei sein. Auch werde ich beim Design improvisieren und das ursprünglich geplante Design später ausliefern, stattdessen wird die erste Version ein simpleres Design erhalten.

    Der Generator-Code ist nun auf GitHub:
    https://github.com/cadeyrn/enterp…1bfc2ba078ebffc

    So sehen die Policies aus:
    https://github.com/cadeyrn/enterp…42f0d873cbc8a15

    Ich mach jetzt noch etwas Feinschliff, bevor ich dann hier bald eine Vorab-Version zum Testen bereitstelle. Für die brauche ich bitte Feedback, wenn es soweit ist. Ich sag dann aber auch, was für eine Art Feedback ich suche.

  • Die erste Pre-Release-Version steht nun zum Download bereit:
    https://github.com/cadeyrn/enterp…rator-0.1.0.xpi

    (unsignierte Erweiterung, also Firefox Nightly nutzen oder über about:debugging laden!)

    Nun bitte ich um euer Feedback! Es kann wirklich helfen, alleine durch seine Meinung!

    Hierfür BRAUCHE ich Feedback von euch:

    • Funktioniert nach eurem Empfinden alles? Fallen euch irgendwelche Fehler auf?
    • Wie sieht es mit den Formulierungen der Policies aus und auch mit den Kategorien? Bitte sagt mir, ob ihr irgendetwas anders bezeichnen oder auch einordnen würdet. Ihr könnt auch Kategorien nennen, die bislang noch gar nicht existieren und mir sagen, welche Policies ihr dort einordnen würdet. Selbst wenn ihr nur die Reihenfolge von zwei Policies oder Kategorien ändern würdet, interessiert mich das, denn die derzeitige Struktur ist nicht in Stein gemeißelt und ganz bestimmt noch nicht die allerbeste.
    • Ich weiß, wohin die Datei policies.json unter Windows und unter macOS muss. Kann mir bitte jemand sagen, wie es mit Linux aussieht? Ein Linux-Nutzer kann das anhand der Windows-Beschreibung sicher schnell testen und dann sagen, wie es für Linux aussieht.

    Hierfür brauche ich KEIN Feedback von euch:

    • Design - denn das Design bleibt so nicht
    • Vorschläge für Policies - denn die müssen Mozilla gemeldet werden. ;) Ich biete an, was in Firefox implementiert ist. Derzeit gibt es 45 Policies, die Erweiterung unterstützt bislang 44 davon (eine fehlt also noch)

    Jetzt zur Verwendung:

    Im Prinzip selbsterklärend: ihr seht diverse Optionen, ihr wählt aus, was ihr anpassen wollt, am Ende drückt ihr den Button zur Generierung. Die Ausgabe muss dann in eine Datei mit dem Namen "policies.json" kopiert werden, das kann die Erweiterung leider nicht selbst machen.

    Windows: <Installationsverzeichnis>/distribution/policies.json
    macOS: http://Firefox.app/Content/Resources/distribution/policies.json

  • Zitat

    Ein Linux-Nutzer kann das anhand der Windows-Beschreibung sicher schnell testen und dann sagen, wie es für Linux aussieht.

    Theoretisch schon:
    Bei einer Standard-Installation von Firefox unter Linux (zumindest in den gängigsten Distributionen) müsste die Datei unter folgenden Pfad:
    /lib/firefox/distribution/policies.js
    wobei /lib bei den meisten Distros heutzutage nur noch ein Symlink ist, der auf /usr/lib verweist.

    Praktisch ist das vielleicht(?) doch komplizierter:
    Da ich keine Standard-Installation von Nightly oder Beta habe, habe ich mal versucht das Prinzip (<Installationsverzeichnis>/distribution/policies.js) auf meine Installation, die ich händisch unter /opt/firefox_beta/firefox bzw. /opt/firefox_nightly/firefox angelegt habe, zu übertragen.
    Aber leider haben die angelegten Dateien (/opt/firefox_beta/firefox/distribution/policies.js bzw.
    /opt/firefox_nightly/firefox/distribution/policies.js) keinerlei Wirkung. :-??

  • Danke für's Testen!

    Wegen der "URL"-Option, da ist dir tatsächlich ein Fehler aufgefallen. Mir ist da eine falsche Übersetzung reingerutscht. Eigentlich sollte da folgender Text stehen:

    Zitat

    Keine Standard-Lesezeichen, einschließlich der intelligenten Lesezeichen (Meistbesuchte Seiten, Kürzlich verwendete Schlagwörter), erstellen. Hinweis: diese Richtlinie ist nur wirksam, wenn sie vor der ersten Benutzung des Firefox-Profils angewendet wird

  • Ich habe mir gestern abend auch noch beide Versionen angeschaut und finde es okay so bisher. Bis auf die Sache mit der "URL"-Bezeichnung war mir auch nichts negativ aufgefallen.
    Was ich persönlich immer noch nicht verstehe: wieso ist es möglich, eine Extension-Konfiguration zu ex- und importieren (i. d. R. als JSON), aber nicht das generierte policies-JSON?... :-??

    Windows 10 | FF 62.0 (64-Bit) / FF 61.0 (64-Bit) / FF 63.0 (64-Bit)