Re: Análisis del archivo /etc/login.defs
Publicado: 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.
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.
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use strict;
- use warnings;
- use diagnostics;
- use autodie;
- use Term::ANSIColor qw(:constants);
- # Valores correctos esperados
- my %valores_correctos_de = (
- login_defs => {
- fichero => '/etc/login.defs',
- patron => qr/^ (\S+) \s+ (\S+) $/xi,
- parametros => {
- PASS_MAX_DAYS => 99999,
- PASS_MIN_DAYS => 0,
- PASS_WARN_AGE => 7,
- },
- },
- sysctl_conf => {
- fichero => '/etc/sysctl.conf',
- patron => qr/^ (\S+) \s* = \s* (\S+) $/xi,
- parametros => {
- 'net.ipv4.conf.all.rp_filter' => 1,
- 'net.ipv4.conf.default.promote_secondaries' => 0,
- 'net.ipv4.conf.all.promote_secondaries' => 1,
- },
- },
- sshd_config => {
- fichero => '/etc/ssh/sshd_config',
- patron => qr/^ (\S+) \s* (\S+) $/xi,
- parametros => {
- X11Forwarding => 'yes',
- Port => 2222,
- PasswordAuthentication => 'no',
- },
- },
- );
- # Arrancamos los análisis
- analiza($valores_correctos_de{login_defs});
- analiza($valores_correctos_de{sysctl_conf});
- analiza($valores_correctos_de{sshd_config});
- # Subrutina que analiza
- sub analiza {
- my $hash_ref = shift;
- my($fichero, $regex, $valores_correctos_ref) = @{$hash_ref}{'fichero','patron','parametros'};
- # Leemos el fichero a un hash según cómo lo indique la expresión regular
- my %valor_actual_de;
- open my $fh, q[<], $fichero;
- while (<$fh>) {
- if (/$regex/) {
- $valor_actual_de{ $1 } = $2;
- }
- }
- close $fh;
- # Comprobamos los valores correctos
- for my $parametro (sort keys %$valores_correctos_ref) {
- if (exists $valor_actual_de{$parametro}) {
- if ($valor_actual_de{$parametro} eq $valores_correctos_ref->{$parametro}) {
- print BOLD, GREEN, 'Positivo: ', RESET, "El valor del parametro $parametro es correcto\n";
- }
- else {
- print
- BOLD, RED , 'Negativo: ', RESET,
- "El valor del parametro $parametro es incorrecto: ",
- "[$valor_actual_de{$parametro}] != [$valores_correctos_ref->{$parametro}]\n",
- ;
- }
- }
- else {
- print BOLD . 'No existe ' . RESET, "el parametro $parametro en $fichero\n";
- }
- }
- }
- __END__
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4