Я пытаюсь использовать 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
скрипт и исправляет права доступа к каталогу.