große Mozilla-Installationen administrieren

rMarkus

Chuck The Plant
Hallo,

wir verwenden fuer ca. 500 Benutzer Mozilla als Browser.

Die Einstellungen pro Benutzer scheinen in der Textdatei prefs.js zu liegen.

In meinem Fall wächst die Liste der internen Web-Server, welche nicht über den Proxy kontaktiert werden sollen.

In der Datei prefs.js entspricht das dem Eintrag:
Code:
user_pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, intranetserver1, intranetserver2, intranetserver3, intranetserverN");

Gibt es eine elegante Möglichkeit die Einstellungen zentral zu administrieren statt mit einem Skript die Dateien bei jedem User zu manipulieren?
 
In meinem Fall wächst die Liste der internen Web-Server, welche nicht über den Proxy kontaktiert werden sollen.
Am einfachsten konfiguriert man die Browser einmalig so, dass die automatische Proxykonfiguration benutzt wird. Und auf einem intern erreichbaren Server legt man eine entsprechende "proxy.pac" ab, die man dann jeweils an die Situation anpasst.
 
@Wiedmann
Das mit der Proxy.pac ist eine sehr gute Lösung.

@xbit
Der Mozilla ist relativ alt und der wird auch so keine Chance haben, den Proxy selbst zu finden.
 
Du kannst das trotzdem nutzen. Alle Mozilla Versionen erlauben es, eine Proxy URL anzugeben. Die automatische Variante ist sozusagen nur ein nice-to-have, damit man manuell nichts einstellen muss. ;)
 
Hallo,

das gesamte Problem habe ich nun wie folgt gelöst, evtl. hilft es dem nächsten mit einem ähnlichen Problem - oder findet Mozilla keine Verwendung im professionellen Bereich?

Die automatische Konfigurationsdatei liegt auf einem Intranet-Server und sieht wie folgt aus:

Code:
//Skript fuer die automatische Proxy-Konfiguration fuer Netscape, Mozilla, Firefox, IE usw.
//2006-07-04 rol
function FindProxyForURL(url, host)
    {
        if (
              isPlainHostName(host)
              // || isResolvable(host))  //perfekt, aber die DNS sind hier zu langsam
              || (
                 dnsDomainIs(host, "[COLOR="Red"].einefirma.de[/COLOR]")
                 && !localHostOrDomainIs(host, "www.einefirma.de")
                 )//alle .einefirma.de ausser www.einefirma.de
              || shExpMatch(host, "[COLOR="Red"]10.*[/COLOR]")    //internes Netz hat 10.0.0.0/8
              // || shExpMatch(host, "192.168.*")  //DMZ zur Zeit nur ueber Proxy
              || localHostOrDomainIs(host, "localhost")
              || localHostOrDomainIs(host, "127.0.0.1")
            )
            return "DIRECT";
        else
            return "PROXY [COLOR="Red"]derproxy:2128[/COLOR]";
    }

Die Browser müssen nun auf die URL zu dieser PAC-Datei (Proxy Automatic Configuration) eingestellt werden.
Während man beim Internet-Explorer das einfach für alle via ADS sauber in Minuten erledigen kann, muss bei dem Mozilla schwereres Geschütz aufgefahren werden:

Code:
#!/bin/perl
#############
# 2006-07-06, rol
# Massenkonfiguration von Mozilla-Einstellungen
#
# 1.
#    Startverzeichnis in $myRoot eintragen
#
# 2.
#    Die gewuenschte Konfiguration wird in das Unterprogramm
#    konfigdatei_aendern() eingebaut.
#    Dort wird hauptsaechlich der Funktionsaufruf eintrag_aendern()
#    verwendet, um Einstellungen vorzunehmen
#
#
#############


use strict;
use File::Find;
use File::Copy;
use File::Temp qw(tempfile);    #saubere Temp-Dateien

print "START\n";

[COLOR="Red"][B]my $myRoot= '/startverzeichnis/fuer/mozillaprofile';[/B][/COLOR]

print "starte ab $myRoot \n";

find(\&myFileFilter, $myRoot); # ab Verzeichnis $myRoot suchen

print "ENDE\n";

sub datei_normieren
{
  my $datei=     $_[0];

  my $tempdatei;
  my $fhtemp;                       #erzeugt tempfile, wird hier aber nicht benoetigt
  ($fhtemp, $tempdatei)=  tempfile();  #unique Temp-Datei im /tmp
  close $fhtemp;

  my $kopfdatei;
  my $fhkopf;
  ($fhkopf, $kopfdatei)= tempfile();
  close $fhkopf;

  # print "Tempdatei: " . $tempdatei . "\n";
  # print "Kopfdatei: " . $kopfdatei . "\n";

  # Kopf herauskopieren in $kopfdatei
  system("grep -v user_pref < $datei > $kopfdatei");


  # in dem Original den Kopf abtrennen und sortieren
  system("cat $datei | grep user_pref | sort > $tempdatei");

  # Kopf und normierten Koerper wieder zusammenfuegen
  system("cat $kopfdatei $tempdatei > $datei");


  # Tempdatei entfernen
  unlink( $kopfdatei);
  unlink( $tempdatei);
}

sub eintrag_aendern
{
  my $datei=      $_[0];   # der Name der zu aendernden Datei
  my $schluessel= $_[1];   # z.B. nur der Schluessel
  my $wert=       $_[2];   # der Wert, den der Schluessel annehmen muss ACHTUNG: Strings muessen in Gaensefuesschen eingefasst sein

  my $tempdatei;
  my $fhtemp;
  ($fhtemp, $tempdatei)= tempfile();
  close $fhtemp;

  # alten Eintrag entfernen
  system("grep -v $schluessel < $datei > $tempdatei");

  # Eintrag anhaengen
  open(DATEI, ">>$tempdatei");   # Datei zum Schreiben oeffnen, Daten anhaengen
  print DATEI 'user_pref("' . $schluessel . '", ' . $wert . ');' . "\r\n";        # Zeile anhaengen
  close(DATEI);              # Datei schliessen

  # Zurueckkopieren
  copy($tempdatei, $datei);
  # Temp loeschen
  unlink($tempdatei);

  # Datei normieren, d.h. bis auf die Kopfzeilen sortieren
  datei_normieren($datei);
}

sub konfigdatei_aendern
{
  # Parameter sinnvolle Namen geben (Perl ist ekelhaft an der Stelle)
  my $datei= $_[0];

  print "bearbeite: $datei \n";

  # Sicherheitskopie anlegen
  my $datei_sich= $datei . ".sich";
  copy($datei, $datei_sich) or die "konnte Datei $datei_sich nicht anlegen";

  ######################## Aenderungen hier einfuegen #####################
  #########################################################################

[COLOR="Red"][B]
  eintrag_aendern($datei, 'network.proxy.autoconfig_url',
                          '"http://intranetserver/pfad/proxy.pac"');  # Gaensefuesschen hier nicht vergessen

  eintrag_aendern($datei, 'network.proxy.type', '2');[/B][/COLOR]



  #########################################################################
  #########################################################################

}

sub myFileFilter()
  {
  my $dateiname= $_;
  my $voll=      $File::Find::name;
  # print $voll . "-->" . $dateiname . "\n";

  if ( lc $dateiname eq "prefs.js" )
    {
    konfigdatei_aendern( $voll );
    }
  }

Das Perl-Skript setzt folgende Zeilen in der Konfigurationsdatei prefs.js des Mozillas an der richtigen Stelle:
Code:
user_pref("network.proxy.autoconfig_url", "http://intranetserver/pfad/proxy.pac"); 
user_pref("network.proxy.type", 2);

Das Startverzeichnis $myRoot ist in jedem Fall anzupassen. Durch Anpassen des Unterprogramms eintrag_aendern() lassen sich damit auch andere Konfigurationen des Mozillas (und evtl. auch Firefox usw.) automatisch und zentral ändern.

Dabei ist noch zu beachten, dass das Skript nur auf Verzeichnisbäume losgelassen werden sollte, bei denen Mozilla gerade nicht läuft.

PS: Zumindest bei älteren Mozilla-Versionen ist es notwendig, dass die Konfigurationsdatei eine bestimmte Sortierung hat, die das Skript sicherstellt.
 
Zurück
Oben