você está aqui: Home  → Arquivo de Mensagens

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

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script