Adiciona-Altera senhas/usuarios no sistema
Publicado por Carlos Carvalho 28/07/2004
[ Hits: 7.832 ]
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.
Script para adicionar sites ao Squid
script para localizar conteudo de arquivo
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Linux é a solução para o fim do Windows10? (3)
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (0)
Programa fora de escala na tela do pc (29)









