Назад | Перейти на главную страницу

Развертывание контента на веб-сервере с разрешениями rsync:

У меня есть сервер Ubuntu 10.04, на котором запущен nginx, а nginx работает как пользователь nginx. Я пытаюсь развернуть Octopressсайта с rsync и наткнулись на то, что выглядит как дилемма безопасности.

Очевидно, что весь /srv/www/ каталог должен быть доступен для чтения пользователем nginx, и несколько каталогов загрузки должны быть доступны для записи пользователем nginx.

Octopress любит подключаться к серверу по ssh, и это хорошо. Поскольку у меня слабое чувство даяния nginx удаленный доступ к оболочке, я создал специального пользователя (deployer) только для этой цели, который настроен на доступ к оболочке и может подключаться через ssh. Rsync работает нормально, но все веб-файлы копируются как принадлежащие deployer, и пользователь nginx не могу их прочитать.

Я мог бы добавить пользователя nginx группировать deployer и поиграйте с rsync --chmod и -p параметры, позволяющие nginx / php писать в каталоги загрузки, но я не уверен, что это меня не укусит позже. В идеале я думаю, что мне нужно что-то вроде rsync-then-chown & chmod, но я подозреваю, что это слишком много, чтобы просить.

Какие лучшие практики? Как делать ты пойти об этом?

Заранее спасибо.

Это основная проблема доступа. Вы хотите иметь двух пользователей с ограниченным доступом и хотите, чтобы они как-то обменивались файлами.

«Традиционное» решение - создать новую группу, поместить туда обоих пользователей и каким-то образом принудить, чтобы файлы принадлежали этой группе. Тем не менее, у вас будут проблемы с доступом на запись, если вы не установите права доступа и с вновь созданными файлами. Оба варианта решаемы (каталоги umask и setuid).

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

В крайнем случае будет сценарий root (вероятно, из cron или icron) для «исправления» разрешений.