quarta-feira, 9 de fevereiro de 2011

LINUX - Migrar Contas de Usuários

Vamos considerar um cenário em que você precisa mover, migrar ou criar backups de contas de usuário de um sistema Linux para outro.

Os procedimentos aqui relatados foram utilizados para migrar as contas de usuários de um sistema Fedora Core 7 para um Debian Lenny, mas provavelmente funcionará em outras distribuições.

O sistema de destino é uma instalação nova, onde nenhuma conta de usuário foi criada ainda.


1. Fazer um backup dos arquivos que gerenciam as contas de usuários:

  • /etc/passwd - contém as informações de todas as contas de usuário no sistema;

  • /etc/shadow - contém as senhas criptografadas para cada usuário;

  • /etc/group - define os grupos aos quais os usuários pertencem;

  • /etc/gshadow - contém as senhas criptografadas para cada grupo;

  • /var/spool/mail - contas de e-mail dos usuários;

  • /home - contém os subdiretórios associados a cada conta de usuário.



1.1 Crie um diretório para armazenar os dados que serão migrados, por exemplo:
oldSystem: ~ # mkdir /root/export/

1.2 Defina um filtro para limitar o UID. Deve-se observar aqui que o limite varia dependendo da distribuição1. Neste caso, 500 para o Fedora e 1000 para o Debian:
oldSystem: ~ # export UGIDLIMIT=500

1.3 Copiar o arquivo /etc/passwd para /root/export/passwd.export usando o comando awk para filtrar as contas de serviço do sistema:
oldSystem: ~ # awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) & & ($3!=65534)' /etc/passwd > /root/export/passwd.export

1.4 Copie o arquivo /etc/group:
oldSystem: ~ # awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) & & ($3!=65534)’ /etc/group > /root/export/group.export

1.5 Copie o arquivo / etc / shadow:
oldSystem: ~ # awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) & & ($3!=65534) {print $1}' /etc/passwd | tee - |egrep -f - /etc/shadow > /root/export/shadow.export

1.6 Copie o arquivo /etc/gshadow:
oldSystem: ~ # cp /etc/gshadow /root/export/gshadow.export

1.7 Faça o backup de home e mail dos usuários:
oldSystem: ~ # tar -zcvpf /root/export/home.tar.gz /home
oldSystem: ~ # tar -zcvpf /root/export/mail.tar.gz /var/spool/mail

1.8 Transfira os arquivos para o novo sistema através de um flash drive ou outro meio qualquer. Suponhamos que os arquivos gerados nos passos anteriores foram armazenados no diretório /root/import no novo sistema.

2. Importando as contas para o novo sistema.

2.1 Primeiro, faça uma cópia dos arquivos originais por medida de segurança:
newSystem:. ~ # mkdir /root/backup
newSystem:. ~ # cp /etc /passwd /etc/shadow /etc/group /etc/gshadow /root/backup/

2.2 Agora, importe os arquivos:
newSystem: ~ # cd /root/import/
newSystem: ~ # cat passwd.export >> /etc/passwd
newSystem: ~ # cat group.export >> /etc/group
newSystem: ~ # cat shadow.export >> /etc/shadow
newSystem:.~ # cp gshadow.export /etc/gshadow


Nota: é necessário usar >> (append) e não > (create) no redirecionamento do shell.
2.3 Restaurar o backup de home.tar.gz:
newSystem: ~ # cd /
newSystem: ~ # tar -zxvf /root/import/home.tar.gz

2.4 Restaurar o backup de mail.tar.gz:
newSystem:~ # tar -zxvf /root/import/mail.tar.gz

2.5 Reiniciar o sistema:
newSystem: ~ # shutdown -r now

O novo sistema deverá subir com todas as contas de usuários e grupos como no antigo sistema.



(1) Cada usuário tem um valor UID e GID únicos, que são atribuídos a partir de uma determinada faixa. Estes são os valores mínimo e máximo para algumas distribuições:
RHEL / CentOS / Fedora Core: 500 / 65534
Debian / Knoppix / Ubuntu: 1000 / 29999