Обновленное резюме
Каталог / var / www принадлежит, root:root
что означает, что никто не может его использовать, и он совершенно бесполезен. Поскольку нам всем нужен веб-сервер, который действительно работает (и никто не должен входить в систему как «root»), мы должны это исправить.
Только два объекта нуждаются в доступе.
PHP / Perl / Ruby / Python все нуждаются в доступе к папкам и файлам, так как они создают многие из них (то есть
/uploads/
). Эти языки сценариев должны работать под nginx или apache (или даже чем-то вроде FastCGI для PHP).Разработчики
Как они получают доступ? Я знаю, что кто-то где-то делал это раньше. Однако при наличии множества миллиардов веб-сайтов можно подумать, что по этой теме будет больше информации.
Я знаю, что 777 - полное разрешение на чтение / запись / выполнение для владельца / группы / другого. Так что, похоже, это не нужно корректно, поскольку дает случайным пользователям полные права.
Какие разрешения необходимо использовать, /var/www
чтобы:
- Контроль исходного кода, например, git или svn
- Пользователи в группе, такие как «сайты» ( или даже добавленные в «www-данные» )
- Сервера типа apache или lighthttpd
- И PHP / Perl / Ruby
можно ли там читать, создавать и запускать файлы (и каталоги)?
Если я прав, сценарии Ruby и PHP не «выполняются» напрямую, а передаются интерпретатору. Таким образом, нет необходимости в разрешении на выполнение файлов в /var/www
...? Таким образом, кажется , что правильное разрешение было бы chmod -R 1660
что сделало бы
- все файлы доступны для этих четырех объектов
- все файлы не могут быть выполнены по ошибке
- полностью заблокировать всех остальных из каталога
- установить режим разрешений «липкий» для всех будущих файлов
Это верно?
Обновление 1: я только что понял, что для файлов и каталогов могут потребоваться разные разрешения - я говорил о файлах выше, поэтому я не уверен, какими должны быть разрешения для каталогов.
Обновление 2: Структура папок /var/www
кардинально меняется, так как одна из четырех сущностей выше всегда добавляет (и иногда удаляет) папки и подпапки на несколько уровней. Они также создают и удаляют файлы, которые могут понадобиться другим 3 объектам для чтения / записи. Следовательно, разрешения должны выполнять четыре действия, указанные выше, как для файлов, так и для каталогов. Поскольку ни одному из них не нужно разрешение на выполнение (см. Вопрос о ruby / php выше), я бы предположил, что rw-rw-r--
разрешение - это все, что необходимо и полностью безопасно, поскольку эти четыре объекта управляются доверенным персоналом (см. # 2) и всеми другими пользователями на система имеет доступ только для чтения.
Обновление 3: это для персональных машин разработки и серверов частной компании. Нет случайных «веб-клиентов», как общий хост.
Обновление 4: эта статья от slicehost, кажется, лучше всего объясняет, что необходимо для настройки разрешений для вашей папки www. Тем не менее, я не уверен, какой пользователь или группа apache / nginx с PHP ИЛИ запускают svn / git и как их изменить.
Обновление 5: я (думаю) наконец нашел способ заставить все это работать (ответ ниже). Тем не менее, я не знаю, если это правильный и безопасный способ сделать это. Поэтому я начал щедрость. Человек, у которого есть лучший метод защиты и управления каталогом www, побеждает.