Adicionando "automagicamente" usuários
Publicado por Iran Macedo (última atualização em 31/08/2010)
[ Hits: 13.755 ]
Download 1283081968.adiciona_usuario (versão 2)
Uma das tarefas mais tediosas é criar usuários para rede Windows (Samba - PDC) em servidores Linux. É um tal de verifica se já existe esse usuário, adiciona, muda bash, troca senha... e isso usuário por usuário.
Pensando nisso criei um script que automatiza essa tarefa, deixando-nos apenas o trabalho de digitar o novo Login, Nome do usuário e seu Grupo principal. Esse script toma alguns cuidados, como verificar se o Login digitado já existe, verifica se já existe um diretório antigo em /home de algum outro usuário que usava o mesmo nome, trata letras digitadas em caixa alta, ativa a troca de senha no primeiro acesso para o novo usuário de forma automática e relê a configuração do Samba no final do uso do software.
Após rodar o programa e digitar os novos Login, Nome do usuário e grupo principal, basta revisar as informações e confirmar a entrada dos dados. Depois é só passar a senha genérica para o usuário do Samba (S3nh4123) e pedir para que ele faça logon em uma estação de trabalho Windows. Será pedida a troca da senha no primeiro logon. O seu trabalho? Feito em pequenos 5 passos! :)
Você pode adicionar 1, 10, 100 usuários numa única sessão. Depois de terminado e ao fechar o programa com um único comando, a configuração do Samba é relida automaticamente, validando suas modificações.
Também responde aos parâmetros -V ou --version e aos parâmetros -h ou --help.
Além da automação que este script oferece ao administrador, ele também é uma fonte de estudos para aqueles que estão correndo atrás para aprender Shell Script. ;)
Este script foi severamente testado nas distribuições Debian e Ubuntu. Está funcionando redondo. Mas se você encontrar algum bug, por favor, me comunique. Meu e-mail está no cabeçalho do script.
Espero que gostem! :)
Versão 2 - Enviado por Iran Macedo em 29/08/2010
Changelog: Corrigido um bug no comando "antivirus -V" ou "antivirus --version", onde o script apontava para um local fixo no computador local aonde foi criado.
O script corrigido pode ser baixado aqui.
*** Evite copiar o script direto da página. Sua exibição no HTML modifica alguns códigos e as cores dos textos não vão aparecer corretamente! Ao invés de copiá-lo, baixe o script que contem o código correto!
Abs.
Download 1283081968.adiciona_usuario
#!/bin/bash
#############################################################
#
# Script 1.1 para adicionar novos usuarios.
# Prepara usuarios para SAMBA em Primary Domain Controller (PDC).
#
#############################################################
#
# Programa: adiciona_usuario
# Versão 1.1
# Licença de uso: BSD
# Use, compartilhe, mantenha os créditos de quem criou e/ou ajudar a desenvolver.
#
#############################################################
#
# Versão 1.0 - Comandos sem tratamentos em bloco único.
# Versão 1.1 - Programa em blocos distintos, uso de funções, tratamentos de erros, validação das informações
# passadas pelo usuário, cores, inclusão do -V e --version (versão) e do -h e --help (ajuda).
# Tratamento na digitação das informações em letras maiúsculas.
# Cópia automática deste programa para /usr/bin/ no primeiro uso. Verifica permissões do usuário.
#
#############################################################
#
# Por Iran Macedo.
# E-mail: macedo dot if at gmail dot com
# última modificação: 15/08/2010.
#
#############################################################
param="$1" #Variável para Função Parametros. Devolve o primeiro parâmetro.
prog="$0" #Variável para Função Parametros. Devolve o comando utilizado para rodar este prog.
cicle=C
cadastro=0
rodou=0
# Verifica se o programa já está em /usr/bin. Se já está, segue sem alterações. Se não está,
# faz um hardlink deste para /usr/bin.
instalado=$(ls /usr/bin/ |grep -sow $(basename "$0")) > /dev/null 2>&1
if [ -z $instalado ];then
ln "$prog" /usr/bin/adiciona_usuario
clear
echo ""
echo -e "{FONTE}33[36;1m Olá! Rodando este programa pela primeira vez? :)
Da próxima vez, rode este programa somente digitando o comando: {FONTE}33[0m
{FONTE}33[36;1;5m [ adiciona_usuario ]{FONTE}33[0m {FONTE}33[36;1m pelo seu Terminal.
E lembre-se, este programa precisa ser rodado pelo Root ;)
root@pc# adiciona_usuario{FONTE}33[0m
Pressione [ ENTER ] para continuar..."
read
fi
#FUNÇÃO PRINCIPAL
###
Main() {
Parametros
Cores
Title
rodou=1
case $cicle in
[Ss]) Sair ;;
[Cc]) Continue ;;
*) Ops ;;
esac
} #Fim Main
#FUNÇÃO PARAMETROS
# Se o usuário usar algum parametro, as informações serão passadas e o programa será fechado logo após.
# Parametros -V e --version (versão), -h e --help (ajuda).
###
Parametros() {
# Variável rodou verifica se o programa foi rodado por inteiro (adiciona_usuario)
# ou se foi utilizado um dos parâmetros (adiciona_usuario -V, por exemplo).
if [ "$rodou" = "0" ];then
# param = $1, primeiro parâmetros após o comando.
case "$param" in
-V | --version) echo ""
echo " Programa: "$(basename "$0" ) ;
# Pega a versão direto do cabeçalho.
echo -n " Versão atual: " ;
grep -m 1 "Versão" /etc/init.d/adiciona_usuario |cut -d - -f 1 |tr -d \# ;
# Pega a data da modificação direto do cabeçalho.
echo -n " Data da última modificação: " ;
grep -m 1 "modificação" /etc/init.d/adiciona_usuario |cut -d : -f 2 |tr -d \# ;
echo " Criado por Iran Macedo."
echo "";
exit 0 ;;
-h | --help) Mensagem_Uso ;
exit 0 ;;
# Para qualquer outro parametro, mensagem de uso.
# Caso $param tenha um outro parâmetro, inválido.
*) if [ -n "$param" ];then
echo ""
echo -e "{FONTE}33[31;1;5m Ooops!!!"
echo -e " Opção inválida: $param!{FONTE}33[0m"
echo
echo " Parâmetros válidos: "
echo " -h | --help |-V | --version"
exit 1
fi ;;
esac
fi
} #Fim Parametros
#FUNÇÃO DE AJUDA
# Esta função é invocada quando utilizados os parametros -h ou --help.
###
Mensagem_Uso() {
clear
echo "
adiciona_usuario"
echo -n "
Local do arquivo ";whereis adiciona_usuario
echo "
Programa para adição de usuários Windows no PDC Samba.
Para evitar erros, propositalmente não coloquei aqui as opções de
desabilitar ou excluir usuários do PDC. Caso seja esta a sua necessidade, utilize
o programa [ delete_usuario ] que pode ser baixado no site vivaolinux.com.br.
Uso: $(basename "$0") [-h | -V]
-h, --help Opcional. Mostra esta tela de ajuda e sai.
-v, --version Opcional. Mostra a versão atual deste programa e sai.
Para rodar o programa, digite [ adiciona_usuario ] no seu Terminal.
Este programa adiciona um hardlink na pasta /usr/bin, não sendo necessário utilizar o caminho completo para o programa.
Criado por Iran Macedo.
"
} #Fim Mensagem_Uso
#FUNÇÃO TITULO
###
Title() {
clear
echo
echo " ***************************************************"
echo " * PROGRAMA PARA ADICIONAR NOVOS USUARIOS *"
echo " * SERVIDOR PDC - EMPRESA versão 1.1 *"
echo " ***************************************************"
#XXX Mude o EMPRESA pelo nome da sua empresa! ;)
echo
if [ "$cadastro" = "1" ];then #Se já houve algum cadastro de usuário nesta sessão.
echo -e " * Ultimo usuário cadastrado: {FONTE}33[1;36m $LAST {FONTE}33[0m" #ULTIMO USUÁRIO REALMENTE CADASTRADO.
echo -e " * Ultimo login digitado: {FONTE}33[1;36m $NOME {FONTE}33[0m" #ULTIMA TENTATIVA DE CADASTRO.
else
echo -e " * Ultimo usuário cadastrado: {FONTE}33[1;36m Nenhum {FONTE}33[0m"
echo -e " * Ultimo login digitado: {FONTE}33[1;36m Nenhum {FONTE}33[0m"
fi
echo ""
# Verifica poderes de superadmin.
if [ "$USER" != "root" ];then
echo -e " {FONTE}33[1;31m* Você não está logado como root!!! {FONTE}33[0m"
echo " * Por favor, verifique suas permissões!"
echo ""
exit 1
fi
} #Fim Title
#FUNÇÃO Continue
###
Continue() {
unset LOGIN
echo -n " - Digite o [ LOGIN ] do novo usuario: " ;
read LOGIN ;
# Tratando possível erro na digitação (em maiúsculas).
LOGIN=$(echo "$LOGIN" |tr [[:upper:]] [[:lower:]])
unset NAME ;
# Filtra o arquivo passwd e compara variável LOGIN com as entradas.
NAME=$(cat /etc/passwd |grep -siow $LOGIN) > /dev/null 2>&1 ;
# Se variável NAME estiver vazia, usuário não existe. Continuamos.
if [ -z "$NAME" ];then
unset NOME
unset GRUPO
echo -n " - Digite o [ NOME ] completo do novo usuario: "
read NOME
echo -n " - Digite o [ GRUPO ] principal do usuario: "
read GRUPO
# Tratando possível erro na digitação (em maiúsculas).
GRUPO=$(echo "$GRUPO" |tr [[:upper:]] [[:lower:]])
unset GROUP
# Filtra o arquivo group e compara variável GRUPO com as entradas.
GROUP=$(cat /etc/group |grep -siow $GRUPO) > /dev/null 2>&1
Verify # Próximo passo, função Verify.
# Se variável NAME estiver cheia, então o usuário existe. Chama Warn para avisar.
else Warn
fi ;
clear ;
} #Fim Continue
# $? = STATUS DO ÚLTIMO COMANDO DADO
# STATUS = 0 OU 1 (FUNCIONOU) <-- RESPOSTA DE SUCESSO DO GROUPADD!
#STATUS >= 2 E <= 6 (ERRO) <-- RESPOSTA DE ERRO DO GROUPADD!
#FUNÇÃO GRUPO
###
Add_group() {
groupadd "$GRUPO" > /dev/null 2>&1
# Se o comando anterior (Add_group) retornar erros do 2 ao 6,
# apagar grupo adicionado e avisar. Voltar ao Principal.
###
if [ $? -ge "2" -a $? -le "6" ];then #ASSEGURA CONTRA ERROS
delgroup --only-if-empty --quiet $GRUPO > /dev/null 2>&1
echo
echo -e "{FONTE}33[1;31m * Dados inválidos! Tente de novo. {FONTE}33[0m"
echo
echo " * [ "$GRUPO" ] não pode ser utilizado como GRUPO!"
echo " * Pressione ENTER para Continuar."
read
cadastro=1
clear
Main
fi
DONE=1 #SE DER ALGUM ERRO, SETA 1 SE O GRUPO FOI ADICIONADO.
} #Fim Add_group
#FUNÇÃO USUARIO
###
Add_user() {
groupadd "$LOGIN" > /dev/null 2>&1
# Se o comando anterior (Add_group) retornar erros do 2 ao 6,
# apagar grupo adicionado e avisar. Voltar ao Principal.
if [ $? -ge "2" -a $? -le "6" ];then #ASSEGURA CONTRA ERROS
test "$DONE" = "1" && delgroup --only-if-empty --quiet $GRUPO > /dev/null 2>&1
echo
echo -e "{FONTE}33[1;31m * Dados inválidos! Tente de novo. {FONTE}33[0m"
echo
echo " * [ "$LOGIN" ] não pode ser utilizado como LOGIN!"
echo " * Pressione ENTER para voltar."
read ""
cadastro=1
clear
Main
fi
# Se não tivermos erros por comparação (DONE) ou erros do comando anterior
# (Add_user), adicionamos as demais informações do usuário.
ls /home |grep -siow "$LOGIN" > /dev/null 2>&1
# Algumas vezes deletamos usuários, mas não apagamos as suas pastas.
# Desta forma, ao criar um novo usuário com o mesmo Login que um anterior,
# a possibilidade de erro ao usar uma pasta com permissões dúbias é grande.
if [ "$?" = "0" ];then
delgroup --only-if-empty --quiet $GRUPO > /dev/null 2>&1
delgroup --only-if-empty --quiet $LOGIN > /dev/null 2>&1
echo " "
echo -e " {FONTE}33[1;31m * Diretório já existente! Por favor, verifique o diretório /home! {FONTE}33[0m"
echo " * Pressione [ ENTER ] para voltar!"
read
Main
fi
useradd -d /home/"$LOGIN" -m -c "$NOME" -s /bin/false -g "$GRUPO" "$LOGIN" > /dev/null 2>&1
gpasswd -a "$LOGIN" "users" > /dev/null 2>&1
gpasswd -a "$LOGIN" "sambashare" > /dev/null 2>&1
gpasswd -a "$LOGIN" "$LOGIN" > /dev/null 2>&1
gpasswd -a "$LOGIN" "$GRUPO" > /dev/null 2>&1
#XXX Adicione mais grupos aqui, se necessário!
# OS DOIS COMANDOS ABAIXO SAO PARA USO DO SAMBA EM PDC
# CASO NAO USE PDC, COMENTE-OS!
# ESTA LINHA SETA A SENHA DO USUARIO.
(echo "S3nh4123";echo "S3nh4123")| smbpasswd -s -a "$LOGIN" > /dev/null 2>&1
# Pede alteração de senha no primeiro logon do Windows (para uso de perfil remoto).
net sam set pwdmustchangenow "$LOGIN" yes > /dev/null 2>&1
echo
echo " * Usuario $NOME cadastrado com sucesso!"
echo
echo " * Troca de senha no primeiro logon no Windows ativada!"
echo
echo -n " * Grupos de "$LOGIN": ";groups $LOGIN
echo
unset cicle
echo -n " ** Pressione C para CONTINUAR ou S para SAIR: "
read cicle
clear
cadastro=1 #SETA A VARIAVEL DO PAINEL (ULTIMO CADASTRO E LOGIN REALIZADO).
DONE=0 #Zera variável DONE para ser utilizada por um novo usuário.
} #Fim Add_user
#FUNÇÃO WARNING
#CASO O LOGIN ESTEJA EM USO OU POSSUI CARACTERES INVÁLIDOS, ADMIN RECEBE AVISO.
###
Warn() {
echo
echo -e "{FONTE}33[1;31m * ATENÇÃO!!! Login $LOGIN em uso ou inválido! {FONTE}33[0m"
echo
echo -n " * Grupos de "$LOGIN": ";groups $LOGIN
echo
unset cicle
echo -n " - Pressione C para CONTINUAR ou S para SAIR: "
read cicle
clear
Main
} #Fim Warn
#FUNÇÃO VERIFICAR
# Somente pede a confirmação do usuário antes de continuar com o procedimento.
###
Verify() {
echo
echo " * Estes dados estão corretos?"
echo
echo " - LOGIN: "$LOGIN""
echo " - NOME: "$NOME""
echo " - GRUPO: "$GRUPO""
echo
unset VER
echo -n " * Pressione S para SIM ou N para NÃO: "
read VER
Confirme #Após verificação, chama função Confirme.
} #Fim Verify
#FUNÇÃO CONFIRMAR
#RECEBE VARIAVEL VER DE VERIFY.
###
Confirme() {
case $VER in
[Ss]) if [ -z "$GROUP" ];then #SE RESPOSTA = SIM E NÃO EXISTIR O GRUPO...
Add_group
Add_user
else #SE RESPOSTA = SIM E GRUPO EXISTIR.
Add_user
fi ;
LAST=$NOME ;;
[Nn]) echo ; #SE RESPOSTA = NÃO...
echo " * Informações descartadas!" ;
echo
unset cicle ;
echo -n " * Pressione C para CONTINUAR ou S para SAIR: " ;
read cicle ;
clear ;
Main ;;
*) echo ; #PARA QUALQUER OUTRA RESPOSTA.
echo " * Opção inválida!: [ $VER ]" ;
Verify ;;
esac
# Independente da resposta, o programa loopa para Main.
Main
} #Fim Confirme
#FUNÇÃO OPS
#PARA RESPOSTA INVALIDA DA FUNÇÃO PRINCIPAL
###
Ops() {
echo -e "{FONTE}33[1;31m *** ATENÇÃO!!! OPÇÃO INVÁLIDA: [ "$cicle" ] {FONTE}33[0m" ;
echo
unset cicle ;
echo -n " *** Digite C para CONTINUAR ou S para SAIR: " ;
read cicle ;
clear ;
# Programa loopa para Main.
Main ;
} #Fim Ops
#FUNÇÃO SAIR
#HORA DE RELER O SAMBA E VOLTAR PARA O TRABALHO :)
###
Sair() {
#XXX Estes são alguns meios de invocar o serviço do Samba. Verifique qual
# o seu Linux utiliza, descomente-o e comente os demais.
service smbd reload ;
service nmbd reload ;
#service samba reload ;
#/etc/init.d/samba reload ;
clear ;
echo " Seu último dígito: [ "$cicle" ]" #PARA O CASO DO PROGRAMA FECHAR E VC NÃO ENTENDER NADA.
echo
echo -e "{FONTE}33[1;31m Bye Admin! {FONTE}33[0m" ;
echo ;
exit 0 ;
} #Fim Sair
#FUNÇÃO CORES
# Carrega cores para os destaques em tela.
#XXX Adicione mais cores, caso necessário!
###
Cores() {
vermelho="{FONTE}33[0;31m"
ciano="{FONTE}33[0;36m"
} #Fim Cores
Main #ENCERRA A FUNÇÃO MAIN.
Baixando fotos de uma câmera digital pela USB
Monitore vários servidores ao mesmo tempo com Apache + shellscript
Instala os modulos de bateria dos notebook da Acer
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Programa fora de escala na tela do pc (10)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (1)
O programa assinador digital (1)









