Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Script muy malo

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Sab May 24, 2008 7:15 am
securedigital
Perlero Nuevo
Perlero Nuevo
Registrado: 24 May 2008
Mensajes: 2
Script muy malo Responder citando

Hola a todos.

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

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

Perl:
#!/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`;


Saludos y gracias
Mensaje Sab May 24, 2008 9:06 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

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
Perl:
use warnings;
use strict;

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):

Perl:
#!/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";
}
Mensaje Sab May 24, 2008 11:58 am
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 487
Ubicación: Frente al monitor
Un par de críticas Responder citando

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
Mensaje Lun May 26, 2008 8:34 am
securedigital
Perlero Nuevo
Perlero Nuevo
Registrado: 24 May 2008
Mensajes: 2
Responder citando

¡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
Mensaje Lun May 26, 2008 12:16 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 487
Ubicación: Frente al monitor
Responder citando

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.
Mensaje Jue May 29, 2008 3:50 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

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.
Mensaje Jue May 29, 2008 3:58 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 487
Ubicación: Frente al monitor
Responder citando

explorer escribió:
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ó Smile
Además, es bueno ponerlo con ciertos permisos para que los usuarios comunes no lo puedan leer el script (o usar pp, de PAR).
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group