• Publicidad

Script muy malo

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Script muy malo

Notapor securedigital » 2008-05-24 08:15 @385

Hola a todos.

Estoy intentando hacer un script para practicar Perl, se trata de un intento de backup MUY sencillo... :twisted:

Me da error :cry:
Se sugiere también alguna mejora al respecto para hacer este CacaScript más elaborado y claro... que con mi nivel pueda hacerlo... ??

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

#variable guardem parametres entrada, ex: "script.pl Usr"
$carpeta = $ARGV[0];

        if (ARGV[0] != 'Usr' || 'Adm' || 'Pub' || 'Prd'){
                printf("Valors acceptats: 'Usr','Adm', 'Pub', 'Prd' ");
        }
                       
        #       mount retorna codis de error (varis) si es 0 tot a anat be, si es un altre codi d'error algo ha anat mal
                        if ( mount -t smbfs -o username=peptio,password=1234,rw,lfs,sockopt=TCP_NODELAY //192.168.0.2/Backups /mnt/smb/ ) !=0 ) {
                                printf("Error al muntatge unitat");
                        }
        #       system retorna codis de error, si es 0 tot ha anat be, en cas contrari algun error hi ha aparegut
                        if ( system("tar -cvf /Empresa/$carpeta /mnt/smb/$carpeta/backup_${carpeta}_`date +%d%b%y`.tar") != 0 ) {
                                printf("Error al copiar el fitxer de backup al lloc remot");
                        }
                        `umount /mnt/smb`;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Saludos y gracias
securedigital
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2008-05-24 08:09 @381

Publicidad

Notapor explorer » 2008-05-24 10:06 @462

Bienvenido a los foros de Perl en Español, securedigital.

Parece que te falta algo de dominio con la sintaxis de Perl. Te aconsejo la lectura de algún Manual, Tutorial, o más sencillo, una guía de cómo empezar.

En cuanto a tu programa, hay bastantes errores de sintaxis. Es muy recomendable que, al empezar a aprender Perl, pongas
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use warnings;
use strict;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

al principio del programa, para que Perl te ayude a identificar los errores.

Una posible alternativa a lo que quieres hacer podría ser esta (no probada):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use POSIX 'strftime';
use warnings;
use strict;

# Carpetas de las que podemos hacer copia de seguridad
my %carpetas_disponibles = (
    Usr => 1,
    Adm => 1,
    Pub => 1,
    Prd => 1,
);

# Carpeta destino
my $carpeta_destino = '/mnt/smb';

# El día de hoy
my $hoy = strftime("%d%b%y",localtime);

# Leemos la entrada del usuario.
# Consiste en una o más nombres de carpetas, unidas por ','
@ARGV or die "Uso: $0 [" . join(q{,}, keys %carpetas_disponibles) . "]\n";
my $carpetas_indicadas = shift @ARGV;

# Hacemos el montaje del directorio destino
if ( system("mount -t smbfs -o username=peptio,password=1234,rw,lfs,sockopt=TCP_NODELAY //192.168.0.2/Backups $carpeta_destino") == 0 ) {

    # Recorremos todas las carpetas indicadas por el usuario
    for my $carpeta_a_copiar ( split(q{,}, $carpetas_indicadas) ) {

        # Comprobamos que esa carpeta es de las conocidas y además está montada como directorio
        if ( $carpetas_disponibles{$carpeta_a_copiar} and -d "${carpeta_destino}/${carpeta_a_copiar}" ) {

            # Hacemos la copia de los ficheros
            system("tar -cvf /Empresa/$carpeta ${carpeta_destino}/${carpeta_a_copiar}/backup_${carpeta_a_copiar}_${hoy}.tar");
        }
        else {
            print STDERR "ERROR: La carpeta $carpeta_a_copiar es desconocida para este programa o no existe como carpeta destino\n";
        }
    }

    # Desmontaje, al final de la copia de todas las carpetas
    system("umount $carpeta_destino");
}
else {
    print STDERR "ERROR: No se pudo montar $carpeta_destino\n";
}
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

Un par de críticas

Notapor creating021 » 2008-05-24 12:58 @582

Creo que hay un par de cosas que se pueden considerar:

Si ejecutas ps -aux podrás ver el código ejecutado por perl, esto es un riesgo porque se puede ver el password que está ahí

En este caso se puede usar warn que es más corto que print STDERR
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor securedigital » 2008-05-26 09:34 @440

¡Hola!

Muchas gracias, sí, he encontrado alguna línea que me costó de entender, quizás la que más fue el if que comprueba si existe el directorio. Para ello pues busqué por ahí esas funciones.

Para el tema del passsword que se vería, ¿hay alguna solución?

Gracias
securedigital
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2008-05-24 08:09 @381

Notapor creating021 » 2008-05-26 13:16 @595

Hmmm... los parámetros que ejecutas con mount se ven... si haces ps -ax después de ejecutar el script, verás los argumentos (donde está el password) que fue justamente la forma como "hackearon" un servidor en un concurso amistoso.

De pronto si usas fuse + Perl_Fuse + PAR se soluciona, pero no se... prueba y mira.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2008-05-29 16:50 @743

Ten en cuenta una cosa: el proceso de montaje dura muy poco tiempo, por lo que para pillarte la contraseña, debería ser un usuario que estuviera viendo la lista de programas en justo ese momento.
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

Notapor creating021 » 2008-05-29 16:58 @748

explorer escribiste:Ten en cuenta una cosa: el proceso de montaje dura muy poco tiempo, por lo que para pillarte la contraseña, debería ser un usuario que estuviera viendo la lista de programas en justo ese momento.


Claro, ese es un dato que se me escapó :)
Además, es bueno ponerlo con ciertos permisos para que los usuarios comunes no lo puedan leer el script (o usar pp, de PAR).
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Básico

¿Quién está conectado?

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