Права доступа веб-приложения

Когда вы используете веб-сервер (например Apache или Nginx), то этот сервер работает от пользователя www-data, но команды в консоли вы обычно выполняете от другого пользователя (например vasya), вот тут и возникает проблема. Заключается проблема в том, что пользователь www-data создает файлы, которые пользователь vasya не может изменить/удалить. На этот счет есть ряд ниже изложенных решений.

Общая группа

Правильное решение:

  • добавить пользователя vasya в группу www-data.

Неправильные решения:

  • выполнять консольные команды от пользователя www-data (иногда, у консольного пользователя должно быть немного больше прав, например чтобы сохранять данные в определенные директории, недоступные пользователю www-data)
  • сделать так, чтобы веб-сервер (например Apache или Nginx) работал от пользователя vasya (решение совсем ужасное потому, что если в приложении веб-сервер-а или его модуле будет уязвимость, то оно получит права пользователя vasya, а мы ведь знаем, что у vasya много прав, например полный доступ по ssh)

Все бы хорошо, но иногда этого недостаточно, потому что веб-сервер может создавать файлы/директории без прав на запись для группы www-data и такое положение можно исправить одним из следующих решений.

Using ACL on a System that Supports chmod +a (macOS)

On macOS systems, the chmod command supports the +a flag to define an ACL. Use the following script to determine your web server user and grant the needed permissions:

rm -rf var/cache/*
rm -rf var/logs/*

HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)
sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" var
sudo chmod +a "$(whoami) allow delete,write,append,file_inherit,directory_inherit" var

Using ACL on a System that Supports setfacl (Linux/BSD)

Most Linux and BSD distributions don't support chmod +a, but do support another utility called setfacl. You may need to install setfacl and enable ACL support on your disk partition before using it. Then, use the following script to determine your web server user and grant the needed permissions:

HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)

# if this doesn't work, try adding '-n' option

sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var

NOTE: The first setfacl command sets permissions for future files and folders, while the second one sets permissions on the existing files and folders. Both of these commands assign permissions for the system user and the Apache user.

setfacl isn't available on NFS mount points. However, storing cache and logs over NFS is strongly discouraged for performance reasons.

На практике права, выставленные описанным выше способом, постепенно начинают «слетать» сами собой. В частности, пропадают права на запись в папки. С этим я столкнулся при автоматическом деплойменте кода сайтов с гитлаба. Поначалу всё шло хорошо. Затем rsync, который я использовал для синхронизации извне, стал жаловаться на недоступность некоторых файлов на запись. Я долго не мог понять, в чём дело, но в один прекрасный день просто решил пройтись по папкам getfacl-ом и обнаружил, что дефолтные права пользователя отсутсвуют, а ведь я ничего на сервере не менял:

user::rw-
group::r--
other::r--

Вероятно, это связано с тем, что rsync копирует директории без сключа -p (а ведь в мануале к acl сказано, что при копировании аргумент -p обязателен).

Without Using ACL

If none of the previous methods work for you, change the umask so that the cache and log directories are group-writable or world-writable (depending if the web server user and the command line user are in the same group or not). To achieve this, put the following line at the beginning of the bin/console, web/app.php and web/app_dev.php files:

umask(0002); // This will let the permissions be 0775

// or

umask(0000); // This will let the permissions be 0777

NOTE: Changing the umask is not thread-safe, so the ACL methods are recommended when they are available.

Источник: 1 - 2 - 3

Оцени публикацию:
  • 0,0
Оценили человек: 0

Похожие статьи:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2018 YaPro.Ru

Главная » Веб-мастеру » Unix »