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

Re: rsync over ssh



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


Reply to: