Какие разрешения необходимы для Apache Passenger

Запуск Ubuntu 10.04 на Linode, RVM, Rails 3, Apache с модулем Passenger, несущей и мини-магией

Я получаю:

Rails Error: Unable to access log file. Please ensure that /srv/www/mysite.com/testapp/log/production.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.

и Errno::EACCES (Permission denied /srv/www/mysite.com/testapp/public/uploads/tmp/20110517-1707-2938-6455):

Я побежал chmod -R root:root /srv/www/mysite.com/testapp

Затем: chmod -R www-data:www-data /srv/www/mysite.com/testapp и chmod -R www-data:www-data /srv/www/mysite.com/testapp/public/uploads

Поскольку только 2 каталога, которые должны быть доступны для записи, - это файлы журналов и каталог загрузок, которые я пытался защитить. Есть ли другие папки/файлы, которые мне нужны для записи?

Ответ 1

Разрешения на веб-сайтах немного странные: с одной стороны, контент должен быть доступен для чтения веб-сервером и FastCGI или Passenger, или что-то еще выполняет (в данном случае, Ruby) код. С другой стороны, если пользователь веб-сервера владеет файлами, то взломанный веб-сервер или (более вероятно:) ваш код может изменять исполняемые файлы и статические файлы, которые являются вашим сайтом. Это происходит слишком часто.

Если содержимое веб-сайта принадлежит другому пользователю, не доступное для записи с помощью программного обеспечения веб-сервера, веб-сайт не может быть перезаписан злоумышленниками. (Конечно, у вас есть несколько открытых сокетов для подключения к базе данных, все данные, поддерживаемые базой данных, могут быть повреждены злоумышленниками. Кроме того, любой каталог, в котором вы разрешаете загрузку, может быть поврежден злоумышленниками. Но цель заключается в уменьшает привилегии программного обеспечения до разумного.)

Итак, все, что сказано, на ваш конкретный вопрос; ваше веб-серверное программное обеспечение работает как www-data, и имеет смысл, если ваши файлы журналов и каталог загрузки будут принадлежать www-data:

mkdir -p /srv/www/mysite.com/testapp/log/   # might not exist yet
chown -R pcasa:pcasa /srv/www/mysite.com/   # or some other user
chmod 755 /srv/www/mysite.com
chmod 755 /srv/www/mysite.com/testapp/
# populate the app directory with your files, if you haven't done so already
chown -R www-data:www-data /srv/www/mysite.com/testapp/log
chmod 755 /srv/www/mysite.com/testapp/log   # see notes
chmod 644 /srv/www/mysite.com/testapp/log/* # see notes

Я сделал предположение, что все пользователи в вашей системе могут читать журнал. Это может быть неверно. Используйте 700 вместо 755 и 600 вместо 644, если вы не хотите, чтобы все пользователи системы читали файлы журнала.

Далее, для вашего каталога uploads:

mkdir -p /srv/www/mysite.com/testapp/public/uploads/tmp  # might not exist yet
chown -R www-data:www-data /srv/www/mysite.com/testapp/public/uploads
chmod 755 /srv/www/mysite.com/testapp/public/uploads
chmod 755 /srv/www/mysite.com/testapp/public/uploads/tmp

Опять же, я сделал предположение, что все пользователи в вашей системе смогут видеть все загруженное содержимое. Используйте 700 вместо 755, если вы хотите, чтобы программное обеспечение веб-сервера могло читать файлы.

Это простые инструкции, которые должны работать; вы можете усложниться, если хотите сохранить программное обеспечение и контент на веб-сайте только между пользователем, владеющим веб-сайтом и пользователем, который запускает веб-сайт, запустив веб-сервер с дополнительной группой (см. newgrp(1) и group(5) manpages для получения подробной информации) и предоставления файлам одного и того же владельца группы и использования битов разрешения группы (среднее восьмеричное число: 750 vs 700). Это достаточно сложно, что, если у вас нет веской причины, вероятно, не стоит идти по этому пути. (Определенно стоит сделать один раз на машине разработки где-то, так что вы достаточно знакомы с ней, чтобы использовать ее в будущем.:)