• Publicidad

Análisis del archivo /etc/login.defs

¿Eres administrador de sistemas? Este foro es para todos aquellos temas relacionados con el uso de Perl para administración de sistemas.

Análisis del archivo /etc/login.defs

Notapor situ » 2011-01-25 20:02 @876

Les molesto nuevamente porque hice un script y la verdad que no me resulta muy competente. Por este motivo quería consultarles si pueden darme una mano.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use Term::ANSIColor qw(:constants);
  3. print"----------------------------------------------------------------------------------------------------------------\n";
  4. $comando2 = (split " ",( qx(grep ^PASS_MAX_DAY /etc/login.defs))[0] )[1];
  5. chomp $comando2;
  6. if ("$comando2" != 90) {
  7.  
  8.    print BOLD, RED, "Negativo:", RESET . " El valor del parametro PASS_MAX_DAYS es incorrecto\n";  
  9.  
  10.    }
  11.  
  12.     else{
  13.  
  14.         print  BOLD, GREEN, "Positivo:", RESET . " El valor del parametro PASS_MAX_DAYS es correcto\n";
  15.  
  16.           }
  17.  
  18. $comando3 = (split " ",( qx(grep ^PASS_MIN_DAYS /etc/login.defs))[0] )[1];
  19.  
  20. chomp $comando3;
  21. if ("$comando3" != 7) {
  22.    print BOLD, RED, "Negativo:", RESET . " El valor del parametro PASS_MIN_DAYS es incorrecto\n";  
  23.  
  24.    }
  25.  
  26.     else{
  27.  
  28.         print  BOLD, GREEN, "Positivo:", RESET . " El valor del parametro PASS_MIN_DAYS es correcto\n";
  29.           }      
  30.  
  31. $comando4 = (split " ",( qx(grep ^PASS_WARN_AGE /etc/login.defs))[0] )[1];
  32. chomp $comando4;
  33. if ("$comando4" != 28) {
  34.    print BOLD, RED, "Negativo:", RESET . " El valor del parametro PASS_WARN_AGE es incorrecto\n";
  35.    
  36.    }
  37.    else{
  38.         print  BOLD, GREEN, "Positivo:", RESET . " El valor del parametro PASS_WARN_AGE es correcto\n";
  39.  
  40.           }
  41.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Gracias.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Publicidad

Re: Análisis del archivo /etc/login.defs

Notapor explorer » 2011-01-25 21:00 @916

Pues sí... sería mejor leer el fichero una sola vez, no usar el comando grep del sistema (Perl ya tiene uno), hacer una subrutina para no escribir tantas veces lo del BOLD, RESET, RED y GREEN, alguna comilla sobra...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Análisis del archivo /etc/login.defs

Notapor situ » 2011-01-25 21:02 @918

Voy a probar entonces en usar el módulo grep() de Perl.

Gracias.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Análisis del archivo /etc/login.defs

Notapor explorer » 2011-01-26 12:35 @566

Esta es mi versión, usando una expresión regular (queda un poco más compacto).
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #
  3. # Análisis del fichero /etc/login.defs
  4. #
  5. # Joaquín Ferrero, 20110126
  6. #
  7. use common::sense;
  8. use autodie;
  9.  
  10. use Term::ANSIColor qw(:constants);
  11.  
  12. use open ':locale';
  13.  
  14. say( '-' x 112 );
  15.  
  16. my $FICHERO = '/etc/login.defs';
  17.  
  18. my $login_defs = do { undef $/; open F, $FICHERO; <F> };
  19.  
  20. my %valor_correcto_de = (
  21.     PASS_MAX_DAYS => 90,
  22.     PASS_MIN_DAYS =>  7,
  23.     PASS_WARN_AGE => 28,
  24.     ZZZ_PARAMETRO => 1,
  25. );
  26.  
  27. for my $parámetro (sort keys %valor_correcto_de) {
  28.  
  29.     if (my($valor_actual) = $login_defs =~ /^ $parámetro \s+ (\S+?) $/xsim) {
  30.  
  31.         if ($valor_actual == $valor_correcto_de{$parámetro}) {
  32.             say BOLD, GREEN, 'Positivo: ', RESET, "El valor del parámetro $parámetro es correcto";
  33.         }
  34.         else {
  35.             say BOLD, RED  , 'Negativo: ', RESET, "El valor del parámetro $parámetro es incorrecto: ",
  36.                 "$valor_actual != $valor_correcto_de{$parámetro}";
  37.         }
  38.     }
  39.     else {
  40.         say BOLD . 'No existe ' . RESET, "el parámetro $parámetro en $FICHERO";
  41.     }
  42. }
  43.  
  44. say( '-' x 112 );
  45.  
  46. __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Análisis del archivo /etc/login.defs

Notapor situ » 2011-01-26 13:11 @591

Voy a probarlo, muchísimas gracias.
Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Análisis del archivo /etc/login.defs

Notapor situ » 2011-01-27 18:32 @814

Te hago una consulta: guardé la variable en un archivo aparte y lo importe con "do", pero ahora no me funciona.

El archivo tiene lo siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %valor_correcto_de = (
    PASS_MAX_DAYS => 90,
    PASS_MIN_DAYS =>  7,
    PASS_WARN_AGE => 28,
);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Si le saco el "my" o le agrego "our" tampoco me anda. Perdón, pero no logro saber cómo es. Con variables que no son hash me anda perfecto.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Análisis del archivo /etc/login.defs

Notapor explorer » 2011-01-27 18:59 @832

El error está en el my(). Este operador declara (e inicializa) variables en el contexto donde está, así que entonces, la variable hash no será conocida en el programa principal.

Bueno, además, yo suelo usar casi siempre los strict y warnings activados, así que saldrán avisos en pantalla si el programa ve que uso el hash sin haberlo declarado...

Así que hay que hacer cambios en los códigos.

En el programa principal, antes del do(), hago un
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. our %valor_correcto_de;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


que declara a esa variable como global a todo el fichero donde se encuentre. Ahora Perl ya sabe que existe y que puedo usarla en el resto del programa.

Y en el fichero a importar con do():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. %valor_correcto_de = (
  2.     PASS_MAX_DAYS => 90,
  3.     PASS_MIN_DAYS =>  7,
  4.     PASS_WARN_AGE => 28,
  5.     ZZZ_PARAMETRO => 1,
  6. );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Es decir: declaro e inicializo una variable global (no hay my() ni our(), pero como tampoco hay warnings ni strict, así perl no se queja). do() carga el código y se lo pasa al analizador de expresiones de Perl, que lo interpretará. Como ya conoce, de antes, a la variable hash, pues...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Análisis del archivo /etc/login.defs

Notapor situ » 2011-01-27 19:03 @835

Muchas gracias; como siempre me salvas =)
Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Análisis del archivo /etc/login.defs

Notapor situ » 2011-01-31 14:30 @645

Te hago una consulta desde mi ignorancia.

Estoy parseando con tu script el archivo /etc/ssh/sshd_config, donde seteo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. %valor_correcto_ssh = (
  2.     Protocol => 2,
  3.     PermitRootLogin => no,
  4. );
  5.  
  6.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y como regex:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     if (my($valor_actual_ssh) = $var_ssh =~ /^ $parametro3 \s+ (\S+?) $/xsim) {
  2.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El tema es que si lo uso así no me entrega datos y si quiero ver la info de los otros parseos que tengo, tampoco obtengo info. No sé si me explico bien.

Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Análisis del archivo /etc/login.defs

Notapor explorer » 2011-01-31 14:44 @655

Yo no veo problemas en ese código...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Administración

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados