Restringir al usuario que cambie la configuración de xscreensaver

Restringir al usuario que cambie la configuración de xscreensaver

Me gustaría conocer alguna solución que se le haya ocurrido a la gente para impedir que un usuario cambie la configuración de xscreensaver en todo el sistema. Parte de mi trabajo es administrar sistemas que requieren que el escritorio se bloquee en aproximadamente 10 minutos y solo se pueda desbloquear con una contraseña. Quiero usar un protector de pantalla y considerando que xscreensaver es muy seguro con una base de código madura, es una opción lógica.

Creé la configuración adecuada en /etc/X11/app-defaults/XScreenSaver*, sin embargo, el problema es que un usuario aún puede cambiar sus preferencias personales ejecutando xscreensaver-demo o editando ~/.xscreensaver.

Entiendo que hay una forma un poco pirateada de hacer esto, eliminando los permisos ejecutables de /usr/bin/xscreensaver-demo y cambiando la propiedad de ~/.xscreensaver a root.

Si esa es la única forma práctica de hacer esto, ¿cómo haría para crear ~/.xscreensaver con propiedad raíz al iniciar sesión inicial del usuario (en redhat y debian/ubuntu)?

Respuesta1

Si los directorios de inicio de sus usuarios están en un disco local, o están alojados en un servidor NFS de Linux en el que tiene privilegios sudo/root, entonces puede configurar cada archivo ~/.xscreensaver como "inmutable".

sudo chattr +i /home/username/.xscreensaver

Esto evitará que los usuarios lo modifiquen, lo eliminen, lo muevan o le cambien el nombre.

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

Respuesta2

Parece que esto no es realmente posible. Terminé modificando ligeramente la fuente de xscreensaver para forzar ciertas configuraciones. Intenté utilizar la forma menos invasiva de lograr esto con una mínima modificación de la fuente. Esto aún permitirá al usuario configurar muchas partes del protector de pantalla, pero no las relacionadas con el bloqueo de pantalla y el tiempo de espera.

En el árbol de fuentes busque el archivo.controlador/prefs.cy ahí busca la funciónescribir_archivo_init. En esa función encuentra estas líneas:

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");

Y cambie a algo como el siguiente ejemplo fuente. Lo que esto hará es evitar que estas configuraciones se guarden en el archivo .xscreensaver en el directorio de inicio del usuario. Y luego, siempre que el valor predeterminado de todo el sistema esté configurado en lo que usted prefiera, xscreensaver seguirá usando estas configuraciones en lugar de lo que se configuraría en el archivo .xscreensaver.

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");

Encuentra la función llamadacargar_archivo_inity cambia la línea:

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

a:

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

Ahora encuentre la función con el nombre apropiadodetener_la_locuraque restablece algunos valores de preferencias a valores sanos, como un tiempo de espera> 15 segundos se forzará a 15 segundos. Este es un buen lugar para asegurarse de que cuando un usuario edite manualmente el archivo .xscreensaver en lugar de usar xscreensaver-demo, xscreensaver no usará los valores, sino que se usarán nuestros valores "sanos".

En funcióndetener_la_locuraagregue algo como esto, usando sus propios valores si lo desea. Tenga en cuenta que los valores de tiempo son segundos*1000. En el caso de que el usuario establezca el modo en "desactivado", ya lo forzamos a volver a dejarlo en blanco arriba.

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

Con respecto a la creación de .xscreensaver con propiedad raíz al iniciar sesión por primera vez, creo que eso no es realmente posible ni aconsejable. Puede crear un script en /etc/profile.d que creará un .xscreensaver vacío al iniciar sesión el usuario. Pero el cambio mencionado anteriormente lo hace innecesario.

información relacionada