#!/usr/bin/suidperl -U # ####### alter_pwd.cgi ####### # ------------------------------ # Desenvolvido por Cau Guanabara # em 24 de setembro de 2003. # copyleft © 2003 Cau Guanabara # Licença: GNU-GPL # Contato: caugb@netflash.com.br # ------------------------------ # # Script para modificar valores no arquivo passwd do linux. # --------------------------------------------------------- # Pode-se mudar o ID do usuário ou do grupo, # o nome, a pasta home e o shell do usuário. # # >> Este script aceita parâmetros via GET ou POST. # ------------------------------------------------- # Mande por GET os parâmetros 'user', 'param' e 'value', assim: # .../alter_pwd.cgi?user=username¶m=shell&value=/sbin/nologin # ou chame o script sem enviar parâmetros e use o # formulário (via POST) que ele mostrará. # # Para usar: # ---------- # Como este script grava em um arquivo administrativo do linux, # precisamos rodá-lo com permissões de root. # Para isso salve o arquivo na sua pasta cgi-bin e execute: # chmod 755 alter_pwd.cgi # chown root.root alter_pwd.cgi # chmod a+s alter_pwd.cgi # ####### ###### ###### ####### use CGI qw(param()); use strict; print "Content-type: text/html\n\n"; print qq! Alterar parâmetros do usuário !; my $in = ""; my $file = "/etc/passwd"; if(param("user") && param("param") && param("value")) { &troca(param("user"),param("param"),param("value")); } else { &form(); } sub form { print qq! Alterar parâmetros do usuário no passwd

Login:
parâmetro
Novo valor:
!; exit; } sub troca { my $usuario = $_[0]; my $par = $_[1]; my $val = $_[2]; print "Modificando parâmetro para o usuário '$usuario'
\n"; my $saida = `grep ^$usuario: $file`; if ($saida !~ /[A-Z]/i) { print "O usuário '$usuario' não existe no sistema!
\n"; print ""; exit; } if($par ne "uid" && $par ne "gid" && $par ne "name" && $par ne "home" && $par ne "shell") { print "O parâmetro '$par' não foi reconhecido...
\n"; print ""; exit; } open(R,$file); while () { if ($_ =~ /^$usuario:/) { my @parts = split(/:/,$_); if($par eq 'uid') { $parts[2] = $val; } if($par eq 'gid') { $parts[3] = $val; } if($par eq 'name') { $parts[4] = $val; } if($par eq 'home') { $parts[5] = $val; } if($par eq 'shell') { $parts[6] = $val; } $in .= join(":",@parts); } else { $in .= $_; } } close(R); open(W,"> $file"); print W $in; close(W); my $test = `grep ^$usuario: $file`; if ($test !~ /^$usuario:.*$val.*$/) { print "O parâmetro '$par' não foi modificado, houve um erro...
\n"; } else { print "O parâmetro '$par' foi modificado para '$val' com sucesso.
\n"; } print "
"; &form(); } print ""; exit;