На сервере Dev у нас есть дерево файлов, принадлежащих пользователю webdev или webserv.
Я хотел бы запечатать это дерево файлов и извлечь его на производственный сервер, с изменением что любые файлы, принадлежащие "webdev", теперь будут принадлежать "webprod", а любые файлы, принадлежащие webserv, будут оставаться принадлежит webserv.
Есть ли способ сделать такую "подкачку"?
Вы можете сделать это наиболее эффективно, используя find
после распаковки архива:
# find /path -user webdev -exec chown webprod '{}' +
Я думаю, вы могли бы сделать что-нибудь умное с --to-command
вариант в последних версиях GNU tar (около 1.25), чтобы справиться с этим. Это должно позволить вам выполнять произвольные преобразования вывода tar-файла, пропуская его через специальную программу фильтрации. Теоретически можно было бы проверить владельца каждого извлекаемого из архива файла и при необходимости изменить его.
Однако в настоящее время в сети нет хороших примеров того, как использовать эту функциональность, и мои попытки создать сценарий фильтрации оказались бесплодными.
Затем меня осенило, что эту дилемму можно решить, разделив архив на два отдельных файла. Это можно сделать с помощью tar, но лучше всего с этим справляется cpio, потому что cpio имеет более гибкую обработку ввода.
Итак, вот моя попытка решения с использованием find
и cpio
. Сначала создайте cpio-архив всех файлов, принадлежащих Webserv:
cd /var/www && find . -owner webserv | cpio -ov --format=crc | gzcat webserv-files.cpio.gz
затем создайте cpio-архив файлов, принадлежащих веб-разработчик, меняя владельца на webprod:
cd /var/www && find . -owner webdev | cpio -ov --format crc --owner webprod | gzcat webdev-files.cpio.gz
(обратите внимание, что это будет работать только при запуске от имени root в соответствии с man-страницей cpio).
Теперь в пункте назначения распакуйте оба архива:
cd /var/www
gzcat webserv-files.cpio.gz | cpio -iv
gzcat webdev-files.gpio.gz | cpio -iv
Я думаю, что это приведет к желаемому результату, хотя я не тестировал слишком тщательно.
Если webprod запускает команду tar, файлы будут принадлежать webprod. Возможно, файлы в tar-файле должны быть доступны для чтения webprod.
В большинстве случаев этот веб-продукт не должен быть идентификатором пользователя, от имени которого работает веб-сервер. Это ограничит возможность изменения вашего контента путем компрометации веб-сервера.