Назад | Перейти на главную страницу

Разрешения Rsync с одного сервера на другой - разрешение Mkdir отклонено (13)

Я пытаюсь использовать rsync для ежедневного копирования резервной папки с локального компьютера на другой (в случае потери данных или случайного удаления). Это выполняется как cronjob.

Я просто команда

rsync -av --rsh='ssh -p90' --delete /backup/ tentbackup@mydomain.com:~/dabackup/

Из root аккаунт на первом сервере (tent).

Однако на первом сервере разрешения для каждого из подкаталогов установлены так, что вы не можете попасть в них, если вы не являетесь пользователем root (нет разрешения на выполнение для папок), это то, что я не могу легко изменить, так как это то, как программное обеспечение резервного копирования работает.

Это означает, что на втором сервере (mydomain.com) счет tentbackup не имеет разрешения на вход в папки, которые создает rsync, что приводит к следующим ошибкам

root@tent:~$ rsync -av --rsh='ssh -p92' --delete /backup/ tentbackup@mydomain.com:~/dabackup/
building file list ... done
03-05-11/apache/
rsync: recv_generator: mkdir "/home/tentbackup/dabackup/03-05-11/apache" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
03-05-11/bind/
rsync: recv_generator: mkdir "/home/tentbackup/dabackup/03-05-11/bind" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
03-05-11/custom/
rsync: recv_generator: mkdir "/home/tentbackup/dabackup/03-05-11/custom" failed: Permission denied (13)
etc...

Я мог бы обойти эту проблему, используя root@mydomain.com (server two), но, очевидно, мне не нужны ssh-ключи для учетной записи root, хранящиеся на server one (tent).

Как я безопасно позволять rsync разрешение на создание этих подпапок и файлов?


Даже когда я вошел на второй сервер напрямую в качестве резервной копии, я не могу перемещаться в каталоги или создавать файлы внутри них.

tentbackup@brave:~/dabackup$ cd 03-20-11/
bash: cd: 03-20-11/: Permission denied
tentbackup@brave:~/dabackup$ mkdir 03-20-11/test -p
mkdir: cannot create directory `03-20-11': Permission denied
tentbackup@brave:~/dabackup$ touch 03-20-11/test
touch: cannot touch `03-20-11/test': Permission denied

Правильный способ сделать это (хотя он меняет разрешения, поэтому вы не можете просто восстановить из резервной копии, если они были важны) - добавить следующее в вашу rsynccommand

--no-p --no-g --chmod=ugo=rwX

куда

--no-p отключает копирование разрешений

--no-g отключает групповое копирование и

--chmod=ugo=rwX гарантирует, что все немаскированные биты включены

Вы должны иметь возможность сделать это, сняв флаг -a с rsync и используя все необходимые флаги. Логически из конфигурации вы не хотите делать это как root, что означает, что вам нужно игнорировать разрешения на стороне назначения. Убедитесь, что вы не включили -p в команду rsync, и у вас должна быть возможность безопасно копировать файлы с root @ serverone на user @ servertwo, и он должен иметь возможность создавать каталоги и т. Д. Просто помните, что ваше дерево разрешений не будет там на servertwo, если вам нужно восстановить из резервной копии, это должно быть довольно легко написать сценарий, чтобы исправить, я надеюсь.

В противном случае вам понадобится специальный доступ для создания файлов на servertwo и управления ими, вы можете сделать это, настроив rsyncd.conf и используя rsync в режиме демона, чтобы вам не нужно было разрешать ssh между двумя хостами (это неясно из вопрос, есть ли у других пользователей доступ к хосту, так что это может быть недостаточно безопасно).

Вы пытаетесь сделать что-то, что конкретно запрещено установленными разрешениями. Вы должны либо изменить установленные разрешения, либо предоставить вашей программе особые привилегии. Одно из исправлений может заключаться в создании cron задание на сервере, которое фиксирует права доступа к каталогу. В качестве альтернативы у вас может быть программа, которая работает как root который ждет команды от ssh скрипт и исправляет права доступа к каталогу.