Подтвердить что ты не робот

Как изменить владельца для rsync

Я понимаю, что сохраняю разрешения для rsync. Однако в моем случае у моего локального компьютера нет пользователя, для которого файлы должны находиться под веб-сервером. Поэтому, когда я rsync, мне нужен владелец и группа, чтобы быть apache на веб-сервере, но быть моим именем пользователя на моем локальном компьютере. Любые предложения?

Я хотел уточнить, чтобы объяснить, что мне нужно сделать.

Мой персональный компьютер: с именем 'home' с учетной записью пользователя 'michael' Мой веб-сервер: с именем "server" с учетной записью пользователя 'remote' и учетной записью пользователя "apache"

Текущая ситуация: мой сайт находится на "домашнем" с владельцем "майкл" и на "сервере" с владельцем "apache" . "home" должен использовать пользовательский "michael", а "server" должен использовать пользовательский "apache"

Задача: rsync мой сайт на 'home' на 'server', но все владельцы файлов 'apache' и группа 'apache'

Проблема: rsync будет выдавать разрешения, владельца и группу; однако, мне нужно, чтобы все файлы были владельцем apache. Я знаю, что не предваряющий владелец помещает владельца пользователя на "сервер", но так как этот пользователь 'remote', то он использует это вместо "apache" . Я не могу rsync с пользователем "apache" (что было бы неплохо), но риск для безопасности, который я не хочу открывать.

Моя единственная идея о том, как решить: после каждого rsync вручную chown -R и chgrp -R, но это огромная система, и это занимает много времени, тем более, что это происходит в процессе производства.

Кто-нибудь знает, как это сделать?

Текущая команда, которую я использую для rsync: rsync --progress -rltpDzC --force --delete -e "ssh -p22"./[email protected]:/website

4b9b3361

Ответ 1

Есть хаки, которые вы могли бы собрать на приемной машине, чтобы получить право собственности - запустить "chmod -R apache/website" из cron будет эффективным, но довольно kludgey вариант - но вместо этого я бы рекомендовал безопасно, что позволяет rsync-over-ssh-as-apache.

Для этого создайте выделенную пару ssh:

ssh-keygen -f ~/.ssh/apache-rsync

а затем возьмите ~/.ssh/apache-rsync.pub на веб-сервер, где вы поместите его в ~ apache/.ssh/authorized_keys и тщательно укажите допустимую команду, что-то например, все в одной строке:

command="rsync --server -vlogDtprCz --delete . /website",from="IP.ADDR.OF.SENDER",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAABKEYPUBTEXTsVX9NjIK59wJ+fjDgTQtGwhATsfidQbO6u77dbAjTUmWCZjKAQ/fEFWZGSlqcO2yXXXXXXXXXXVd9DSS1tjE6vAQaRdnMXBggtn4M9rnePD2qlR5QOAUUwhyFPhm6U4VFhRoa3wLvoqCVtCV0cuirB6I45On96OPijOwvAuz3KIE3+W9offomzHsljUMXXXXXXXXXXMoYLywMG/GPrZ8supIDYk57waTQWymUyRohoQqFGMzuDNbq+U0JSRlvLFoVUZ5Piz+gKJwwiFwwAW2iNag/c4Mrb/BVDQAyEQ== [email protected]

а затем ваша команда rsync на вашей домашней машине будет похожа на

rsync -av --delete -e 'ssh -i ~/.ssh/apache-rsync [email protected]' ./ /website

Есть другие способы обмануть этого кота, но это самое ясное и включает в себя самые маленькие обходные пути, на мой взгляд. Это предотвращает получение оболочки как apache, которая является самой большой проблемой безопасности, natch. Если вы действительно противно разрешать ssh как apache, есть и другие способы... но вот как я это сделал.

Ссылки здесь: http://ramblings.narrabilis.com/using-rsync-with-ssh, http://www.sakana.fr/blog/2008/05/07/securing-automated-rsync-over-ssh/

Ответ 3

Последняя версия (не менее 3.1.1) rsync позволяет указать "удаленное владение":

--usermap=tom:www-data

Изменяет право собственности на www-data (также известный как PHP/Nginx). Если вы используете Mac в качестве клиента, используйте brew для обновления до последней версии. И на вашем сервере загрузите источники архивов, затем "сделайте" это!

Ответ 4

rsync версия 3.1.2

В основном я использую windows на локальном компьютере, поэтому это командная строка, которую я использую для синхронизации файлов с сервером (debian):

[email protected] /cygdrive/c/wamp64/www/projects

$ rsync -rptgoDvhnP --chown=www-data:www-data --exclude=.env --exclude=vendor --exclude=node_modules --exclude=.git --exclude=tests --exclude=.phpintel --exclude=storage ./website/ [email protected]:/var/www/html/website

-n: выполнить пробный запуск без внесенных изменений, чтобы действительно выполнить команду, удалите опцию -n

Ответ 5

Решение, использующее rsync --chown USER:GROUP [src] [dst], работает только в том случае, если удаленный пользователь имеет доступ для записи в каталог назначения, что в большинстве случаев не так.

Вот другое решение:

Обзор

(srcmachine)  (rsync)   (destmachine)
  srcuser    -- SSH -->   destuser
                             |
                             | sudo su jenkins
                             |
                             v
                          jenkins

Допустим, вы хотите rsync:

  • Из:
    • Машина: srcmachine
    • Пользователь: srcuser
    • Справочник: /var/lib/jenkins
  • Для того, чтобы:
    • Машина: destmachine
    • Пользователь: от destuser до установить SSH-соединение.
    • Справочник: /tmp
    • Окончательный владелец файлов: jenkins.

Решение

rsync --rsync-path 'sudo -u jenkins rsync' -avP --delete /var/lib/jenkins [email protected]:/tmp

Узнайте больше здесь:

https://unix.stackexchange.com/a/546296/116861