Pular para o conteúdo

Alterar senha no shadow

Script em Perl que recebe como argumentos o nome de usuário e senha, criptografa a senha e a grava no arquivo /etc/shadow. Funciona como o comando 'passwd'.
Fábio Berbert de Paula fabio
Hits: 15.811 Categoria: Perl Subcategoria: Manipulação de arquivos
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

Script em Perl que recebe como argumentos o nome de usuário e senha, criptografa a senha e a grava no arquivo /etc/shadow. Funciona como o comando 'passwd'.
Download change_passwd.pl Enviar nova versão

Esconder código-fonte

#!/usr/bin/perl

my $login = shift;
my $senha = shift;
if (!$login || !$senha) {
  print "Informe login/senha !\nUse $0 login senha\n\n";
  exit;
}

my $passwd = "/etc/shadow";
my $saida = `grep $login $passwd`;
if ($saida !~ /[A-Z]/i) {
  print "Usuário inexistente !\n";
  exit;
}

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);

Apaga fila do Exim...

Contagem de linhas em Perl (= wc -l)

Script que procura uma palavra em um arquivo.

Journaling de arquivos

Usando ARGV como login

#1 Comentário enviado por carcarah em 07/07/2004 - 14:18h
Como fazer para a função crypt() suportar mais de 8 caracteres na senha? Pergunto isso pois tentei implementá-la em um código e percebi que ela não permite que o campo senha possua mais de 8 caracteres...
#3 Comentário enviado por maucos em 11/11/2005 - 23:27h
Adaptei seu script para alterar a senha de usuários do squid via cgi, mas quando vai abrir o arquivo passwd para gravação "Permission Denied ! ".
Já até dei chmod 755 passwd, mas mesmo assim nada.
O que pode ser?
#4 Comentário enviado por lecovl em 30/05/2006 - 02:36h
Bom, fiz alguns testes com o script e a priori funcionou.
Só tem um BUG: quando ele encontra um usuário que tem parte o nome do usuário a ser localizado ele retorna este último também e vai adicionando o usuário a +

Ex:
1 linha : userteste:[AQUIASENHA]:(...)
x linha : usertestenovo:[AQUIASENHA]:(...)

SOLUÇÃO:
Na linha [[ my $saida = `grep $login $passwd`; ]] coloca dois pontos (:) após a variável $login. A linha fica assim :
[[ my $saida = `grep $login: $passwd`; ]]
#5 Comentário enviado por mendonca em 09/04/2008 - 09:27h
hello,
estou tentado alterar o previlegio de alguns usuarios apartir do shadow e
nao tenho sucesso "cd: shadow: Not a directory"
#6 Comentário enviado por felipezs em 19/06/2008 - 11:21h
na verdade o shadow é um arquivo texto, nao um diretório....
se nao me engano, fica no /etc
#7 Comentário enviado por demattos em 25/05/2010 - 08:18h
bom dia, gostei muito do script e era o que eu estava procurando , mas fiquei com um duvida em questao de seguranca, por que tive q trocar a permisao do arquivo shadow para ele alterar a senha, alguem poderia me dizer algo q possa ser feito ser esta alteracao
#8 Comentário enviado por shulander em 09/12/2011 - 18:44h
Daria pra mim deixar esse script com o root, dar chmod 777 nele e apartir de qlqr usuario adicionar outros usuarios com permição root apartir dele? Usar como uma falha na segurança ....

Contribuir com comentário

Entre na sua conta para comentar.