At Mon, 5 Dec 2011 12:24:23 +0400,
Victor Wagner wrote:
> 
> Народ, а посоветуйте как попараноидальнее организовать unattended backup
> по rsync over ssh (на самом деле, rsnapshot, конечно).
> 
> Что бы такое написать в /root/.ssh/authorized_keys, чтобы минимизировать
> последствия в случае утечки секретного ключа с той машины, которая
> инициирует бэкап?
> 
> Пока что мне пришло в голову только
> 
> command="/usr/local/sbin/rsynconly" ssh-dsa ....
> 
> где /usr/local/sbin/rsynconly имеет вид
> 
> #!/bin/sh
> PATH=""
> export $PATH
> case "$SSH_ORIGINAL_COMMAND" in
> *;*)
>       echo "Go away, you yellow earthworm!"
>       exit 1;
>       ;;
> rsync\ *)
>       /usr/bin/$SSH_ORIGINAL_COMMAND
>       ;;
> *) 
>       echo "Go away, you yellow earthworm!"
>       exit 1;
>       ;;
> esac
> 
> Но что-то мою паранойю это не удовлетворяет. Ну во-первых, input
> sanitizing явно недостаточный. Во-вторых, хотелось бы предотвратить не
> только запуск команд, отличных от rsync, но и закачку файлов туда
> посредством rsync.

command="/usr/local/sbin/bind-chroot-rsync --server --sender -logDtprRe.iL 
--numeric-ids . /",no-port-forwarding,no-X11-forwarding,no-pty

где

zsh% cat /usr/local/sbin/bind-chroot-rsync
#!/bin/sh
rc=0
root=/.bind-for-backups
case "$SSH_ORIGINAL_COMMAND" in
        /usr/local/sbin/bind-chroot-rsync\ --server\ --sender\ *)
        set -- $SSH_ORIGINAL_COMMAND
        shift
        ;;
        *)
        echo "Invalid command $SSH_ORIGINAL_COMMAND"
        exit 2
        ;;
esac
[ -d $root ] || /bin/mkdir $root
for d in /; do
        if /bin/mount --bind -r $d $root$d; then
                umount_dirs="$root$d $umount_dirs"
        else
                rc=2
        fi
done
if [ $rc = 0 ]; then
        # all mounts are good - do backup
        if /usr/sbin/chroot $root /usr/bin/rsync "$@"; then
                :
        else
                rc=$?
        fi
fi
for d in $umount_dirs; do
        /bin/umount $d
        urc=$?
        [ $rc = 0 ] && rc=$urc
done
exit $rc

Однажды, года два назад, при смене версии rsync пришлось поменять параметры
запуска.

-- 
The last good thing written in C was Franz Schubert's Symphony number 9.
 -- Erwin Dieterich


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/87ty5fjcxf.wl%...@ran.pp.ru

Ответить