Ответ 1
Удостоверьтесь, что пользователь, которого вы подключили к удаленному компьютеру, имеет доступ на запись к содержимому папки И самой папки, поскольку rsync попытался обновить время модификации самой папки.
У меня есть следующая настройка для периодических rsync файлов с сервера A на сервер B. На сервере B есть демон rsync, работающий со следующей конфигурацией:
read only = false
use chroot = false
max connections = 4
syslog facility = local5
log file = /var/adm/rsyncd.log
munge symlinks = false
secrets file = /etc/rsyncd.secrets
numeric ids = false
transfer logging = true
log format = %h %o %f %l %b
[BACKUP]
path = /path/to/archive
auth users = someuser
От сервера A Я выдаю следующую команду:
rsync -adzPvO --delete --password-file=/path/to/pwd/file/pwd.dat /dir/to/be/backedup/ [email protected]::BACKUP
Каталог BACKUP полностью читается/записывается/выполняется всем. Когда я запускаю команду rsync с сервера A, я вижу:
afile.txt
989 100% 2.60kB/s 0:00:00 (xfer#78, to-check=0/79)
для каждого и каждого файла в каталоге, который я хочу создать. Это не удается, когда я получаю файлы tmp:
rsync: mkstemp "/.afile.txt.PZQvTe" (in BACKUP) failed: Permission denied (13)
Время работы с Google, и я все еще не могу решить, что кажется очень простой проблемой разрешения. Совет? Спасибо заранее.
Дополнительная информация
Я только заметил, что в начале процесса происходит следующее:
rsync: failed to set permissions on "/." (in BACKUP): Permission denied (13)
Он пытается установить разрешение на "/"?
Edit
Я зарегистрировался как пользователь - someuser. Мой каталог назначения имеет полное разрешение на чтение/запись/выполнение для всех, включая его содержимое. Кроме того, целевой каталог принадлежит некоторому пользователю и в отдельной группе.
Последующие действия
Я нашел, что SSH решает этот
Удостоверьтесь, что пользователь, которого вы подключили к удаленному компьютеру, имеет доступ на запись к содержимому папки И самой папки, поскольку rsync попытался обновить время модификации самой папки.
Несмотря на то, что у вас это работает, у меня недавно была аналогичная встреча, и ни один SO или поиск в Google не помогли, поскольку все они касались вопросов с базовыми разрешениями. Ниже приведенное решение представляет собой некую настройку, в которой вы даже не подумайте, чтобы проверить в большинстве ситуаций.
Одна вещь, которую нужно проверить с разрешения, отрицала, что я недавно обнаружил, что у меня проблемы с самим rsync, где разрешения на обоих серверах были одинаковыми, включая владельца и группу, но передача rsync работала одним способом на одном сервере, но не с другим.
Оказалось, что сервер с проблемами, с которыми мне было отказано в доступе, был включен SELinux, который, в свою очередь, переопределяет разрешения POSIX на файлы/папки. Таким образом, даже несмотря на то, что папка, о которой идет речь, могла быть 777 с запуском root, команда SELinux была включена и, в свою очередь, перезаписывала те разрешения, которые выдавали "разрешение отказало" -error от rsync.
Вы можете запустить команду getenforce
, чтобы увидеть, включено ли на машине SELinux.
В моей ситуации я просто отключил SELINUX полностью, потому что он не был нужен и уже отключен на сервере, который работал нормально и только вызвал проблемы. Чтобы отключить, откройте /etc/selinux/config
и установите SELINUX=disabled
. Чтобы временно отключить, вы можете запустить команду setenforce 0
, которая установит SELinux в состояние permissive
, а не состояние enforcing
, которое заставляет его печатать предупреждения вместо принудительного применения.
Демон Rsync по умолчанию использует nobody/nogroup для всех модулей, если он запущен под пользователем root. Таким образом, вам нужно либо определить параметры uid
и gid
для пользователя, которого вы хотите, либо установить для них root/root.
Я столкнулся с той же проблемой и решить ее chown
пользователя папки назначения. У текущего пользователя нет прав на чтение, запись и выполнение файлов папки назначения. Попробуйте добавить разрешение с помощью chmod a+rwx <folder/file name>
.
У меня была аналогичная проблема, но в моем случае это было потому, что хранилище имеет только SFTP, без демонов ssh или rsync. Я ничего не мог изменить, bcs этот сервер был предоставлен моим клиентом.
rsync не мог изменить дату и время для файла, некоторые другие утилиты (например, csync) показали мне другие ошибки: "Не удалось создать временный файл" Обнаружен перекос часов ". Если у вас есть доступ к серверу хранения - просто установите openssh-server или запустите rsync в качестве демона здесь.
В моем случае - я не мог этого сделать, и решение было: lftp. Использование lftp для синхронизации происходит ниже:
lftp -c "open -u login,password sftp://sft.domain.tld/; mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"
/src/folder - это папка на моем ПК, /rem/folder - это sftp://sft.domain.tld/rem/folder.
вы можете найти man по ссылке lftp.yar.ru/lftp-man.html
Это может не устраивать всех, поскольку оно не сохраняет исходные разрешения файлов, но в моем случае это было неважно, и он решил проблему для меня. rsync имеет опцию --chmod
:
- chmod Этот параметр сообщает rsync применять одну или несколько разделенных запятыми строк lqchmodrq к разрешению файлов в передаче. результирующее значение обрабатывается так, как если бы это были разрешения, что отправляющая сторона, предоставленная для файла, что означает, что эта опция может похоже, не влияют на существующие файлы, если --perms не включен.
Это заставляет разрешения быть такими, какие вы хотите для всех файлов/каталогов. Например:
rsync -av --chmod=Du+rwx SRC DST
добавит Read, Write и Execute для всех переданных каталогов.
Windows: проверьте права доступа к папкам назначения. Соблюдайте права собственности, если вы должны предоставить права на учетную запись, запущенную службой rsync.
Я полагаю, что общая ошибка, о которой не упоминалось выше, пытается записать в пространство монтирования (например, /media/drivename
), когда раздел не установлен. Это также приведет к этой ошибке.
Если зашифрованный диск настроен на автоматическое монтирование, но это не так, может возникнуть проблема автоматической разблокировки зашифрованного раздела, прежде чем пытаться записать его в пространство, где он должен быть установлен.
У меня была такая же ошибка при синхронизации файлов внутри контейнера Docker, а пункт назначения был установленным томом (Docker для mac), я запускаю rsync
через su-exec <user>
. Я смог разрешить его, выполнив rsync
как root
с флагами -og
(сохранить владельца и группу для файлов назначения).
Я все еще не уверен, что вызвало эту проблему, права доступа были в порядке (я запускаю chown -R <user>
для целевого каталога до rsync
), возможно, каким-то образом связанным с медленной файловой системой Docker for Mac.
У меня была такая же проблема в случае CentOS 7. Я просмотрел много статей, форумов, но не смог найти решение. Проблема была с SElinux. Отключение SElinux на стороне сервера сработало. Проверка состояния SELinux на стороне сервера (откуда вы извлекаете данные с помощью rysnc) Команды для проверки состояния SELinux и его отключения
$ getenforce
Применение ## означает, что SElinux включен
$ setenforce 0
$ getenforce
диспозитивный
Теперь попробуйте запустить команду rsync на стороне клиента, у меня это сработало. Всего наилучшего!
Обратите внимание на -e ssh и jenkins @localhost: в следующем примере:
rsync -r -e ssh --chown=jenkins:admin --exclude .git --exclude Jenkinsfile --delete ./ [email protected]:/home/admin/web/xxx/public
Это помогло мне
PS Сегодня я понял, что когда вы меняете (добавляете) пользователя jenkins в какую-либо группу, разрешение будет применяться после перезапуска подчиненного (агента). И мое решение (-e ssh и jenkins @localhost:) нужно только тогда, когда вы не можете перезапустить агент/сервер.
У меня есть сервер Centos 7 с rsyncd на борту: /etc/rsyncd.conf
[files]
path = /files
По умолчанию selinux блокирует доступ rsyncd к папке /files
# this sets needed context to my /files folder
sudo semanage fcontext -a -t rsync_data_t '/files(/.*)?'
sudo restorecon -Rv '/files'
# sets needed booleans
sudo setsebool -P rsync_client 1
Отключение selinux - это простое, но не очень хорошее решение
Удивительно, но никто не упомянул все мощные СУДО. Если бы та же самая проблема и sudo ее исправили
запустить в корневом доступе ssh может решить эту проблему
или chmod 0777 /dir/to/be/backedup/
или chown username:user /dir/to/be/backedup/