Script para automação de criação de usuários [RESOLVIDO]

1. Script para automação de criação de usuários [RESOLVIDO]

Gabriel Guedes
7apolochewy7

(usa Ubuntu)

Enviado em 07/12/2019 - 13:32h

Boa tarde a todos,
Estou cursando Rede de Computadores, porém minhas aulas de linux forma meio fracas
venho aqui lhes pedir ajuda com uma ideia que gostaria de implementar, que seria automatizar uma tarefa prosposta pelo prof°

dica:
Usei o seguinte comando quando criei todos manualmente:
useradd -m -d <diretorio_home> -G <grupos> -s <caminho_do_sheel> <nome_do_usuario>
ou seja preciso preencher os elementos entre chaves com o que meu prof pediu no cenário:

Preciso criar diferentes usuários de nome qualquer, com diferentes grupos, diferentes pastas homes e diferentes shells:
Grupos:
herois
superamigos
ligadajustica
cidadaos
viloes
legiaodomal
###################################
crie 10 usuários
home: /home
shell login: sh
grupo: cidadaos

crie 10 usuario:
home: /home/ligadajustica
shell: bash
grupo: ligadajustica

crie 10 usuarios
home: /home/superamigos
shell: bash
grupo: herois e ligadajustica

###########################################


se puderem me ajudar a bolar um script bacana eu agradeceria.
Não vai aumentar minha nota mais vai melhorar meu futuro hahaha,
All the best


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/12/2019 - 23:35h

7apolochewy7 escreveu:

Olá msoliver,
Primeiramente gostaria de agradecer pela atenção,
Vamos lá...

Sobre o questionamento da home:
Sim, está correto,
No primeiro caso, temos pasta pessoal como subpasta de /home:
/home/<username>

O segundo, a pasta pessoal é uma subpasta de /home/ligadajustica:
/home/ligadajustica/<username>

O terceiro segue a mesma lógica do segundo:
/home/superamigos/<username>

Sobre os Grupos:
Sim há todos aqueles grupos, pois no exercício original, todos os grupos são utilizados,
Mas as outras tarefas são apenas variações do segundo e terceiro exemplo, fazendo combinações de Shells+homes+grupos diferentes.
Obrigado

Boa noite, 7apolochewy7.
Segue o Script, no capricho, com validações, cores e, como dizem por aqui, cheio de "frescuras", rsrsrsrsr
#!/bin/bash

#CORES
CV="\x1B[0;38;5;196m";CVD="\x1B[0;38;5;2m";FC="\x1B[m";

grupos=(cidadaos ligadajustica herois); #grupos usados

shells=($(grep -Ew '(bash|sh)$' /etc/shells|tr "\n" ' ')); #Shell's definidos, caminho completo.

READ_USER(){ read -p "$nª Usuário: " usuario; }

CHECA_USER() { if grep -qw "^${usuario}" /etc/passwd;then $1;else $2;fi;}

ERROLOGIN() { printf "${CV}\nUSUáRIO:$usuario JÁ EXISTE NO SISTEMA\n${FC}\n";READ_USER;}

MSGOK() { printf "${CVD}\n CADASTRO EFETUADO COM SUCESSO.\n$(LINE)\n USUARIO:$usuario\n Senha:${PASSWD[0]}\n Nome:$nome\n$(LINE)\n${FC}" ; }

ERROCAD() { printf "${CV}\n$(LINE)\n PROBLEMAS NO CADASTRO DO USUáRIO:$usuario ${FC}\n$(LINE)\n" ; }

LINE() { echo -e $_{1..50}'\b—' ; }

#Function/Looping solicitando o nome dos 10 usuários, Define vars, shell, grupo e cria user....
pega_usuarios(){
for ((n=1;n<=10;n++));do
READ_USER
#Checa se usuario informado já existe.
CHECA_USER ERROLOGIN
read -p "Nome do $usuario: " nome;
if (( $g == "0"));then
shell="${shells[0]}";grupo="${grupos[0]}";
home="/home/$usuario";
elif (($g == "1"));then
shell="${shells[1]}";grupo="${grupos[1]}";
mkdir -p /home/${grupos[1]}/;
home="/home/${grupos[1]}/$usuario";
elif (($g == "2"));then
shell="${shells[1]}"; grupo="${grupos[2]}";
mkdir -p /home/superamigos/;
home="/home/superamigos/$usuario";
fi

read -a PASSWD <<< $(makepasswd --crypt-md5 --chars=6) #GERA SENHA CRIPTOGRAFADA (06 CARACTERES)
printf "$(LINE)\nUsuário: $usuario\nNome: $nome\nHome: $home\nGrupo: $grupo\nShell: $shell\n$(LINE)\n";
useradd -c "$nome" -p "${PASSWD[1]}" -d "$home" -m -g "$grupo" -s ${shell} "$usuario"; #Adiciona usuario.
[ ${grpext} ] && gpasswd -a ${usuario} "${grpext}";
CHECA_USER MSGOK ERROCAD #Checa se foi cadastrado com sucesso.
done
}

#CHECA ROOT/SUDO#
(($UID != 0)) && { zenity --timeout="2" \
--warning --text '<span foreground="red" font="16">Exige Root!\nUso: sudo "'$(basename $0)'"</span>' \
2>/dev/null;exit 0;} || clear;

#Checa Compatibilidade
for app in makepasswd zenity;do
if ! which $app >/dev/null;then
inst+=($app);
fi;
done
((${#inst[@]}>0)) && { printf "${CV}Instalar: %s${FC}\n" ${inst[@]};printf "Saindo . . .\n";exit 0; }

for ((g=0;g<${#grupos[@]};g++));do
[[ ${grupos[$g]} =~ 'herois' ]] && grpext="${grupos[1]}";
printf "$(LINE)\nPasso $((g+1)) - Grupo: ${grupos[$g]} $grpext\n$(LINE)\n";
#Se o grupo nao existe, é criado.
if ! grep -wq "^${grupos[$g]}" /etc/group;then
groupadd ${grupos[$g]}
fi
pega_usuarios
done


Faça uns testes, verifique se funciona a contento....
Testei aqui, funcionou legal.
Não esqueça de,
Quando Resolvido,
Marcar como RESOLVIDO e ESCOLHER a "MELHOR RESPOSTA!" rsrsrsrs

Vai fazer o que foi proposto, os 03 passos....

#Passo: 1:
#home: /home/$usuario
#shell login: sh
#grupo: cidadaos

#Passo 2
#home: /home/ligadajustica/$usuario
#shell: bash
#grupo: ligadajustica

#passo 3
#home: /home/superamigos/$usuario
#shell: bash
#grupo: herois e ligadajustica
A logica foi feita de acordo com os passos acima
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________

3. Re: Script para automação de criação de usuários [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/12/2019 - 18:21h


7apolochewy7 escreveu:

Boa tarde a todos,
Estou cursando Rede de Computadores, porém minhas aulas de linux forma meio fracas
venho aqui lhes pedir ajuda com uma ideia que gostaria de implementar, que seria automatizar uma tarefa prosposta pelo prof°

dica:
Usei o seguinte comando quando criei todos manualmente:
useradd -m -d <diretorio_home> -G <grupos> -s <caminho_do_sheel> <nome_do_usuario>
ou seja preciso preencher os elementos entre chaves com o que meu prof pediu no cenário:

Preciso criar diferentes usuários de nome qualquer, com diferentes grupos, diferentes pastas homes e diferentes shells:
Grupos:
herois
superamigos
ligadajustica
cidadaos
viloes
legiaodomal
###################################
crie 10 usuários
home: /home
shell login: sh
grupo: cidadaos

crie 10 usuario:
home: /home/ligadajustica
shell: bash
grupo: ligadajustica

crie 10 usuarios
home: /home/superamigos
shell: bash
grupo: herois e ligadajustica

###########################################
se puderem me ajudar a bolar um script bacana eu agradeceria.
Não vai aumentar minha nota mais vai melhorar meu futuro hahaha,
All the best

Preciso criar diferentes usuários de nome qualquer, com diferentes grupos, diferentes pastas homes e diferentes shells:
useradd -m -d <diretorio_home> -G <grupos> -s <caminho_do_sheel> <nome_do_usuario>
Preciso preencher os elementos entre chaves com o que meu prof pediu no cenário:

Dicas:
Crie variáveis com os valores pretendidos, e altere o que está entre "< >" pelo valor da var criada....
Muito simples....
É para ficar sem a passwd?????

###########################################
Vai melhorar meu futuro hahaha,
Isso se Você fizer.....!!!! KKKKKKKK
###########################################
Se puderem me ajudar a bolar um script bacana eu agradeceria.
Te ajudo sim, qual a duvida.....
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


4. Eu já fiz o meu!!

Gabriel Guedes
7apolochewy7

(usa Ubuntu)

Enviado em 08/12/2019 - 14:55h

Eu tinha feito meu script, mas como n saiu como esperado, achei irrelevante adiciona-lo aqui,
mas enfim, lá vai:
#!/bin/bash
echo "Informe quantos usuario deseja criar: "; read qtdd
for i in {1. .$qtdd};
do
echo "dentro do loop"
echo "novo usuário: "; read nome
echo "diretorio para o $nome: " read dir
fulldir=$dir/$nome
echo "Informe o shell: "; read login_shell
echo "Informe os grps: " read grupos
sudo useradd -m -d $fulldir -G $grupos -s $login_shell $nome
chage -d 0 $nome
done
#####################
(fim do script)

ele basicamente, não funciona com usuários que ficam em subpastas de home,
por exemplo, /home/ligadajustica/<pasta_do_usuario>

Lembrando que sou bem iniciante, e só conseguir entender mais ou menos isso aqui, pois juntei o pouco que sei de python com o pouco que sei de linux

Obrigado




5. Re: Script para automação de criação de usuários

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/12/2019 - 17:47h

7apolochewy7 escreveu:

Eu tinha feito meu script, mas como n saiu como esperado, achei irrelevante adiciona-lo aqui,
mas enfim, lá vai:
#!/bin/bash
echo "Informe quantos usuario deseja criar: "; read qtdd
for i in {1. .$qtdd};do
echo "dentro do loop"
echo "novo usuário: "; read nome
echo "diretorio para o $nome: " read dir
fulldir=$dir/$nome
echo "Informe o shell: "; read login_shell
echo "Informe os grps: " read grupos
sudo useradd -m -d $fulldir -G $grupos -s $login_shell $nome
chage -d 0 $nome
done
#####################
(fim do script)

ele basicamente, não funciona com usuários que ficam em subpastas de home,
por exemplo, /home/ligadajustica/<pasta_do_usuario>

Lembrando que sou bem iniciante, e só conseguir entender mais ou menos isso aqui, pois juntei o pouco que sei de python com o pouco que sei de linux
Obrigado

Boa tarde 7apolochewy7.
for i in {1. .$qtdd};
#isso não funciona, a var não é resolvida, e tbem, redunda, já que o a qtdd é definida.... ,
#mas, para funcionar: faça:
n=10
for n in $(eval echo {1..$n}); do
echo $n;
done
______________________________________________________________
Ou
for((n=1;n<=10;n++));do......
______________________________________________________________
A home é:
home="/home/$nome"
Ou
home="/home/ligadajustica/$nome"
Ou
home="/home/superamigos/$nome"
É isso, ou não entendi o enunciado?
_____________________________________
É essa quantidade de grupos:
herois
superamigos
ligadajustica
cidadaos
viloes
legiaodomal

Pelo enunciado, nem todos serão usados......
_____________________________________
Estou tentando fazer um script legal.....

______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


6. Repostas

Gabriel Guedes
7apolochewy7

(usa Ubuntu)

Enviado em 10/12/2019 - 10:45h

Olá msoliver,
Primeiramente gostaria de agradecer pela atenção,
Vamos lá...

Sobre o questionamento da home:
Sim, está correto,
No primeiro caso, temos pasta pessoal como subpasta de /home:
/home/<username>

O segundo, a pasta pessoal é uma subpasta de /home/ligadajustica:
/home/ligadajustica/<username>

O terceiro segue a mesma lógica do segundo:
/home/superamigos/<username>

Sobre os Grupos:
Sim há todos aqueles grupos, pois no exercício original, todos os grupos são utilizados,
Mas as outras tarefas são apenas variações do segundo e terceiro exemplo, fazendo combinações de Shells+homes+grupos diferentes.

Obrigado


7. Agradeço!!!

Gabriel Guedes
7apolochewy7

(usa Ubuntu)

Enviado em 11/12/2019 - 09:24h

msoliver escreveu:

7apolochewy7 escreveu:

Olá msoliver,
Primeiramente gostaria de agradecer pela atenção,
Vamos lá...

Sobre o questionamento da home:
Sim, está correto,
No primeiro caso, temos pasta pessoal como subpasta de /home:
/home/<username>

O segundo, a pasta pessoal é uma subpasta de /home/ligadajustica:
/home/ligadajustica/<username>

O terceiro segue a mesma lógica do segundo:
/home/superamigos/<username>

Sobre os Grupos:
Sim há todos aqueles grupos, pois no exercício original, todos os grupos são utilizados,
Mas as outras tarefas são apenas variações do segundo e terceiro exemplo, fazendo combinações de Shells+homes+grupos diferentes.
Obrigado

Boa noite, 7apolochewy7.
Segue o Script, no capricho, com validações, cores e, como dizem por aqui, cheio de "frescuras", rsrsrsrsr
#!/bin/bash

#CORES
CV="\x1B[0;38;5;196m";CVD="\x1B[0;38;5;2m";FC="\x1B[m";

grupos=(cidadaos ligadajustica herois); #grupos usados

shells=($(grep -Ew '(bash|sh)$' /etc/shells|tr "\n" ' ')); #Shell's definidos, caminho completo.

READ_USER(){ read -p "$nª Usuário: " usuario; }

CHECA_USER() { if grep -qw "^${usuario}" /etc/passwd;then $1;else $2;fi;}

ERROLOGIN() { printf "${CV}\nUSUáRIO:$usuario JÁ EXISTE NO SISTEMA\n${FC}\n";READ_USER;}

MSGOK() { printf "${CVD}\n CADASTRO EFETUADO COM SUCESSO.\n$(LINE)\n USUARIO:$usuario\n Senha:${PASSWD[0]}\n Nome:$nome\n$(LINE)\n${FC}" ; }

ERROCAD() { printf "${CV}\n$(LINE)\n PROBLEMAS NO CADASTRO DO USUáRIO:$usuario ${FC}\n$(LINE)\n" ; }

LINE() { echo -e $_{1..50}'\b—' ; }

#Function/Looping solicitando o nome dos 10 usuários, Define vars, shell, grupo e cria user....
pega_usuarios(){
for ((n=1;n<=10;n++));do
READ_USER
#Checa se usuario informado já existe.
CHECA_USER ERROLOGIN
read -p "Nome do $usuario: " nome;
if (( $g == "0"));then
shell="${shells[0]}";grupo="${grupos[0]}";
home="/home/$usuario";
elif (($g == "1"));then
shell="${shells[1]}";grupo="${grupos[1]}";
mkdir -p /home/${grupos[1]}/;
home="/home/${grupos[1]}/$usuario";
elif (($g == "2"));then
shell="${shells[1]}"; grupo="${grupos[2]}";
mkdir -p /home/superamigos/;
home="/home/superamigos/$usuario";
fi

read -a PASSWD <<< $(makepasswd --crypt-md5 --chars=6) #GERA SENHA CRIPTOGRAFADA (06 CARACTERES)
printf "$(LINE)\nUsuário: $usuario\nNome: $nome\nHome: $home\nGrupo: $grupo\nShell: $shell\n$(LINE)\n";
useradd -c "$nome" -p "${PASSWD[1]}" -d "$home" -m -g "$grupo" -s ${shell} "$usuario"; #Adiciona usuario.
[ ${grpext} ] && gpasswd -a ${usuario} "${grpext}";
CHECA_USER MSGOK ERROCAD #Checa se foi cadastrado com sucesso.
done
}

#CHECA ROOT/SUDO#
(($UID != 0)) && { zenity --timeout="2" \
--warning --text '<span foreground="red" font="16">Exige Root!\nUso: sudo "'$(basename $0)'"</span>' \
2>/dev/null;exit 0;} || clear;

#Checa Compatibilidade
for app in makepasswd zenity;do
if ! which $app >/dev/null;then
inst+=($app);
fi;
done
((${#inst[@]}>0)) && { printf "${CV}Instalar: %s${FC}\n" ${inst[@]};printf "Saindo . . .\n";exit 0; }

for ((g=0;g<${#grupos[@]};g++));do
[[ ${grupos[$g]} =~ 'herois' ]] && grpext="${grupos[1]}";
printf "$(LINE)\nPasso $((g+1)) - Grupo: ${grupos[$g]} $grpext\n$(LINE)\n";
#Se o grupo nao existe, é criado.
if ! grep -wq "^${grupos[$g]}" /etc/group;then
groupadd ${grupos[$g]}
fi
pega_usuarios
done


Faça uns testes, verifique se funciona a contento....
Testei aqui, funcionou legal.
Não esqueça de,
Quando Resolvido,
Marcar como RESOLVIDO e ESCOLHER a "MELHOR RESPOSTA!" rsrsrsrs

Vai fazer o que foi proposto, os 03 passos....

#Passo: 1:
#home: /home/$usuario
#shell login: sh
#grupo: cidadaos

#Passo 2
#home: /home/ligadajustica/$usuario
#shell: bash
#grupo: ligadajustica

#passo 3
#home: /home/superamigos/$usuario
#shell: bash
#grupo: herois e ligadajustica
A logica foi feita de acordo com os passos acima
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


Pelo visto tenho muito o que estudar ainda hein hahaha, agradeço pela atenção e paciência, espero que em breve eu seja capaz de bolar um script com tantas "frescurinhas" assim (rsrs)
Afinal as férias estão ai para compensar o tempo que perdi com Windows ao longo da minha vida, novamente, obrigado pela ajuda!
All The Best








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts