Autor Tópico: script em bash para criar usuários apartir de um txt  (Lida 16312 vezes)

Offline yusukibr

  • Usuário Ubuntu
  • *
  • Mensagens: 5
    • Ver perfil
script em bash para criar usuários apartir de um txt
« Online: 27 de Setembro de 2013, 16:26 »
Boa tarde galera, alguém pode me ajudar nesta tarefa, pois to meio enrolado em agrupar todas essas necessidades em um script

Desenvolver um script que leia um arquivo, onde seus campos estão separados por ponto e vírgula. E a partir deste arquivo criar os usuários no sistema Linux.

Deverá ser criado um diretório de entrada associado ao usuário e o interpretador de comando de cada usuário dever ser o bash. (ex: trabalho.sh)

A senha para o usuário deve ser gerada automaticamente, baseado em dados aleatórios.
Somente 8 dígitos.

Linha que eu fiz para gerar senha automática, mais acho que tem algo mais

•   senha=$RANDOM|md5sum; head –c8 echo (cria senha com 8 digitos e armazena na variável senha)
•   mkpasswd$senha (pega a variável senha e transforma para o código que é interpretado pelo sistema do Linux)



O usuário deverá ter que trocar a senha após entrar no sistema, o comando abaixo permite aplicar essa política.

chage -d 0 <nome do usuário> (para que a senha seja trocada no primeiro login)

Estrutura do arquivo:
---------------------------
NOME;EMAIL;
joão;joão@yahoo.com.br

Após a criação do usuário deve ser criado um arquivo com o “nome do usuário.txt”. Neste arquivo deve conter as informações nome do usuário, email e senha que foi criada aleatoriamente.

As permissões dos arquivos criados na descrição acima devem possibilitar somente acesso para o usuário root.

Caso o script tente adicionar usuários que já existem no sistema deve ser criado uma lista com os nomes destes usuários. O Script não deve parar por conta dessa situação.

O arquivo contendo a lista de usuários que serão criados no sistema, deve ser passado como um parâmetro para o Script.

Exemplo: # incluirusuarios.sh listausuarios.txt


A lista com os usuários a serem incluídos eu já gerei (listausuarios.txt) nos parâmetros que o problema pede.

Offline Felix

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 3.068
    • Ver perfil
    • Alexsandro Felix
Re: script em bash para criar usuários apartir de um txt
« Resposta #1 Online: 27 de Setembro de 2013, 17:14 »
Ok... e o que você fez até agora deste script? Compartilhe o código que podemos ir auxiliando...

Offline yusukibr

  • Usuário Ubuntu
  • *
  • Mensagens: 5
    • Ver perfil
Re: script em bash para criar usuários apartir de um txt
« Resposta #2 Online: 28 de Setembro de 2013, 08:09 »
Ok... e o que você fez até agora deste script? Compartilhe o código que podemos ir auxiliando...

Não tenho o script completo, eu tenho alguns comandos para criar o usuário, mais como o problema não pede que se criei a partir da digitação de usuário e e-mail então esse código não serve muito, pois ele quer que seja criado a partir de um arquivo txt que já contenha os nomes e e-mails como no exemplo, o que tenho aqui pede para que o usuário insira o nome e depois o e-mail, essas linhas de gerar senha acima também tenho que coloca-las no código só não sei como vou criar uma linha apontando par ao arquivo .txt para criar os usuários e por tudo isso em um só script, sei que se eu ficar pesquisando vou encontrar, mais to sem tempo por causa do meu tcc e mais outros 4 trabalhos que tenho de aprontar, então queria saber se alguém com experiência poderia me ajudar a terminar com esses parâmetros que já tenho:

declare TEMPLATE='/etc/skel'
declare DEFINE_SENHA='/usr/bin/passwd'

read -p "Digite o nome do usuário:" USUARIO
read -p "Digite o e-mail do usuário:" EMAIL

useradd --create-home --shell "$SHELL" --user-group --skel "$TEMPLATE" --comment "$EMAIL" "$USUARIO"

$DEFINE_SENHA $USUARIO

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: script em bash para criar usuários apartir de um txt
« Resposta #3 Online: 28 de Setembro de 2013, 09:38 »
Se você realmente entender o problema, vai conseguir mostrar algo que faz sentido em pouquíssimo tempo, e ai podemos ajudar nos detalhes que realmente demandariam um conhecimento (estudo) da linguagem.

Offline yusukibr

  • Usuário Ubuntu
  • *
  • Mensagens: 5
    • Ver perfil
Re: script em bash para criar usuários apartir de um txt
« Resposta #4 Online: 28 de Setembro de 2013, 13:15 »
Se você realmente entender o problema, vai conseguir mostrar algo que faz sentido em pouquíssimo tempo, e ai podemos ajudar nos detalhes que realmente demandariam um conhecimento (estudo) da linguagem.

Vlw  amigo obrigado pelos esclarecimentos, agora já da pra eu terminar o script, esse fórum é 10.

Offline selvaking

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 1.172
  • Parque Anchieta - Rio de Janeiro - RJ
    • Ver perfil
Re: script em bash para criar usuários apartir de um txt
« Resposta #5 Online: 28 de Setembro de 2013, 19:00 »
Rascunho inicial da sua idéia.
O arquivo ~/bin/nomes.txt é uma lista naquele padrão que vc falou.
Código: [Selecionar]
#!/bin/bash
for a in $(cat ~/bin/nomes.txt) ; do
# adduser ${a%%;*} 2> /dev/null
echo ${a%%;*}
#echo $a
done

Nova edição pra usar o while como citado pelo companheiro abaixo.
Código: [Selecionar]
#!/bin/bash
while read a
do
# adduser  ${a%%;*} 2> /dev/null
echo ${a%%;*}
#echo $a
done < ~/bin/nomes.txt
« Última modificação: 29 de Setembro de 2013, 19:41 por selvaking »
Dê-me um computador com o Tux que movo o mundo!

Linux User #323049

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: script em bash para criar usuários apartir de um txt
« Resposta #6 Online: 29 de Setembro de 2013, 09:12 »
Esse seria o ponto, que só conhecendo a linguagem... o ideal é um while com o read como condição, nada de cat em um for.

---
Explicação: http://mywiki.wooledge.org/DontReadLinesWithFor
« Última modificação: 29 de Setembro de 2013, 11:34 por irtigor »

Offline yusukibr

  • Usuário Ubuntu
  • *
  • Mensagens: 5
    • Ver perfil
Re: script em bash para criar usuários apartir de um txt
« Resposta #7 Online: 07 de Outubro de 2013, 15:09 »
Fiz assim para criar usuário com o e-mail do arquivo usuario.txt e depois gerar uma senha aleatória, só que falta fazer com que ele gere um txt por usuário, com o nome e-mail e senha gerada, que compare o usuário com outro do sistema, e se houver mesmo nome que gere isso em um relatório no txt, também deve fazer com q no primeiro login de cada um, seja solicitada troca de senha.

#! /bin/bash

while read usuario email senha

do

useradd --create-home --shell "$SHELL" --user-group ${usuario%%;*} ${email%%;*} 2> /dev/null

senha=$RADOM|md5sum; head -c8


echo ${usuario%%;*} ${email%%;*}

echo $usuario $email $senha >> $usuario.txt


done < ~/listausuarios.txt


Rascunho inicial da sua idéia.
O arquivo ~/bin/nomes.txt é uma lista naquele padrão que vc falou.
Código: [Selecionar]
#!/bin/bash
for a in $(cat ~/bin/nomes.txt) ; do
# adduser ${a%%;*} 2> /dev/null
echo ${a%%;*}
#echo $a
done

Nova edição pra usar o while como citado pelo companheiro abaixo.
Código: [Selecionar]
#!/bin/bash
while read a
do
# adduser  ${a%%;*} 2> /dev/null
echo ${a%%;*}
#echo $a
done < ~/bin/nomes.txt

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: script em bash para criar usuários apartir de um txt
« Resposta #8 Online: 07 de Outubro de 2013, 17:12 »
Testou isso ai? Porque pelo que vejo, não deve funcionar. Pra leitura seria algo como

Código: [Selecionar]
while IFS=';' read -r usuario email; do
    # faça alguma coisa.
done < "$1"

Pro que falta:

http://www.cyberciti.biz/faq/rhel-debian-force-users-to-change-passwords/
http://wiki.bash-hackers.org/scripting/posparams
http://wiki.bash-hackers.org/syntax/redirection

Offline selvaking

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 1.172
  • Parque Anchieta - Rio de Janeiro - RJ
    • Ver perfil
Re: script em bash para criar usuários apartir de um txt
« Resposta #9 Online: 07 de Outubro de 2013, 19:57 »
Testou isso ai? Porque pelo que vejo, não deve funcionar. Pra leitura seria algo como

Se a pergunta foi feita pra mim. Testei sim! Não sei se tá 100 por cento a prova de falha, mas rodou!
Dê-me um computador com o Tux que movo o mundo!

Linux User #323049

Offline yusukibr

  • Usuário Ubuntu
  • *
  • Mensagens: 5
    • Ver perfil
Re: script em bash para criar usuários apartir de um txt
« Resposta #10 Online: 08 de Outubro de 2013, 10:33 »
Ai pessoal vê ficou legal ai, só ta faltando a parte de gerar um arquivo txt como relatório de nomes já existentes e pedir q o usuário troque a senha no primeiro login, e também alterar o arquivo txt de cada usuario (chmod) para q só o root possa ter acesso.

#!/bin/bash



declare SHELL=" /bin/bash"

declare TEMPLATE=" /etc/skel"



declare SENHATEMP

declare SENHA



function guarda_info(){
 
  echo "Usuario: $usuario" >> $usuario.txt
  
  echo "Senha: $SENHATEMP" >> $usuario.txt

}






while  IFS=\; read usuario email

do
 
 SENHATEMP=$(echo $RANDOM | md5sum | head -c8)
 
 SENHA=$(mkpasswd $SENHATEMP)
 
 useradd --create-home --user-group --skel $TEMPLATE --shell $SHELL --password $SENHA --comment $email $usuario
 
 guarda_info

done <usuarios.txt
 

Testou isso ai? Porque pelo que vejo, não deve funcionar. Pra leitura seria algo como

Se a pergunta foi feita pra mim. Testei sim! Não sei se tá 100 por cento a prova de falha, mas rodou!
« Última modificação: 08 de Outubro de 2013, 10:36 por yusukibr »

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: script em bash para criar usuários apartir de um txt
« Resposta #11 Online: 08 de Outubro de 2013, 12:54 »
Exit status:

http://linux.die.net/man/8/useradd
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals

Fora isso, o único assunto não abordado foi o uso do chmod, que é bem trivial (com um zilhão de explicações por ai), mas qualquer coisa, diga-nos qual é a sua dúvida.