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

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



Muchas gracias por tu gran respuesta, Francisco
Aunque, no me acaba de quedar claro algo...

El 10/02/14 09:20, Francisco SG escribió:
...
> En la máquina que realiza el backup habrás definido una "conexión ssh"
>  con root que usa una clave que se usa exclusivamente para eso asociada
> con el host remoto.

Correcto!

> En el host remoto la conexión está limitada para realizar exclusivamente
> el backup del modo que comentas:
> PermitRootLogin forced-commands-only

Exacto!

> Y en el authorized_keys lo que defino junto a la clave es lo siguiente:
> from="xxxxxxxxxxx",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/usr/local/bin/valida-rsync.sh"
> ssh-dss...

Bueno, no puedo especificar con el "from=xxx" ya que sería una IP
dinámica, pero por lo demas...

> El "truquito" viene de http://troy.jdmz.net/rsync/#validate-rsync se
> trata de un script que hace de wrap para rsync validando la conexión,
> pero hace no mucho descubrí que el propio paquete de rsync trae un
> script en perl con el mismo fin, que es más flexible y que está
> instalado en /usr/share/doc/rsync/scripts/rrsync.gz y puedes usar de un
> modo muy similar, por ejemplo:
> 
> 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 ...

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?


#!/usr/bin/perl
# Name: /usr/local/bin/rrsync (should also have a symlink in /usr/bin)
# Purpose: Restricts rsync to subdirectory declared in .ssh/authorized_keys
# Author: Joe Smith <js-cgi@inwap.com> 30-Sep-2004
# Modified by: Wayne Davison <wayned@samba.org>
use strict;
...

# 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+//;
...
our $short_no_arg = 'ACDEHIKLORSWXbcdgklmnoprstuvxz'; # DO NOT REMOVE ANY
our $short_with_num = 'B'; # DO NOT REMOVE ANY

# To disable a long-named option, change its value to a -1.  The values
mean:
# 0 = the option has no arg; 1 = the arg doesn't need any checking; 2 = only
# check the arg when receiving; and 3 = always check the arg.
our %long_opt = (
  'append' => 0,
  'backup-dir' => 2,
  'bwlimit' => 1,
  'checksum-seed' => 1,
  'compare-dest' => 2,
  'compress-level' => 1,
  'copy-dest' => 2,
  'copy-unsafe-links' => 0,
  'daemon' => -1,
  'delay-updates' => 0,
  'delete' => 0,
  'delete-after' => 0,
  'delete-before' => 0,
  'delete-delay' => 0,
  'delete-during' => 0,
  'delete-excluded' => 0,
  'existing' => 0,
  'fake-super' => 0,
  'files-from' => 3,
  'force' => 0,
  'from0' => 0,
  'fuzzy' => 0,
  'iconv' => 1,
  'ignore-errors' => 0,
  'ignore-existing' => 0,
  'inplace' => 0,
  'link-dest' => 2,
  'list-only' => 0,
  'log-file' => 3,
  'log-format' => 1,
  'max-delete' => 1,
  'max-size' => 1,
  'min-size' => 1,
  'modify-window' => 1,
  'no-i-r' => 0,
  'no-implied-dirs' => 0,
  'no-r' => 0,
  'no-relative' => 0,
  'no-specials' => 0,
  'numeric-ids' => 0,
  'only-write-batch' => 1,
  'partial' => 0,
  'partial-dir' => 2,
  'remove-sent-files' => $ro ? -1 : 0,
  'remove-source-files' => $ro ? -1 : 0,
  'safe-links' => 0,
  'sender' => 0,
  'server' => 0,
  'size-only' => 0,
  'skip-compress' => 1,
  'specials' => 0,
  'suffix' => 1,
  'super' => 0,
  'temp-dir' => 2,
  'timeout' => 1,
  'use-qsort' => 0,
);
...


Un saludo,






> El 9 de febrero de 2014, 18:47, Alberto <alberto@bersol.info
> <mailto:alberto@bersol.info>> escribió:
> 
>     Hola,
>     estoy teniendo problemas para algo que creo recordar que ya hice en el
>     pasado, pero ahora, no se porque, no corre.
> 
>     El objetivo es hacer backup de un host remoto sobre uno local. La idea
>     es hacerlo a traves de RSYNC por SSH.
> 
>     Lo hago con un script cuya orden es la siguiente:
> 
>     HostLocal# rsync -avuz -e ssh --log-file=$vFilelog --progress --append
>     --partial --delete --exclude-from=$vFilexclude_remoto HostRemoto:/
>     ${vPmbackup}/mnt/REMOTO/
> 
>     El acceso SSH al host remoto no está permitido a root, por razones
>     obvias, pero para hacer la copia total, por supuesto de forma NO
>     Interactiva, lo hago a traves de clave pública, y limito el acceso por
>     configuración de SSH al comando concreto con la directiva...
> 
>     [root@remoto]# grep forced-commands-only /etc/ssh/sshd_config
>     PermitRootLogin forced-commands-only
> 
>     Y para utilizarlo, debo especificarlo en el "authorized_keys" de root (
> 
>     [root@vps .ssh]# cat authorized_keys
>     command="rsync" ssh-dss
>     ????????????????????????????????????????????????????????????????????
>     ????????????????????????????????????????????????????????????????????
>     ????????????????????????????????????????????????????????????????????
>     ????????????? root@HostLocal
> 
>     el problema es que hay que meterle la linea completa (parametros
>     incluidos) en el "authorized_keys" ya que solo va a aceptar lo que este
>     ahi, por tanto
>     todos los parametros no los reconoce.
> 
>     Logicamente, no puedo meter todos los parametros, o sea, la linea
>     completa. Como podeis ver, hay algunos que son variables, en base a la
>     fecha de la copia y demas, con lo que no tengo forma de meterle la linea
>     entera, y por tanto, el comando rsync falla.
> 
>     Acepto sugerencias.
> 
>     Gracias,
>     un saludo,
> 
> 
> 
>     --
>     To UNSUBSCRIBE, email to
>     debian-user-spanish-REQUEST@lists.debian.org
>     <mailto:debian-user-spanish-REQUEST@lists.debian.org>
>     with a subject of "unsubscribe". Trouble? Contact
>     listmaster@lists.debian.org <mailto:listmaster@lists.debian.org>
>     Archive: [🔎] 52F7BF16.4050406@bersol.info">http://lists.debian.org/[🔎] 52F7BF16.4050406@bersol.info
> 
> 


Reply to: