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

В Linux версия GNU coreutils tail использует inotify для блокировки ожидания изменения файла. В FreeBSD tail использует kevent для того же. Это будет лучше, чем многократная проверка изменений и сон. В зависимости от того, как часто вам нужно это делать и с какой частотой происходят изменения, порождение внешнего процесса из node.js просто для вызова tail может стоить или не стоить.

Если вы не используете Linux или FreeBSD (или, возможно, MacOS?), Утилита tail , вероятно, не лучше, чем то, что вы можете делать непосредственно в JavaScript, многократно проверяя и спящий.

В качестве альтернативы, если вы используете Linux или FreeBSD, вы можете использовать inotify или kevent непосредственно из node.js с каким-либо расширением / плагином / модулем без создания процесс. Я не знаю, существует ли это.

2
21.11.2016, 12:18
3 ответа

Итак, лучший способ, который я нашел, - это иметь пользователя с доступом 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/
1
27.01.2020, 22:44

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

Если вы хотите, чтобы целевые файлы принадлежали 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. Не идеально, но может понадобиться, если все остальное не поможет.

1
27.01.2020, 22:44

Rsync имеет параметр numeric-id , который вы можете использовать здесь.

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

0
27.01.2020, 22:44

Теги

Похожие вопросы