Для простой установки LAMP, какой самый безопасный способ управлять владением файлом в каталоге / var / www (или подкаталогах)?
Apache работает как www-data, поэтому, если это владелец, он будет иметь доступ на запись. Вероятно, это плохая идея, но она удобна для загрузки файлов.
Если они принадлежат root, есть ли проблемы с безопасностью?
Имеет ли смысл, чтобы каждый пользователь был владельцем своей папки / var / www / site? (Я понимаю, что ~ / public_html - правильный способ сделать это, однако наличие всего веб-контента в / var / www / позволяет легко увидеть, какие сайты в настоящее время работают на сервере)
Уровень вашей безопасности зависит от того, выходит ли это в интрасеть или в Интернет (хотя «безопаснее в интрасети» может вводить в заблуждение в зависимости от вашего брандмауэра и общей сетевой безопасности).
Наличие у пользователя apache доступа на запись к файлам плохо для безопасности. Если сервер рутирован, они могут изменять содержимое. Конечно, разрешение загрузки файлов без проверки - гораздо более серьезная проблема безопасности - дыра в apache не требуется. Вам лучше загрузить в какой-нибудь каталог вне веб-сервера, дождаться проверки, перейти в область веб-сервера.
Если файлы принадлежат пользователю root, только пользователь root может их изменять. Это означает, что все процессы, меняющие их, должны быть корневыми, что является проблемой безопасности. Вы готовы предоставить root / sudo всем авторам веб-контента? Я бы не рекомендовал этого.
Если возможно, apache и его журналы должны находиться на отдельном томе, по крайней мере, вне / bin / и / var. Разросшиеся файлы журналов или огромные загруженные файлы могут вызвать отказ в обслуживании для вашей ОС - системы Linux ведут себя странно со 100% заполненными разделами / var.
Если вы собираетесь использовать LAMP с пользователями, вам нужно беспокоиться о навыках кодирования ваших пользователей. Сделайте PHP безопасным, насколько это возможно (вздох, почему нет лучшего языка, PHP действительно ужасен, но нет ничего удаленно лучше, чем он для быстрого содержания). Скомпилируйте доступ только к БД, который использует параметризованные запросы (устраняет почти все атаки sql-инъекций). Создайте схему и авторизацию в MySQL, чтобы изолировать всех пользователей.
Не должно быть проблем с содержимым, принадлежащим root, при условии, что они доступны для чтения пользователю httpd.
Пользовательский материал должен уйти /srv
не /var/www
. Они могут владеть своим кодом и данными там.
Я использую групповые разрешения в аналогичной ситуации:
Для каждого сайта есть отдельный пользователь и группа.
Все файлы и каталоги, которые должны быть прочитаны Apache, доступны для записи и чтения для группы (для umask установлено значение 027
) и принадлежат к соответствующей группе веб-сайтов
Непривилегированный пользователь Apache www-data
является членом группы каждого веб-сайта
Каталоги и файлы, которыми управляет интернет сайт администраторы (веб-контент) принадлежат соответствующему пользователю
Все управляется сервер admins: веб-приложения, сценарии CGI, сертификаты SSL и т. д. размещаются в отдельных каталогах и принадлежат пользователю root. В Alias
и ScriptAlias
директивы используются для доступа к ним.
Каталоги, к которым скрипты CGI и веб-приложения должны иметь доступ на запись, принадлежат www-data
и соответствующую группу веб-сайтов и имеют setgid
набор бит (chmod g+s
). В результате созданные в них файлы принадлежат группе веб-сайтов, а не www-data
, и может быть прочитан администратором сайта.