Beschränken Sie die Änderung der XScreensaver-Einstellungen durch den Benutzer

Beschränken Sie die Änderung der XScreensaver-Einstellungen durch den Benutzer

Ich würde gerne wissen, welche Lösungen es gibt, die einen Benutzer daran hindern, die systemweite Konfiguration von xscreensaver zu ändern. Zu meinen Aufgaben gehört die Verwaltung von Systemen, bei denen der Desktop nach etwa 10 Minuten gesperrt und nur mit einem Kennwort entsperrt werden kann. Ich möchte einen Bildschirmschoner verwenden und da xscreensaver sehr sicher ist und eine ausgereifte Codebasis hat, ist dies eine logische Wahl.

Ich habe entsprechende Einstellungen in /etc/X11/app-defaults/XScreenSaver* erstellt. Das Problem besteht jedoch darin, dass ein Benutzer seine persönlichen Einstellungen immer noch ändern kann, indem er xscreensaver-demo ausführt oder ~/.xscreensaver bearbeitet.

Ich verstehe, dass es hierfür einen etwas hackerischen Weg gibt, bei dem man die Ausführungsberechtigungen aus /usr/bin/xscreensaver-demo entfernt und den Besitz von ~/.xscreensaver auf root ändert.

Wenn dies die einzige praktische Möglichkeit ist, dies zu tun, wie gehe ich vor, um ~/.xscreensaver mit Root-Eigentum beim ersten Anmelden des Benutzers (in Redhat und Debian/Ubuntu) zu erstellen?

Antwort1

Wenn sich die Home-Verzeichnisse Ihrer Benutzer auf einer lokalen Festplatte befinden oder auf einem Linux-NFS-Server gehostet werden, für den Sie über Sudo-/Root-Berechtigungen verfügen, können Sie jede ~/.xscreensaver-Datei als „unveränderlich“ festlegen.

sudo chattr +i /home/username/.xscreensaver

Dadurch wird verhindert, dass Benutzer es ändern, löschen, verschieben oder umbenennen.

Referenz:http://sattia.blogspot.com/2015/01/how-to-make-file-immutable-on-linux.html

Antwort2

Es sieht so aus, als ob das nicht wirklich möglich ist. Ich habe die Quelle von xscreensaver leicht modifiziert, um bestimmte Einstellungen zu erzwingen. Ich habe versucht, dies auf die am wenigsten invasive Art und Weise mit minimalen Änderungen der Quelle zu erreichen. Dadurch kann der Benutzer weiterhin viele Teile des Bildschirmschoners konfigurieren, nur nicht die, die die Bildschirmsperre und das Timeout betreffen.

Suchen Sie im Quellbaum die DateiTreiber/prefs.cund suchen Sie dort nach der FunktionSchreibe_Init-DateiSuchen Sie in dieser Funktion nach den folgenden Zeilen:

if (!pr || !*pr)          ;
CHECK("timeout")          type = pref_time, t = p->timeout;
CHECK("cycle")            type = pref_time, t = p->cycle;
CHECK("lock")             type = pref_bool, b = p->lock_p;
CHECK("lockTimeout")      type = pref_time, t = p->lock_timeout;
(..)
CHECK("mode")             type = pref_str,
                          s = (p->mode == ONE_HACK ? "one" :
                               p->mode == BLANK_ONLY ? "blank" :
                               p->mode == DONT_BLANK ? "off" :
                               p->mode == RANDOM_HACKS_SAME
                               ? "random-same"
                               : "random");

Und ändern Sie es in etwas wie das unten stehende Quellbeispiel. Dadurch wird verhindert, dass diese Einstellungen in der .xscreensaver-Datei im Stammverzeichnis des Benutzers gespeichert werden. Und solange die systemweite Standardeinstellung auf die von Ihnen gewünschte Einstellung eingestellt ist, verwendet xscreensaver weiterhin diese Einstellungen anstelle der in der .xscreensaver-Datei konfigurierten Einstellungen.

if (!pr || !*pr)          ;
CHECK("timeout")          continue; /* don't save */
CHECK("cycle")            continue; /* don't save */
CHECK("lock")             continue; /* don't save */
CHECK("lockTimeout")      continue; /* don't save */
(..)
CHECK("mode")             type = pref_str,
                          s = (p->mode == ONE_HACK ? "one" :
                               p->mode == BLANK_ONLY ? "blank" :
                               p->mode == DONT_BLANK ? "blank" : /* prevents xscreensaver from being disabled, will force to blank */
                               p->mode == RANDOM_HACKS_SAME
                               ? "random-same"
                               : "random");

Suchen Sie nach der Funktion namensInitialisierungsdatei ladenund ändern Sie die Zeile:

else if (s && !strcasecmp (s, "off"))         p->mode = DONT_BLANK;

Zu:

else if (s && !strcasecmp (s, "off"))         p->mode = BLANK_ONLY;

Finden Sie nun die passend benannte Funktionstop_den_WahnsinnDadurch werden einige Werte der Einstellungen auf vernünftige Werte zurückgesetzt. Ein Timeout von > 15 Sekunden wird beispielsweise auf 15 Sekunden gesetzt. Dies ist eine gute Stelle, um sicherzustellen, dass, wenn ein Benutzer die .xscreensaver-Datei manuell bearbeitet, anstatt xscreensaver-demo zu verwenden, die Werte nicht von xscreensaver verwendet werden, sondern stattdessen unsere „vernünftigen“ Werte.

In Funktionstop_den_WahnsinnFügen Sie so etwas hinzu und verwenden Sie dabei Ihre eigenen Werte, wenn Sie möchten. Beachten Sie, dass die Werte für die Zeit Sekunden*1000 sind. Falls der Benutzer den Modus auf „Aus“ setzt, setzen wir ihn oben bereits wieder auf leer zurück.

if (p->timeout > 600000) p->timeout = 600000;
if (p->lock_timeout > 0) p->lock_timeout = 0;
if (! p->lock_p) p->lock_p = True;

Was das Erstellen von .xscreensaver mit Root-Besitz beim ersten Anmelden betrifft, halte ich das weder für wirklich möglich noch für ratsam. Sie können ein Skript in /etc/profile.d erstellen, das beim Anmelden des Benutzers einen leeren .xscreensaver erstellt. Die oben erwähnte Änderung macht das jedoch unnötig.

verwandte Informationen