Comments 13
Ядро Linux умеет это делать с 70-х годов.
А винда ещё с 50-x!
Отличная статья!
Спасибо Большое!
В chmod 4750 весь смысл
Докер-файл:
RUN ... && chmod 4755 suex
у вас отличное внимание! 👍 но я исправлять не буду, потому что в этом примере это не принципиально важно. даже с маской 4755 ничего посторонний пользователь сделать не сможет. он должен быть в группе suex по-любому
а, кстати, есть плюс использования маски 4755 в контейнере.
если юзер не в группе suex, то в логах будет четко об это написано.
если поставить маску 4750, то в логах будет только "Permission denied", что может усложнить поиск проблемы из-за отсутствия контекста.
Так и не понял, зачем запускать скрипт entrypoint от рута вместо того, чтобы сразу запускать команду от нужного пользователя, указав его в Dockerfile, docker-compose или в манифесте деплоймента в k8s.
Я правильно понимаю, что единственная причина использовать suex в контейнере - это необходимость сделать что-то при запуске сначала от рута, а уже потом сбросить привилегии для запуска?
Если всё уже заранее приготовлено при билде - то мы можем просто сделать USER app в докерфайле и это будет даже проще?
да, вы правы, но в сложных пайплайнах в CI/CD есть много нюансов.
CI/CD не всегда выполняется в контейнере, часто используются bash скрипты c динамической логикой и гейтами.
не стоит преуменьшать сферу применения до одного Dockerfile.
у меня лично десятки юскейсов, в которых мне удобно повседневно использовать `suex cat something` или `sush postgres` и тд без конфигов sudo
# Инициализация, требующая рута
chown -R app:app /data
# Заменяем себя на приложение от имени app-юзера
exec suex app "$@"в этом примере если в Dockerfile поставить USER app перед ENTRYPOINT, тогда в скрипте всё равно нужны права рута для chown ...

sudo исполняется 45. Вашему контейнеру — всё равно