Разбираюсь в правах доступа на папки внутри веб-сервера apache в ubuntu, как подружить юзера и www-data?

Народ, ни разу не админ, по инструкции с диджитал оушен собирал свою серваки для очень локальных задач и тут наткнулся на странное поведение - что-то не так сделал по инструкции и теперь у меня конфликт пользователя в системе и пользователя веб-сервера www-data.

Суть - настроен стандартный apache, есть папка /var/www, внутри папки сайтов.
Есть юзер muhasa, есть юзер www-data.

Если папки создаются юзером muhasa, то веб-сервер не может писать в папки сайтов, нет прав на запись.
Если папки отдавать юзеру www-data, то muhasa, от имени которого я всегда работаю, не может git'ом или composer'ом там ниче создавать.
В одной инструкции прочитал, что надо юзера www-data добавить к группе muhasa, в другой инструкции наоборот - muhasa добавить в группу www-data. Я сначала так сделал, потом этак и зачесал репу - а как канонически правильно-то?
С точки зрения безопасности или еще каких-то факторов, о которых я с позиции неофита в серверных делах не могу знать.
Можно линком на годную инструкцию/статью.
  • Вопрос задан
  • 2161 просмотр
Пригласить эксперта
Ответы на вопрос 4
hint000
@hint000
у админа три руки
а как канонически правильно-то?
Правильно так, чтобы минимизировать непредвиденные проблемы.
muhasa в сущности админ, и теоретически права для него (и для его группы) могут быть в разных частях системы, куда веб-серверу не нужен доступ. Поэтому добавлять www-data в группу muhasa рисковано. Нужно добавить muhasa в группу www-data.
Теперь другая ситуация. Допустим, есть всё тот же админ muhasa. Но кроме того есть хрен с горы pupkin - пользователь с минимальными правами, но всё же ему нужен доступ только в одну из папок внутри /var/www - к своему сайту. Если добавить pupkin в группу www-data, то этот Пупкин может порушить чужой сайт или получить доступ к чужим данным. В данном случае наоборот, безопаснее добавить www-data в группу pupkin.

Теперь вы понимаете, что нет универсально-каноничного варианта, зависит от контекста. Поэтому админы не могут написать инструкции на все случаи.
Ответ написан
Sanes
@Sanes
По-человечески запускайте php и не будет проблем с правами.
FastCGI, PHP-FPM, Apache mpm-itk.
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Для такого придуман специальный модуль Apache под названием mod_suexec, как раз ваш случай "запускать конкретный сайт под указанным пользователем".
Ответ написан
alekciy
@alekciy
Вёбных дел мастер
Немного дополю ответ hint000 . Если уж беспокоится о безопасности, то нужно бекенд (например PHP) запускать от аккаунта владельца (например через PHP-FPM). В вашем случае это muhasa. В веб сервер (например nginx) работает от своего пользователя и имеет права только на чтение. При этом пользователь-веб-сервер включается во все группы пользователей.

В результате мы получаем следующее: веб сервер работает под своей личной учетной записью. Бэкенд не может стартовать скрипты от этой учетки. Поэтому не получиться одному пользователю запустить скрипт что бы прочитать файлы другого пользователя (например файл с паролями к базе). Получается крайне безопасно и просто в эксплуатации и настройки.

В вашем случае нужно сделать так:
  1. установить nginx;
  2. php запустить через php-fpm с правами muhasa;
  3. добавить nginx в группу muhasa;
  4. для папки /var/www/сайт_muhasa выставить права 2770

Можно линком на годную инструкцию/статью.

Ну вот готовый набор команд на 28-ом слайде. В целом тут вся схема приведена с примерами: Как избежать Permission denied на файлах проекта и...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы