Adiciona-Altera senhas/usuarios no sistema
Publicado por Carlos Carvalho 28/07/2004
[ Hits: 7.575 ]
Me inspirei no script do Fabio para alterar senhas do arquivo /etc/shadow, adaptei , alterei e acrescentei diversas funcionalidades para facilitar a vida de um cliente.
Script bastante direcionado a um cliente, espero que possa lhe ser util.
#!/usr/bin/perl # Script de alteracao de senhas idealizado por Fabio de Paula (www.vivaolinux.com.br) # que adaptei as minhas necessidades. # Preservei as rotinas de alteracao no /etc/shadow e algumas checagens de erro. # Originalmente o script pede por login e senha e altera no /etc/shadow, # acrescentei a isso a inclusao do nome do usuario em um arquivo texto, os usuarios # sao criados no formato nome+numero ex: fulano0935271. Eu preciso do final # numerico desse nome de usuario, entao criei outra rotina com tr para isso. # Serve para o operador poder adicionar usuarios que realizam uma # tarefa especifica no servidor sem necessidade da intervencao do administrador. # # Autor: Fabio de Paula - HomePage <marsterdev.com.br> # Modificado por Carlos Carvalho - E-Mail <h4sh@globo.com> use strict; #Variaveis: my $DIR_lb_rem="/home/remessas/lb_rem"; my $FILE_log="/var/log/FTP_ADDUSER.log"; my $FILE_PASSWD_TMP="/tmp/passwd.tmp"; #Funcao de teste de read-write em arquivos necessarios: sub TESTE_FILES () { #Append... if (my $TEST = open (FILE, ">>$DIR_lb_rem") == 0) { print "Erro ao abrir $DIR_lb_rem, verifique as permissoes.\n"; exit(1); } #Append... if (my $LOGGING = open (FILE_LOG, ">>$FILE_log") == 0) { print "Erro ao abrir $FILE_log, virifique as permissoes.\n"; exit(1); } #Append... if (my $PASSWD_TMP_TEST = open(FILE_PASSWD_TMP, ">>/tmp/passwd.tmp") == 0) { print "Erro ao abrir $FILE_PASSWD_TMP, virifique as permissoes.\n"; exit(1); } #Leitura... if (my $PASSWD_TEST = open(FILE_PASSWD, "</etc/passwd") == 0) { print "Erro ao abrir /etc/passwd, virifique as permissoes.\n"; exit(1); } } &TESTE_FILES ; #Inicio do trecho de autoria do Fabio, #com inclusoes minhas tambem, que cria e a altera usuarios. #Rotina alterada por mim com inclusao de apenas #algumas linhas de minha autoria: my $login = shift; my $senha = shift; my $LOGIN_lb_rem=$login; $LOGIN_lb_rem =~ tr/0-9//cd; if ($LOGIN_lb_rem eq "") { print "Erro no nome de usuario!\n"; print "Use o formato nome+numero. Ex: lab001\n"; print "Pressione ENTER\n"; my $nada = <STDIN>; exit(1); } if (!$login || !$senha) { print "Informe login/senha !\nUse $0 login senha\n\n"; exit(1); } my $user_existe = `/usr/bin/id $login`; if ($? != 0) { system("/usr/sbin/adduser $login >/dev/null 2>&1"); } else { print "Usuario $login ja existe no sistema!\n"; print "Deseja continuar? (S/n)?\n"; my $continua = <STDIN>; chop $continua; sub saindo () { print "Saindo do programa...\n"; sleep(3); exit(0); } "$continua" eq "S" or &saindo ; } my $passwd = "/etc/shadow"; my $saida = `grep $login $passwd`; if ($saida !~ /[A-Z]/i) { print "Usuario inexistente !\n"; exit(1); } my $shadow = ""; open(R,$passwd); while (<R>) { if ( $_ =~ /^$login:/ ) { my ($user,$pass,$resto) = split(/:/,$saida,3); my $newpass = crypt($senha,substr $user,0,2); print "crypt($senha," . substr $user,0,2 . ")\n"; $shadow .= $user . ':' . $newpass . ':' . $resto; } else { $shadow .= $_; } } # fim while close(R); open(W,"> $passwd"); print W $shadow; close(W); #Fim da rotina de autoria do Fabio. #Insere informacoes em arquivo: print(FILE "$LOGIN_lb_rem|$senha\n"); close(FILE); # Altera /etc/passwd impedindo login via shell ao user recen-criado: open(FILE_PASSWD, "</etc/passwd"); open(FILE_PASSWD_TMP, ">passwd.tmp"); while(<FILE_PASSWD>) { if ($_ =~ /$login/) { $_ =~ s/bash/false/g; print(FILE_PASSWD_TMP "$_"); } else { print(FILE_PASSWD_TMP "$_"); } } system("/bin/cat passwd.tmp > /etc/passwd"); unlink("$FILE_PASSWD_TMP"); #Cria log: print(FILE_LOG "`date` Usuario FTP $login adicionado ao sistema\n"); close(FILE_LOG); exit(0); #EOF
Script que remove palavras de um arquivo.
Contagem de linhas em Perl (= wc -l)
FTP – Script para adicionar e remover usuários via WEB
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Wifi não funciona no Aspire ES 15 com o Debian (9)
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta