www-data пользователь и id 33

Давайте разберемся, что это за пользователь и как его используют приложения.

ubuntu - новоустановленная убунта сразу имеет пользователя www-data (id=33)

nginx - по-умолчанию запускается на 80 порту (80 порт может открывать только root-пользователь), но внутри nginx обрабатывает все запросы от пользователя www-data (id=33). Так, если зайти в docker-образ nginx, то мы видим что внутри тоже есть пользователь www-data (id=33).

Забавно, что "nginx:1.25.4-alpine" по-умолчанию работает от: uid=101(nginx) gid=101(nginx) groups=101(nginx),101(nginx) и внутри контейнера вообще нет пользователя www-data (id=33).

php-fpm - запускается от того пользователя, от которого запускается, например можно запустить его от www-data:

docker run --rm -u "www-data" php:8.3.3-fpm-alpine php-fpm -i

а если заглянуть в php:8.3.3-fpm-alpine, то увидим, что пользователь www-data имеет id=88, неожиданно, правда?

Мне же удобно в докер-контейнере иметь те же права, что и на хост-машине, поэтому я меняю ID пользователю www-data в контейнере на 1000:

ENV UID=1000
ENV GID=1000
ENV USER=www-data
ENV GROUP=www-data

# чтобы заполучить usermod, нам потребуется установить пакет shadow, в которую входит usermod
RUN apk --no-cache add shadow

# директория /home/www-data указана потому, что когда разработчик использует ssh-агента, то в /home/www-data создаются файлы, например /home/www-data/.ssh/known_hosts
RUN usermod -u $UID $USER --home /home/www-data && groupmod -g $GID $GROUP

и для ubuntu:

RUN usermod -u $UID $USER --home /home/www-data && groupmod -g $GID $GROUP
RUN mkdir /home/www-data

Я даже меняю пользователя, от которого по-умолчанию запускается контейнер на пользователя www-data:

# чтобы даже консольные команды выполнялись от пользователя www-data
USER $USER

Таким образом www-data имеет разные ID в разных местах, а вот что с этим делать, решать Вам, а я для себя решил так:

  • php-fpm - создавая файлы дает права всем желающим читать их (0775)
  • nginx - ничего с файлами не делает, только читает их, так что прав ему хватает.

Почему мы не www-data пользователи

ОС устанавливаясь предлагает нам завести пользователя, а могла бы просто давать нам пользователя www-data, вот почему:

  • мы как пользователи, можем авторизоваться (это видно в файле /etc/passwd), а www-data не может
  • мы как пользователи, любим себе давать права устанавливать ПО без ввода пароля (например через sudo visudo)
  • мы как пользователи, любим давать себе права на доступ по SSH, пользователю www-data все это не нужно

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


11.09.2021 07:08

Комментарии

Комментариев пока нет.


Copyrights © 2007 - 2026 YaPro.Ru