Как изменить владельца для 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
Ответы
Ответ 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/
Ответ 2
Если у вас есть доступ к rsync v.3.1.0 или новее, используйте параметр - chown:
rsync -og --chown=apache:apache [src] [dst]
Дополнительная информация в ответе на аналогичный вопрос здесь: ServerFault: проблемы с Rsync, права владельца и группы не изменяются
Ответ 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