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