Migrando usuários e grupos para sistemas Debian

Hoje em dia nem tanto porque a maioria dos sistemas que administro já estão todos convertidos para Debian GNU/Linux (e os que não estão não foram convertidos por não poderem ser convertidos devido a razões políticas), mas na época em que entrei na empresa onde trabalho atualmente passei um bom tempo migrando servidores Red Hat e similares (antigo Red Hat, Fedora, etc) para Debian.

Na época, sempre tive trabalho devido ao Debian e os sistemas baseados em Red Hat utilizarem políticas diferentes para usuários e grupos : em sistemas Red Hat e similares, usuários normais (ou seja, excetuando-se os usuários de sistema e os utilizados por daemons/serviços) iniciam no UID 500 e grupos normais (também com exceção dos grupos de sistema e criados para serem utilizados por daemons/serviços) iniciam no GID 500.

Em sistemas Debian, no entanto, usuários e grupos criados pelo administrador, ou seja, usuários e grupos que não são fornecidos na instalação padrão e que não são criados devido a instalação de algum pacote adicional (como um daemon, por exemplo), devem utilizar UID e GID iniciados a partir de 1000.

Como a conversão de servidores na época era grande, perdi alguns minutos e desenvolvi o script shell que publico abaixo para me auxiliar na tarefa de, com base nos arquivo /etc/passwd (para usuários) e /etc/group (para grupos) do sistema a ser convertido, criar as entradas já adaptadas para serem somente inseridas ao final dos arquivo /etc/passwd e /etc/group do novo sistema Debian.

O script foi criado há muitos anos atrás e agora só coloquei alguns comentários a mais para deixá-lo mais compreensível, mas ainda acho que pode ser de alguma utilidade para quem possa estar passando por uma situação semelhante a que eu passei há alguns anos atrás. Além de possivelmente ser útil para alguém, estou publicando também para ter fácil acesso ao mesmo caso algum dia precise e para que o Google me ajude indexando-o e tornando “encontrável” por qualquer um que necessite de algo parecido.

#!/bin/bash

# Script : gid-uid-rh-to-debian.sh
# Author : André Luís Lopes
# Version : 0.1
# License : GPL (General Public License) version 2 (GPLv2)
# Description : A simple script which takes users and groups
# from a Red-Hat-like (RHEL,Fedora,etc) system and
# adapts them to be used on Debian systems, taking
# care to adapt the UID and the GID numbers to the
# Debian policies (non-sytem/user-created users
# starting from UID 1000 and groups starting from
# GID 1000) or to the user-desired ones.

# Minimun UID used for users in the previous GNU/Linux distribution
# (Red-Hat-like distros uses UID 500, for reference).
minuid=”500″
# Minimun GID for groups in the previous GNU/Linux distribution
# (Red-Hat-like distros uses GID 500, for reference).
mingid=”500″
# A pipe separated list of users not to be included in the output
# (i.e. user blacklisting feature).
uidblacklist=”nobody”
# A pipe separated list of groups not to be included in the output
# (.e. group blacklisting feature).
gidblacklist=”nogroup”
# UID increment strategy (i.e. how much to sum to the current UIDs).
uidplus=”1000″
# GID increment strategy (i.e. how much to sum to the current GIDs)
# It’s not a good idea to choose a GID different from the UID given
# above (Debian’s defaults are 1000 both for UID and GID).
gidplus=”1000″

# Bail out if there’s not enough parameters provided. Also, teach
# the user how we should be used instead.
if [ -z “$1” ] || [ -z “$2” ] ; then
echo “”
echo “Usage : $(basename $0) [passwd|group] [passwd file|group file]”
echo “Examples :”
echo “”
echo “$basename $0 passwd passwd-file”
echo “$basename $0 group group-file”
echo “”
echo “Output will be ready to be inserted to the end of your new”
echo “system’s /etc/passwd (when using the ‘passwd’ parameter) or”
echo “/etc/group (when using the ‘group’ parameter).”
echo “”
echo “IMPORTANT :”
echo “———–”
echo “You should provide as the second parameter to this script the”
echo “passwd or group from your current (i.e. Red-Hat-like) system,”
echo “NOT the passwd or group file from your new Debian system.”
echo “”
exit 0
fi

# Check what the user want to work with this time : passwd or group.
# Output only the non-system users so the user will be able to add
# the output of this script to the end of his/her new system’s passwd
# or group file.
case “$1” in

passwd)

awk -F: ‘($3 >= ‘$minuid’) && ($4 >= ‘$mingid’) {print $1 “:” \
$2 “:” $3+1000 “:” $4+100 “:” $5 “:” $6 “:” $7}’ $1 \
| grep -v -E “$uidblacklist”

;;

group)

awk -F: ‘($3 >= ‘$mingid’) {print $1 “:” $2 “:” $3+1000 “:” $4}’ \
$1 | grep -v -E “$gidblacklist”

;;

esac


Estou aberto a receber comentários e sugestões de possíveis melhorias caso alguém o utilize e queira compartilhar suas impressões. Críticas, caso sejam construtivas, também são bem-vindas. Os comentários deste post estão aí para isso. Somente lembre-se que o script foi criado há anos atrás de maneira rápida para atender a uma necessidade específica antes de destilar o veneno nos comentários. Sejam bonzinhos 🙂

Outro detalhe a ser notado é que, por mais que eu tenha tentado, o WordPress não deixou a formatação do script de maneira idêntica a maneira utilizada em sua cópia original em disco. Por isso, contenham suas críticas sobre identação, já que a mesma não vai existir nessa versão online piorada pelo WordPress 🙂

Anúncios

5 comentários sobre “Migrando usuários e grupos para sistemas Debian

  1. Pingback: André Luís via Rec6 ~
  2. Obrigado!

    Estou migrando um sistema Fedora para Debian. Fiz apenas uma pequena mudança no script. Troquei o valor 100 por 1000 em $4+100. Assim:


    awk -F: ‘($3 >= ‘$minuid’) && ($4 >= ‘$mingid’) {print $1 “:” \
    $2 “:” $3+1000 “:” $4+1000 “:” $5 “:” $6 “:” $7}’ $1 \
    | grep -v -E “$uidblacklist”

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s