você está aqui: Home  → Arquivo de Mensagens Workshop Gratuito: Os Segredos do Shell, com o Prof. Julio Neves

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.

  1. O pessoal do RH cadastra o novo funcionário.

  2. 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.

  1. 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

  1. 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.



Veja a relação completa dos artigos de Smailli Hemori Moraes