Je cherche depuis deux jours comment avoir un mécanisme de "clef obligatoire" (mandatory key) par utilisateur avec Mozilla Firefox.

Mon but est de pré-configurer des postes clients Firefox suivant l'utilisateur qui s'y connecte.

Le plus simple est de modifier le fichier "prefs.js" dans le profile utilisateur se trouvant dans le répertoire personnel de l'utilisateur. Le problème c'est que l'utilisateur aura la possibilité de modifier les paramètres. A chaque connexion il verra son paramétrage disparaître sans forcement comprendre.

Il existe un second fichier "user.js" qui prévaut sur le fichier "prefs.js". Cela signifie que l'utilisateur peut modifier les paramétrages, mais ceux-ci ne s'appliquent ni maintenant, ni après redémarrage. C'est assez perturbant.

La troisième solution est d'utiliser le mécanisme de verrou. Mais le fichier de verrou est global pour tous les utilisateurs. Impossible alors de personnaliser quoi que ce soit.

Après recherche, je suis parvenu a réalisé ce que je souhaite.

Voici la méthodologie :

Commençons par ajouter le support des "clefs obligatoires" :

Dans le fichier, /usr/lib/xulrunner-x.x.x.x/greprefs/all.js (sous Mandriva en tout cas, il est possible que ce répertoire soit directement dans le répertoire de firefox), ajouter :

pref("general.config.filename", "mozilla.cfg");
pref("general.config.obscure_value", 0); 

Cela permet d'ajouter le support du fichier "mozilla.cfg". C'est ce fichier qui est censé contenir les "clefs obligatoires" global pour tous les utilisateurs. L'option "obscure_value" est à "0" pour éviter l'avoir à le convertir en ROT13 (sécurité par obscurantisme inutile).

Pour avoir un support multi-utilisateur, j'ajoute dans le fichier /usr/lib/firefox-x.x.x/mozilla.cfg :

//
var env_user = getenv("USER');
lockPref("autoadmin.global_config_url", "file///etc/firefox/"+env_user+".js");

(attention, le "//" au début du fichier semble obligatoire).

EDIT : sous Windows, il faut visiblement : var env_user = getenv("USERNAME"); (non testé). Pour un support multi-platforme il est alors possible de faire :

if(getenv("USER") != "") {
  // *NIX settings
  var env_user = getenv("USER");
} else {
  // Windows settings
  var env_user = getenv("USERNAME");
}

Il est alors possible d'avoir un fichier de configuration par utilisateur. Dans le fichier /etc/firefox/nom_de_l'utilisateur.js, mettre des clefs commençant par lockPerf (penser à la première ligne "//").

Pour les clefs, vous pouvez utiliser les informations de cette page : http://www.pcc-services.com/kixtart/firefox-lockdown.html.

Reste un soucis de taille ... à la prochaine mise à jour de Firefox ... il faudra reconfigurer le fichier all.js ...

Si quelqu'un à une solution pour cette limitation, je suis intéressé.