-
Notifications
You must be signed in to change notification settings - Fork 39
Run backend services from restricted web user
#811
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
6ce4699 to
9da3a81
Compare
kazqvaizer
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Кайф. А celery и beat работают норм, пробовал?
угу: проверил что запускаются норм, что scheduler задачи создаёт и worker-ы выполняют. |
| 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 |
There was a problem hiding this comment.
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-у. Так же, чисто теоретически, не получится сделать атаку, что какая-то хрень в них из под рута запустится.
There was a problem hiding this comment.
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).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Согласен со Славой насчет
тогда созданные файлы будут принадлежать web-у.
Мы создаем юзера, который запускает процесс в контейнере и может работать только со своими файлами. В этом смысле, chown`нить файлы имеет смысл, чтобы образ был целостным.
Навсякий, идея всей задачи уберечься от какого-нибудь zero-day в котором рут пользователь изнутри контейнера может получить доступ к руту хоста, а для этого нужно максимально сузить доступы основного юзера в образе.
There was a problem hiding this comment.
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 статикой.
круть! Про это не думал.
Создаём юзера
webи запускаем процесс в контейнерах от его имени