Alterar senha no shadow

Publicado por Fábio Berbert de Paula 27/02/2003

[ Hits: 15.712 ]

Homepage: https://fabio.automatizando.dev

Download change_passwd.pl




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'.

  



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

Scripts recomendados

Inserindo sites em Lista do Squid

Conversão de textos UTF-8 para ISO8859-1

getter

Listar arquivos de um diretório.

move.pl


  

Comentários
[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...

[2] Comentário enviado por h4sh em 28/07/2004 - 17:24h

Fabio;

Me inspirei no seu script e fiz uma versao adaptada a um cliente :)

http://www.vivaolinux.com.br/contribuir/scripts/verFonte.php?codigo=534&arquivo=altera_tudo.pl

Diga o que achou !
flw

[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