После установки web-сервера я привык назначать пользователем apache/nginx владельца каталога, в котором лежат файлы сайтов. То есть, если сайты лежат в /home/user1/www, то я устанавливаю пользователем nginx user1.
Это всегда избавляло меня от кучи проблем. Я использую только одного пользователя, поэтому ранее проблем с такой схемой не возникало. Тем не менее, я понимаю, что такая схема не может корректно работать для нескольких пользователей. Сейчас я в очередной раз настраиваю сервер на ubuntu + vestacp и хочу сделать всё "правильно" . Я оставил у nginx дефолтного пользователя и столкнулся со следующими проблемами:
1. Папкам на сайте положено назначать права 755. Такие права не позволяют пользователю www-data редактировать и удалять файлы. Можно добавить пользователя www-data в группу user1, но потребуется сменить права на папки/файлы на 775/664. Является ли это правильным в плане безопасности web-сервера?
2. Движок сайта тоже создаёт файлы, и у этих файлов будет владелец www-data. Мне было бы удобно иметь возможность редактировать эти файлы от имени своего пользователя. Как этого добиться? Теперь получается, что мне нужно ещё и наоборот добавить пользователя user1 в группу user1 и позаботиться о том, чтобы движок тоже создавал файлы папки создавались с правильными правами (775/664). Я хотел бы заметить, что для коробочных CMS это может оказаться неовзможно. Но спрошу лишь, насколько такая система прав является верной с точки зрения администратора web-сервера.
3. Мне нужно было запускать команды bash с помощью php-функции shell_exec и я обнаружил, что переменная LC_ALL для команд, запущенных таким образом не установлена. Я смог установить значение для пользователей root и user1, но с пользователем www-data возникла проблема. Я клал .bashrc с экспортом нужны переменных в папку /var/www, задавал /etc/default/locale. Но ничего не помогло. Мне
подсказали использовать /etc/environment, но, как я понял - это совсем не best parctices, поэтому предпочёл использовать для установки LC_ALL php-функцию setlocale. Проблема в том, что эта функция задаёт переменную только для среды PHP. Переменная в bash остаётся недоступной. Возможно есть способ задать временную переменную окружения для bash с помощью shell_exec перед выполнением самой команды, но я так и не разобрался как это сделать.
Так как в итоге правильно настроить права, чтобы не было проблем c доступом к файлам, и переменная LC_ALL не была пустой?