Intereting Posts

Файлы rsync с разрешениями apache по ssh

Я запускаю rsync через apache для синхронизации каталога ресурсов

rsync -avz -e 'ssh -l rsync -i /home/rsync/.ssh/rsync -o StrictHostKeyChecking=no' /var/www/html/site/Uploads centos@$IP:/var/www/html/site/Uploads 

Это работает правильно, но право собственности изменяется от apache до centos, так как это пользователь. Я мог бы настроить ключи для пользователя apache, однако этот пользователь не может войти в систему, чтобы он не работал.

Как я могу заставить rsync запускаться как apache для сохранения права собственности или запускаться как пользователь centos и поддерживать владельца как apache (cron не будет работать для моего случая).

В Rsync есть опция numeric-ids , которую вы можете использовать здесь.

Две вещи: убедитесь, что на обоих серверах ваш пользователь Apache имеет одинаковый числовой идентификатор; и убедитесь, что пользователь, выполняющий rsync, может писать / обновлять файлы, принадлежащие apache, для целей.

Владение файлами в целевом каталоге полностью определяется целевой учетной записью, используемой для их создания / передачи. (Обычным учетным записям не разрешается изменять права собственности на файлы.)

Если вы хотите, чтобы целевые файлы принадлежали apache есть четыре варианта, которые возникают на ум

  1. Перенесите файлы, войдя в целевую учетную запись в качестве пользователя apache . С помощью сертификата ssh вы можете избежать необходимости встраивать пароль. Вы также можете настроить соединение ssh чтобы запретить любую операцию, кроме запуска службы rsync .

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

    В этой ситуации я бы cron на вашем целевом хосте, проверяя файл локально каждые пять минут с таким фрагментом, как это

     test -f "$HOME"/.rsync_trigger && rsync ... && rm -f "$HOME"/.rsync_trigger 
  3. Используйте inotifywait для исправления владельцев файлов после копирования файлов. Это потребует, чтобы процесс выполнялся как root, но он мог быть тщательно автономным, чтобы он мог изменять только владельцы файлов, принадлежащих centos в целевом каталоге apache .

  4. Скопируйте файлы с помощью rsync с правами root. Не идеально, но может потребоваться, если все остальное не удастся.

Таким образом, лучший способ найти пользователя, который имеет доступ к sudo только для этой команды, и использовать --rsync-path='sudo rsync' . например:

 rsync -avz -e 'ssh -l rsync -i /home/rsync/.ssh/rsync -o StrictHostKeyChecking=no' /path/ --rsync-path='sudo rsync' rsync@xxx.xxx.xxx.xxx:/path/