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

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

Notapor explorer » 2011-02-14 12:07 @546

Mi fichero /etc/sysctl.conf no sigue tu patrón, así que esa puede ser una explicación. Y el fichero sshd_config no puedo leerlo como usuario.

Por otra parte, las tres funciones son casi iguales... podrías reducir las tres funciones (y las futuras) a una sola. Solo tendrías que pasar, como argumentos,

* el nombre del fichero a analizar
* la expresión regular a aplicar
* la referencia al hash que almacena los valores correctos.

El resto de la función se deja tal cual.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5. use autodie;
  6.  
  7. use Term::ANSIColor qw(:constants);
  8.  
  9. # Valores correctos esperados
  10. my %valores_correctos_de = (
  11.  
  12.     login_defs  => {
  13.                     fichero    => '/etc/login.defs',
  14.                     patron     => qr/^ (\S+) \s+ (\S+) $/xi,
  15.                     parametros => {
  16.                                     PASS_MAX_DAYS => 99999,
  17.                                     PASS_MIN_DAYS =>     0,
  18.                                     PASS_WARN_AGE =>     7,
  19.                                   },
  20.                    },
  21.  
  22.     sysctl_conf => {
  23.                     fichero    => '/etc/sysctl.conf',
  24.                     patron     => qr/^ (\S+) \s* = \s* (\S+) $/xi,
  25.                     parametros => {
  26.                                     'net.ipv4.conf.all.rp_filter'               => 1,
  27.                                     'net.ipv4.conf.default.promote_secondaries' => 0,
  28.                                     'net.ipv4.conf.all.promote_secondaries'     => 1,
  29.                                   },
  30.                    },
  31.     sshd_config => {
  32.                     fichero    => '/etc/ssh/sshd_config',
  33.                     patron     => qr/^ (\S+) \s* (\S+) $/xi,
  34.                     parametros => {
  35.                                     X11Forwarding               => 'yes',
  36.                                     Port                        =>  2222,
  37.                                     PasswordAuthentication      =>  'no',
  38.                                   },
  39.                    },
  40. );
  41.  
  42. # Arrancamos los análisis
  43. analiza($valores_correctos_de{login_defs});
  44. analiza($valores_correctos_de{sysctl_conf});
  45. analiza($valores_correctos_de{sshd_config});
  46.  
  47. # Subrutina que analiza
  48. sub analiza {
  49.     my $hash_ref = shift;
  50.     my($fichero, $regex, $valores_correctos_ref) = @{$hash_ref}{'fichero','patron','parametros'};
  51.  
  52.     # Leemos el fichero a un hash según cómo lo indique la expresión regular
  53.     my %valor_actual_de;
  54.     open my $fh, q[<], $fichero;
  55.     while (<$fh>) {
  56.         if (/$regex/) {
  57.             $valor_actual_de{ $1 } = $2;
  58.         }
  59.     }
  60.  
  61.     close $fh;
  62.  
  63.     # Comprobamos los valores correctos
  64.     for my $parametro (sort keys %$valores_correctos_ref) {
  65.         if (exists $valor_actual_de{$parametro}) {
  66.             if ($valor_actual_de{$parametro} eq $valores_correctos_ref->{$parametro}) {
  67.                 print BOLD, GREEN, 'Positivo: ', RESET, "El valor del parametro $parametro es correcto\n";
  68.             }
  69.             else {
  70.                 print
  71.                     BOLD, RED  , 'Negativo: ', RESET,
  72.                     "El valor del parametro $parametro es incorrecto: ",
  73.                     "[$valor_actual_de{$parametro}] != [$valores_correctos_ref->{$parametro}]\n",
  74.                     ;
  75.             }
  76.         }
  77.         else {
  78.             print BOLD . 'No existe ' . RESET, "el parametro $parametro en $fichero\n";
  79.         }
  80.     }
  81. }
  82.  
  83. __END__
Coloreado en 0.004 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

Publicidad

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

Notapor situ » 2011-02-14 13:19 @596

Como siempre un lujo participar en el foro =)

Están separadas porque cada una es una llamada del menú.

Por pantalla me da los valores, el tema es que no me hace el print() al archivo externo, solamente me funciona la función "expiracionUsuarios".

Muchas 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-02-14 15:55 @705

Es posible que el fichero ARCH no esté abierto en el momento del print()...
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-02-14 17:16 @761

Es raro porque recién lo cierro al terminar de ejecutar todo el script.

Acá está el script completo.

http://code.google.com/p/checklistlinux/downloads/list

¿Me podéis ayudar? 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-02-15 10:58 @498

He probado la versión 2.5 y me funciona, salvo que falta cerrar el final del fichero recomendación (el R).

Otro problema es que si se vuelve a ejecutar el programa, no sobreescribe los ficheros html, sino que añade nuevo contenido, lo cual no es coherente con el hecho de que siempre genera una cabecera HTML. Deberían ser abiertos en modo escritura, no en modo añadir. Y agregar la hora de la ejecución en el nombre del fichero.

Y el código HTML tiene cantidad de errores... los atributos no están entrecomillados, hay caracteres ';' que sobran... el DTD no corresponde con la forma de escritura de las marcas HTML... casi mejor, quitarlo...

Por otra parte, sabiendo que en las distribuciones Perl viene incluido de base el módulo CGI, podrías aprovecharlo para generar el código HTML, y reducir tu programa a la mitad.

Y si ejecutamos el programa con los avisos activados (no desactivados, como lo tienes puesto), Perl te da más pistas:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
explorer@aprosi21:~/Documents/tmp> perl -c checklist-2.0.4.pl
Switch will be removed from the Perl core distribution in the next major release. Please install it from CPAN. It is being used at checklist-2.0.4.pl, line 29.
Variable "%uid" will not stay shared at checklist-2.0.4.pl line 273.
Variable "%gid" will not stay shared at checklist-2.0.4.pl line 275.
Name "main::defaultuser" used only once: possible typo at checklist-2.0.4.pl line 151.
Name "main::archivos" used only once: possible typo at checklist-2.0.4.pl line 177.
checklist-2.0.4.pl syntax OK
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

O sea:
* Switch es un módulo maldito, así que no hay que usarlo. Hay que usar given/when
* Las variables defaultuser y archivos no se usan nunca
* Las variables %uid y %gid están en contextos diferentes, por lo que los cambios externos en ellas no se verán en sucesivas llamadas en la función que luego las usa. En tu caso, te avisa que la función wanted3() está definida dentro de la función sinownergroup(), por lo que, de las variables %uid y %gui que referencia, y que están declaradas y definidas fuera de ella, solo usará el primer valor que tuvieran, y no los posteriores. En tu caso, no te afecta, porque la función sinownergroup() solo se llama una vez.
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-02-15 12:29 @562

Yo tengo la:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
This is perl, v5.10.1 (*) built for i686-linux-gnu-thread-multi
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¡Qué raro! Por el output por terminal me lo da. El tema es el archivo =(.

Seguiré probando.
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-03-19 00:34 @065

Consulta: ¿cómo puedo adaptarle File::stat; para comprobar si existe el archivo, si puedo leerlo antes de parsearlo?

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-03-19 07:14 @343

Para eso no es necesario usar ningún módulo.

Perl tiene una serie de operadores, los -X, que te permitan recibir información básica de ficheros y directorios. Por ejemplo:

say 'Es legible' if -r $fichero;
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-03-19 10:48 @491

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

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

Notapor situ » 2014-07-11 08:54 @413

¿Existe la posibilidad de poder listar el contenido de una variable pero que no sea analizada? Solamente quiero ver su valor o en el caso que no esté que me lo informe.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

AnteriorSiguiente

Volver a Administración

¿Quién está conectado?

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