Restringir as configurações do xscreensaver para o usuário

1

Eu gostaria de saber todas as soluções que as pessoas criaram para impedir que um usuário altere uma configuração do xscreensaver em todo o sistema. Parte do meu trabalho é gerenciar sistemas que exigem que a área de trabalho seja bloqueada em cerca de 10 minutos e só possa ser desbloqueada com uma senha. Eu quero usar um screensaver e considerando xscreensaver é muito seguro com uma base de código maduro, é uma escolha lógica.

Eu criei configurações apropriadas em / etc / X11 / app-defaults / XScreenSaver *, no entanto, o problema é que um usuário ainda pode alterar suas preferências pessoais executando xscreensaver-demo ou editando ~ / .xscreensaver.

Eu entendo que há uma maneira um pouco hackeada de fazer isso, removendo as permissões executáveis de / usr / bin / xscreensaver-demo e alterando a propriedade de ~ / .xscreensaver para root.

Se essa é a única maneira prática de fazer isso, como eu poderia criar o ~ / .xscreensaver com a propriedade root no login inicial do usuário (no redhat e no debian / ubuntu)?

    
por aseq 04.03.2015 / 03:05

2 respostas

0

Parece que isso não é realmente possível. Eu acabei modificando ligeiramente a fonte do xscreensaver para forçar certas configurações. Eu tentei usar a maneira menos invasiva de realizar isso com uma modificação mínima da fonte. Isso ainda permitirá que o usuário configure muitas partes do protetor de tela, mas não aquelas relacionadas ao bloqueio de tela e ao tempo limite.

Na árvore de código-fonte, encontre o arquivo driver / prefs.c e procure a função write_init_file . Nessa função, encontre estas linhas:

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

E mude para algo como a amostra de origem abaixo. O que isso fará é impedir que essas configurações sejam salvas no arquivo .xscreensaver no diretório inicial do usuário. E então, desde que o padrão do sistema seja definido como o que você preferir, o xscreensaver continuará usando essas configurações em vez do que seria configurado no arquivo .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");

Encontre a função chamada load_init_file e altere a linha:

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

para:

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

Agora, encontre a função adequadamente nomeada stop_the_insanity que define alguns valores das preferências de volta para valores sãos, como um tempo limite > 15 segundos serão forçados a 15 segundos. Este é um bom local para garantir que quando um usuário editar o arquivo .xscreensaver em vez de usar o xscreensaver-demo, os valores não serão usados pelo xscreensaver, mas nossos valores "sônicos" serão usados.

Na função stop_the_insanity adicione algo assim, usando seus próprios valores, se desejar. Observe que os valores para o tempo são segundos * 1000. No caso de o usuário definir o modo como "desativado", já o forçamos a ficar em branco acima.

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

No que diz respeito à criação de .xscreensaver com a propriedade de raiz no login inicial, acho que não é realmente possível ou aconselhável. Você pode criar um script em /etc/profile.d que criará um .xscreensaver vazio no login do usuário. Mas a mudança acima mencionada torna isso desnecessário.

    
por 10.03.2015 / 01:36
1

Se os diretórios pessoais de seus usuários estiverem em um disco local ou estiverem hospedados em um servidor Linux NFS no qual você tem privilégios sudo / root, você poderá definir cada arquivo ~ / .xscreensaver como "imutável".

sudo chattr +i /home/username/.xscreensaver

Isso impedirá que os usuários modifiquem e excluam / movam / renomeiem.

Referência: link

    
por 10.03.2015 / 04:15