Restauração de configurações
ANÁLISE
De volta ao começo
Deixe que seus usuários se divirtam utilizando o sistema e restaure as
configurações originais no próximo login ao seu estado original.
por David Eisenberg
C
enário um: você é administrador de uma rede de computadores em uma biblioteca pública. Os usuários precisam
customizar os computadores durante
suas sessões, mas é preciso ter certeza que qualquer modificação feita
por eles, acidental ou intencional,
não será permanente. Essas mudanças têm que desaparecer quando o
computador for reiniciado, para que
o próximo usuário do sistema receba
um diretório home limpo, assim como
o ambiente de usuário padrão.
Cenário dois: você controla uma
rede de computadores aberta em
uma escola. Os estudantes podem
fazer login como usuário matemática ou inglês para uma seleção prédefinida de aplicativos relacionados
a cada matéria. Como no cenário
da biblioteca, os estudantes não
possuem nome de usuário e senha
individuais, e não é bom que as escolhas de desktop ou downloads dos
estudantes fiquem permanentemente
na máquina. Toda vez que um estudante de Matemática entrar como
usuário matemática, ele recebe uma
configuração padrão limpa.
Esse segundo cenário é o meu
ambiente de trabalho. Parte do meu
trabalho no Evergreen Valley College, na Califórnia é administrar uma
Linux Magazine #70 | Setembro de 2010
classe com 30 computadores dualboot (Windows XP e Linux). Para
ter certeza de que os usuários do
Windows tenham uma experiência
uniforme toda vez que se conectarem, os computadores possuem um
produto chamado Deep Freeze [1],
que garante que qualquer mudança
feita na configuração, acidental ou
não, desapareça quando o computador é reinicializado.
Quando comecei nesse trabalho,
o Deep Freeze não possuía uma
versão para o Linux. Agora há, mas
não é gratuita; então, resolvi fazer
um Deep Freeze de pobre para as
máquinas Linux da rede.
Como funciona
Primeiro, crie um arquivo compactado contendo a imagem do diretório home de cada usuário Linux que
precisa ser restaurado na hora da reinicialização (nesse exemplo, haverá
dois arquivos de imagens, uma com
o desktop do usuário matemática e
uma para o usuário inglês).
Faça, então, um arquivo de configuração com o nome do usuário,
uma senha criptografada e a localização do arquivo de imagem compactado. Na hora de inicializar, um
script init chama um programa Perl
para restaurar o usuário.
Criar a imagem
do estudante
Em uma máquina, chamada de “cópia master”, ajuste a configuração
(desktop, menus, aplicativos etc.) de
cada perfil de estudante do modo desejado. Aqui está a parte complicada:
não é possível comprimir o arquivo
home do estudante quando este estiver conectado. Em vez disso, é preciso estar sozinho no computador.
Pressione Ctrl+Alt+F1 para ir para
um terminal de texto. Para ir para o
modo single-user (usuário único),
faça o login como root e digite:
init 1
Quando no modo de usuário único, você é o usuário root, a rede não
está funcionando, e é garantido que
o usuário cujos arquivos estão sendo
compactados não está online.
Agora, crie imagens dos diretórios
de usuário que precisam ser restaurados na hora da inicialização. Se sua
rede possui contas separadas para os
usuários matemática e inglês, use o
tar para criar uma imagem compactada para cada um:
tar cvzf math_home.tar.gz /home
/math # A partir do gzip
53
ANÁLISE | Restauração de configurações
Listagem 1: /etc/reboot-restore.conf
01 #
02 # Configuration for users math and english
03 # math’s image is on each machine
04 # eng lish’s image is on a server; you’d replace my.example.com
05 # with the name of the server
06 mat h;qcnVJoZLZDRAE;/usr/local/reboot‑restore/math_home.tgz
07 eng lish;grrxaQN5BbNTM;http://my.example.com/images/english_home.
tar.bz2
tar cvjf english_home.tar.bz2
/home/english # A partir do
bzip2
Provavelmente, será preciso usar
o mesmo formato de arquivo para
todos os usuários que precisam ser
restaurados, mas quero mostrar um
exemplo das duas formas. O nome
do arquivo de imagem compactado
precisa terminar com .gz ou .bz2,
senão, o programa de restauração
não irá funcionar corretamente. Na
minha rede, o tamanho médio de
cada arquivo é de 2MB.
Local ou remoto
Ponha os arquivos de imagem no
servidor ou uma cópia deles em
cada máquina. A vantagem do servidor é que basta colocá-los lá uma
única vez; a vantagem de uma cópia por máquina é que não é preciso
depender de uma conexão de rede
que pode cair ou ter uma baixa taxa
de transferência.
Na maioria dos casos, provavelmente a imagem ficará no servidor.
Na minha rede, era mais vantajoso
ter uma cópia por máquina. Caso
instale as imagens em cada computador, elas provavelmente estarão
em algum servidor e serão baixadas
em cada máquina via FTP ou wget.
Também é possível copiar as imagens em um pendrive e copiá-las nas
máquinas individuais.
O arquivo de
configuração
Cada máquina exige um arquivo de
configuração. Nos meus sistemas,
chamei-o de /etc/rebootrestore.
conf, lugar e nome razoáveis para
um arquivo. Esse arquivo especifica
os usuários com diretórios home que
serão restaurados quando o sistema
reinicializar.
Cada linha do arquivo possui as
seguintes configurações (separadas
por ponto e vírgula): o nome do usuário, a senha criptografada e o
caminho para o arquivo de imagem
(listagem 1).
Parte da restauração do usuário
é a restauração da senha, que pode
ser alterada durante a sessão. O
usermod, que altera a senha, aceita
Quadro 1: Senhas mais seguras
Um salt de duas letras criptografa senhas usando DES, a forma de criptografia menos segura, que é aceita por todas as distribuições Linux no comando
usermod. O Mandriva e o Ubuntu aceitam criptografia no formato MD5. Para
produzir uma senha criptografada com MD5, use um salt que inicia por $1$,
seguido de exatamente oito caracteres. Abaixo, uma saída da criptografia do
usuário matemática usando MD5 e um salt de oito letras arbitrário:
$ perl e ‘print crypt (“counting”,”\$1\$jwyxngms”), “\n”’ $1$jwyxngm
s$2vt6pMlVbZO4l9TTmaYBC0
54
apenas senhas criptografadas com
a função crypt. Em vez de colocar
a senha no arquivo de configuração
em texto simples e deixar que o script
de restauração faça a criptografia,
decidi usar senhas criptografadas
no arquivo de configuração para
ter um nível mínimo de segurança.
Para criptografar uma senha, use o
comando Perl:
perl e 'print crypt ("password",
"salt"),"\n";'
O primeiro argumento para o
crypt é a senha em texto puro. O
segundo argumento é um “salt”,
que contém caracteres usados como
entradas aleatórias para o algoritmo
da criptografia. Apenas as duas primeiras letras de salt são usadas, e elas
serão as primeiras letras da senha
criptografada. As linhas seguintes
mostram como criptografei a senha
counting do usuário matemática e a
senha writing do usuário inglês com
o uso de salts aleatórios:
$ perl e 'print crypt
("counting","qc"), "\n"'
qcnVJoZLZDRAE
$ perl e 'print crypt ("writing",
"gr"), "\n"' grrxaQN5BbNTM
As linhas em branco da configuração são ignoradas; tudo que vier
depois de # também é ignorado.
A listagem 1 mostra o arquivo de
configuração que usei para teste. O
diretório /usr/local/reboot-restore contém os arquivos de imagens
compactados.
O programa
de restauração
O arquivo de configuração da listagem 1 é lido pelo programa rebootrestore.pl, que você pode encontrar
neste link [2], que é o script que faz
a verdadeira restauração.
http://www.linuxmagazine.com.br
Restauração de configurações | ANÁLISE
O programa recebe o nome do arquivo de configuração do seu primeiro argumento de linha de comando
(linha 5) e depois lê o conteúdo do
arquivo /etc/passwd (linhas 16-21).
Depois, lê o arquivo de configuração. Para cada linha que estiver
no formato correto (linha 54-56), o
programa confere a validade do usuário (linha 59). Então, o programa
baixa o arquivo de imagem, caso
este não seja local, e o armazena
em um arquivo temporário (linhas
62-72). Depois disso, o script chama
a subrotina restore_user, juntamente com a informação de /etc/passwd
como parâmetro.
Essa subrotina separa as informações do usuário (linhas 104-106), acha
o tipo do arquivo de imagem compactado (linhas 107-115) e chama os
comandos das linhas 118-123 para
remover o diretório home do
usuário;
descompactar o arquivo da imagem (recriando o diretório home);
alterar a propriedade do diretório
e seus arquivos e
restaurar a senha do usuário.
A mudança na propriedade é necessária no caso de as máquinas não
serem todas idênticas; se o computador A tem o usuário matemática
como número 501 e no B seu número é 502, as flags de propriedade da
imagem precisam ser alteradas para
se ajustar à máquina.
Se o arquivo de imagem foi baixado, a subrotina de restauração se
livra do arquivo temporário (linhas
83-86). Depois que todas as linhas
forem processadas, o script termina,
com uma mensagem 0 (sem erros),
se todas as linhas estiverem OK. Senão, devolve a mensagem 1.
O script deve ser colocado em
uma localização de nível de sistema
razoável em cada máquina que precise das capacidades de restauração.
Nesse exemplo, crie o diretório /usr/
local/reboot-restore e ponha o script
reboot-restore.pl nesse diretório em
cada uma das máquinas. Nesse ponto,
verifique se as permissões de arquivos
estão configuradas para executável.
Executar o script
Por fim, é preciso ter certeza de
que o script será executado sempre
que houver uma reinicialização. A
maneira mais fácil de fazer isso é
chamando-o a partir do arquivo /
etc/rc.d/rc.local. A execução desse
script é o último passo do processo.
Nesse exemplo, acrescentei estas
linhas ao arquivo:
/usr/local/rebootrestore/
rebootrestore.pl /etc/
rebootrestore.conf
Quando o sistema é iniciado, rc.
local chamará o script e restaurará
o ambiente de usuário original. n
Mais informações
[1]Deep Freeze: http://www.faronics.com/html/deepfreeze.asp
[2]Arquivo reboot-restore.pl:
http://www.linuxmagazine.com.br/issues/70/reboot-restore.pl
Gostou do artigo?
Queremos ouvir sua opinião. Fale conosco em
[email protected]
Este artigo no nosso site:
http://lnm.com.br/article/3849
Linux Magazine #70 | Setembro de 2010
55
Download

De volta ao começo