Adição automática de usuário via e-mail
Colaboração: Smailli Hemori Moraes
Data de Publicação: 02 de Dezembro de 2006
Em um cliente houve a necessidade de criar um script para que fossem adicionados usuários automáticamente no sistema.
Cenário
Existe um servidor de e-mail que serve como webmail para todos ou funcionários. Porém havia um problema, cada vez que um funcionário novo fosse contratado havia a necessidade de adicionar a conta do usuário manualmente no webmail.
A solução que optei foi gerar um script que juntamente com o procmail cadastre os usuários automaticamente no sistema.
- O pessoal do RH cadastra o novo funcionário.
- O sistema envia um e-mail para uma determinada conta com o primeiro nome do usuário e o número do registro na empresa.
O script
- Crie o seguinte shell script para a adição dos usuários.
- Copie o script para /usr/local/bin/auto_adduser.sh # cp auto_adduser.sh /usr/local/bin/auto_adduser.sh
- Torne-o executável
- # chmod +x /usr/local/bin/auto_adduser.sh
-
#!/bin/bash FINGER=`which finger` PASSWD=`which passwd` USERADD=`which useradd` USERDEL=`which userdel` AWK=`which awk` ECHO=`which echo` GREP=`which grep` LOGGER=`which logger` add () { while read FILE ; do USUARIO=`$ECHO $FILE | $AWK -F\; '$2 { print $1 }'` if $FINGER -m $USUARIO 2>&1 | $GREP "Login: $USUARIO" > /dev/null 2>&1 ;then $LOGGER -t AUTO_USERADD "Usuário $USUARIO já existe." else SENHA=`$ECHO $FILE | $AWK -F\; '$2 { print $2 }'` if [ $USUARIO != " " ] ; then if $AWK -F: '$3 < 100 {print $1}' /etc/passwd | grep $USUARIO > /dev/null ; then $LOGGER -t AUTO_USERADD "Impossível adicionar $USUARIO. Usuário de sistema" elif $USERADD $USUARIO ; then if $ECHO $SENHA | $PASSWD --stdin $USUARIO ; then $LOGGER -t AUTO_USERADD "Usuário $USUARIO adicionado com sucesso." else $LOGGER -t AUTO_USERADD "Erro ao setar senha do usuário: $USUARIO." fi else $LOGGER -t AUTO_USERADD "Erro ao adicionar usuário: $USUARIO." fi fi fi done } del () { while read FILE ; do USUARIO=$FILE if [ $USUARIO != " " ] ; then if $AWK -F: '$3 < 100 {print $1}' /etc/passwd | grep $USUARIO > /dev/null ; then $LOGGER -t AUTO_USERADD "Impossível remover $USUARIO. Usuário de sistema" elif $FINGER -m $USUARIO 2>&1 | $GREP "Login: $USUARIO" > /dev/null 2>&1 ;then if $USERDEL -r $USUARIO ; then $LOGGER -t AUTO_USERADD "Usuário: $USUARIO removido com sucesso." else $LOGGER -t AUTO_USERADD "Erro ao remover usuário: $USUARIO." fi else $LOGGER -t AUTO_USERADD "Usuário: $USUARIO não existe." fi fi done } case "$1" in -a) add ;; -r) del ;; *) echo $"Usar: Não é possivel usar esse programa em modo interativo." exit 1 esac
Procmail
- Para que funcionasse corretamente foi necessário criar o arquivo .procmailrc para o usuário root em /root/.procmailrc
- O procmail vai chamar o script para a adição do usuário.
:0fw # Ip do servidor que irá enviar o e-mail para a adição *^Received.*192\.168\.1\.10 # E-mail do remetente *^From:.*rh@dominio.local # E-mail do destinatário, criado um alias em /etc/aliases do adicionarusuariodosistema para root *^To:.*adicionarusuariodosistema@dominio.local # Título do e-mail *^Subject:.Base de usuarios adicionar # Executar o script com o parametro -a (Adicionar usuario) | /usr/local/bin/auto_useradd.sh.x -a :0fw # Ip do servidor que irá enviar o e-mail para a adição *^Received.*192\.168\.1\.10 # E-mail do remetente *^From:.*rh@dominio.local # E-mail do destinatário, criado um alias em /etc/aliases do removerusuariodosistema para root *^To:.*removerusuariodosistema@dominio.local # Título do e-mail *^Subject:.Base de usuarios remover # Executar o script com o parametro -r (Remover usuario) | /usr/local/bin/auto_useradd.sh.x -r
Aliases
- Criado os seguintes aliases apontando para o usuário root em /etc/aliases
adicionarusuariodosistema: root removerusuariodosistema: root
- Executado o comando abaixo para ativar os novos aliases
# newaliases
Colocando em funcionamento
- Agora basta enviar um e-mail com as segintes características para que o script funcione.
- Para adicionar um usuário o e-mail deve obedecer as regras do procmail como segue:
- O servidor que envia o e-mail para o sistema deverá enviar o e-mail com o IP 192.168.1.10
- O e-mail do remetente tem que ser rh@dominio.local
- O e-mail do destinatário tem que ser o adicionarusuariodosistema@dominio.local
- O título do e-mail tem que ser: Base de usuarios adicionar
- No corpo do e-mail tem que conter usuário e senha separados por ";" como segue:
usuário;senha
Nesse caso a senha é o número de registro do usuário O script faz uma série de verificações para validar se o usuário em questão não existe. Se ele não existir o script verifica se o login em questão não é um usuário do sistema. Caso o usuário não exista e não seja um usuário do sistema ele o adiciona
- Para remover um usuário o e-mail deve obedecer as regras do procmail como segue:
- O servidor que envia o e-mail para o sistema deverá enviar o e-mail com o IP 192.168.1.10
- O e-mail do remetente tem que ser rh@dominio.local
- O e-mail do destinatário tem que ser o removerusuariodosistema@dominio.local
- O título do e-mail tem que ser: Base de usuarios remover
- No corpo do e-mail tem que conter somente o login do usuário como segue:
usuario
O script faz uma série de verificações para validar se o usuário em questão é existente. Se ele existir o script verifica se não é um usuário do sistema. Caso o usuário exista e não seja um usuário do sistema ele o remove
Observações
- Todos os parâmetros de verificação citados acima poderam ser alterados conforme necessidade, basta lembrar de alterar no procmailrc.
- Os e-mails citados são grandes para dificultar o acesso a funcionalidade por quem não conhece o sistema.
- O script só será executado se atender todas as verificações citadas acima.
Log
O script gera log de todas as ações em /var/log/messages e pode ser filtrado pelo parâmetro AUTO_USERADD.