Sab May 24, 2008 7:15 am
|
|
|
| Script muy malo |
|
|
Hola a todos.
Estoy intentando hacer un script para practicar Perl, se trata de un intento de backup MUY sencillo...
Me da error
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 |
|
|
|

Sab May 24, 2008 9:06 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
|
|
|
|
|
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
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";
} |
|
|

Sab May 24, 2008 11:58 am
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 481
Ubicación: Frente al monitor
|
|
| Un par de críticas |
|
|
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 |
|
Lun May 26, 2008 8:34 am
|
|
|
|
|
|
¡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 |
|
Lun May 26, 2008 12:16 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 481
Ubicación: Frente al monitor
|
|
|
|
|
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. |
|
Jue May 29, 2008 3:50 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
|
|
|
|
|
| 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. |
|
Jue May 29, 2008 3:58 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 481
Ubicación: Frente al monitor
|
|
|
|
|
| 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ó
Además, es bueno ponerlo con ciertos permisos para que los usuarios comunes no lo puedan leer el script (o usar pp, de PAR). |
|
Powered by phpBB © 2001, 2005 phpBB Group
|