[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Rsync sobre SSH (forced-commands-only)



El 11/02/14 09:41, Francisco SG escribió:
...

> Vamos con el wrap.
> 
>>>
>>> from="xxxxxxxxxxx",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/usr/local/bin/rrsync
>>> -ro proyectos" ssh-rsa...
>> ...
>>
>> El parametro en "~/.ssh/authorized_keys" seria...
>>
>> command="/usr/local/bin/rrsync -ro /" ssh-dss ...
>>
> 
> Exactamente, permites sólo lectura y limitas... a la raíz, bueno, en
> este caso no tiene sentido ;-), pero en otras ocasiones resulta muy
> útil.
> 
>> Yo no capisco nada de Perl (si al menos fuera Python...). Tengo que
>> definir la variable SSH_ORIGINAL_COMMAND?
>> y supongo que los parametros tambien, no?
> 
> Oh cielos! hay que mantener un poco el espíritu perlero ;-) soy el
> caso opuesto, pero hay que poner remedio a eso :-). No, la variable
> SSH_ORIGINAL_COMMAND es lo que pasa el servidor ssh al comando
> "forzado", si ves el sh que te puse verás que es lo que usa para el
> "case" y lo que ejecuta si está permitido.

Joer, esto si que es raro, ahora entiendo porque aquel amigo dejó la
informatica...

ayer cuando lei tu mensaje, probe tal cual me explicas y no iba
hoy, sin hacer nada, a la primera...

en fin
Lo dicho, muchas gracias Francisco

Por cierto, al final tiro del script de Perl ;-)

> 
> Un ejemplo sencillito:
> #!/bin/sh
> case "$SSH_ORIGINAL_COMMAND" in
>     "ls*")
>         $SSH_ORIGINAL_COMMAND
>         ;;
>     "free*")
>         free -m
>         ;;
>     *)
>         echo "Sólo puedes ejecutar ls y free"
>         exit 1
>         ;;
> esac
> 
> 
> 
> (...)
> 
>>
>> # The client uses "rsync -av -e ssh src/ server:dir/", and sshd on the
>> server
>> # executes this program when .ssh/authorized_keys has 'command="..."'.
>> # For example:
>> # command="rrsync logs/client" ssh-rsa
>> AAAAB3NzaC1yc2EAAAABIwAAAIEAzGhEeNlPr...
>> # command="rrsync -ro results" ssh-rsa
>> AAAAB3NzaC1yc2EAAAABIwAAAIEAmkHG1WCjC...
>> #
>> # Format of the envrionment variables set by sshd:
>> # SSH_ORIGINAL_COMMAND=rsync --server          -vlogDtpr --partial . ARG
>> # push
>> # SSH_ORIGINAL_COMMAND=rsync --server --sender -vlogDtpr --partial .
>> ARGS # pull
>> # SSH_CONNECTION=client_addr client_port server_port
>>
>> my $command = $ENV{SSH_ORIGINAL_COMMAND};
>> die "$0: Not invoked via sshd\n$Usage"  unless defined $command;
>> die "$0: SSH_ORIGINAL_COMMAND='$command' is not rsync\n" unless $command =~ s/^rsync\s+//;
> 
> Aquí lo tienes, sólo permitirá la ejecución de rsync, luego vienen las
> definiciones de los parámetros que puedes permitir si quieres afinar
> más y al principio en la definición de constantes tienes el archivo de
> log y ubicación del rsync (ahora hablo de memoria :-().
> 
> En todo caso, si no te sientes cómodo con Perl y puesto que vas a
> hacer un backup desde la raíz del sistema, el shell script cuya
> dirección te pase parece suficiente, vas a limitar la ejecución al
> comando en cuestión y puedes ir ajustando mientras pruebas los
> parámetros, en el perl en el fondo es lo mismo, habilitar los
> parámetros que quieres permitir y logar en un archivo la ejecución.
> 
> Espero que te sirva de ayuda. Si tienes problemas ya sabes.
> 
>>
>>
>> Un saludo,
>>
>>
>>
> 
> Un saludo
> 
> 
> 
> 
>>
> 
> 


Reply to: