Skip to content

Conversation

@nkiryanov
Copy link
Contributor

Создаём юзера web и запускаем процесс в контейнерах от его имени

@nkiryanov nkiryanov force-pushed the run-backend-services-with-resticted-user branch from 6ce4699 to 9da3a81 Compare May 2, 2025 09:34
@nkiryanov nkiryanov requested a review from kazqvaizer May 2, 2025 09:35
Copy link
Contributor

@kazqvaizer kazqvaizer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кайф. А celery и beat работают норм, пробовал?

@nkiryanov
Copy link
Contributor Author

Кайф. А celery и beat работают норм, пробовал?

угу: проверил что запускаются норм, что scheduler задачи создаёт и worker-ы выполняют.
пруф-скриншот правда не приложу — не сохранил, а запускать ещё раз лень :)

@nkiryanov nkiryanov merged commit 68cce9a into master May 3, 2025
3 checks passed
@nkiryanov nkiryanov deleted the run-backend-services-with-resticted-user branch May 3, 2025 07:06
Comment on lines 56 to +61
WORKDIR /code/src

RUN chmod +x ./manage.py
RUN ./manage.py compilemessages
RUN ./manage.py collectstatic --noinput
RUN python manage.py compilemessages
RUN python manage.py collectstatic --noinput

USER web
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nkiryanov а может еще USER web перед compilemessages и collectstatic поставить?

тогда созданные файлы будут принадлежать web-у. Так же, чисто теоретически, не получится сделать атаку, что какая-то хрень в них из под рута запустится.

Copy link
Contributor Author

@nkiryanov nkiryanov May 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Так же, чисто теоретически, не получится сделать атаку, что какая-то хрень в них из под рута запустится.

Если правильно понимаю это безопасность не повысит: важно ведь не кто owner у файла, а каким юзером они запускаются.

Тут даже наоборот: если поставить USER web перед collectstatic, то не получится статику собрать, т.к. пишем её в /var/lib/django-static и не хватит прав на запись. То есть можно права на /var/lib/django-static на web поменять после выполнения, но кажется смысла в этом нет — я проверял что есть права на чтение у web и раздаётся ок.

Но! Это удивило, но что-то не сообразил сразу сделать issue — а сфига статика в /var/lib/django-static собирается. Походу у нас древняя ошибка в settings.STATIC_ROOT — там релатив путь, хотя обычно ожидаешь абсолютный и возможно ноги из этого растут.

Сделаю новый issue разобраться с этим — прежде всего интересует откуда берётся /var/lib/django-static и куда по уму собирать. Глядишь и в Makefile не будем папку с статикой создавать, т.к. создадим в процессе bootstrap.

update:
Новый issue сделал разобраться с relative статикой. Откуда /var/lib/django-static — всё понятно (в dockerfile).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Согласен со Славой насчет

тогда созданные файлы будут принадлежать web-у.

Мы создаем юзера, который запускает процесс в контейнере и может работать только со своими файлами. В этом смысле, chown`нить файлы имеет смысл, чтобы образ был целостным.

Навсякий, идея всей задачи уберечься от какого-нибудь zero-day в котором рут пользователь изнутри контейнера может получить доступ к руту хоста, а для этого нужно максимально сузить доступы основного юзера в образе.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

не получится сделать атаку, что какая-то хрень в них из под рута запустится.
важно ведь не кто owner у файла, а каким юзером они запускаются.

Тут в голову лезет сценарий, что кто-то проник в репозиторий и деплоит код, в котором вместо джанговской collectstatic выполняется своя рутовая команда в кастомном collectstatic. Как раз, чтобы прав не хватило на это.

Новый issue сделал разобраться с relative статикой.
круть! Про это не думал.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

4 participants