Кубернетес контейнерный владелец файлов

У меня есть Debian box с Kubernetes, там я получил ВСЕ мои производственные среды с почти 50 развертываниями. Моя проблема заключается в том, что в одном из модулей, который работает на сервере Odoo в качестве непривилегированного пользователя, некоторые файлы (не все) создаются с пользователем root в качестве владельца.

это мое развертывание yaml:

---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  namespace: odoo
  name: app
spec:
  selector:
    matchLabels:
      app: odoo
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: odoo
    spec:
      securityContext:
        fsGroup: 1000
      containers:
      - name: odoo
        image: my-odoo
        command:
        - /docker-entrypoint.sh
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: odoo
        - containerPort: 110
          name: pop3
        - containerPort: 995
          name: pop3s
        - containerPort: 25
          name: smtp
        - containerPort: 993
          name: imaps
        volumeMounts:
        - name: home
          mountPath: /home
        - name: maildir
          mountPath: /var/mail
      volumes:
        - name: maildir
          hostPath:
            path: /mnt/odoo/maildir
        - name: home
          hostPath:
            path: /mnt/odoo/home

В моем скрипте точки входа я запускаю odoo, используя supervisord, вот мой conf:

[group:odoo]
programs = odoo-web, odoo-monitor, odoo-beat, odoo-worker-default-0, odoo-worker-cdr-1, odoo-worker-notifications-2, odoo-worker-default-notifications-3

[program:odoo-web]
user = odoo
directory = /home/odoo/var/run
command = /home/odoo/bin/odoo-bin --proxy-mode


[program:odoo-worker-default-0]
user = odoo
directory = /home/odoo/var/run
command = /home/odoo/bin/odoo-bin celery worker -l INFO -n default-0@%%h -c4 -Q odoo-10.0.default

[program:odoo-worker-cdr-1]
user = odoo
directory = /home/odoo/var/run
command = /home/odoo/bin/odoo-bin celery worker -l INFO -n cdr-1@%%h -c1 -Q odoo-10.0.cdr

[program:odoo-worker-notifications-2]
user = odoo
directory = /home/odoo/var/run
command = /home/odoo/bin/odoo-bin celery worker -l INFO -n notifications-2@%%h -c2 -Q odoo-10.0.notifications

[program:odoo-worker-default-notifications-3]
user = odoo
directory = /home/odoo/var/run
command = /home/odoo/bin/odoo-bin celery worker -l INFO -n default-notifications-3@%%h -c2 -Q odoo-10.0.default,odoo-10.0.notifications


[program:odoo-beat]
user = odoo
directory = /home/odoo/var/run
command = /home/odoo/bin/odoo-bin celery beat -s /home/odoo/var/celerybeat-schedule

[program:odoo-monitor]
user = odoo
directory = /home/odoo/var/run
command = /home/odoo/bin/odoo-bin celery flower`

Как вы можете видеть, все процессы выполняются от имени пользователя odoo, который имеет uid 1000.

Моя базовая файловая система docker - overlay2.

Может кто-нибудь сказать мне, почему я запутался владелец в файлах, созданных некорневым процессом?

2 ответа

Решение

Ну, я нашел обходной путь: пользователь, которого я использую для запуска odoo, может делать sudo без пароля. Я удалил это. Теперь файлы не получают неправильных разрешений, поэтому это может быть ошибка в Odoo или в одной из его зависимостей или в самом Python, которая позволяет обычному пользователю стать суперпользователем с sudo, если в sudoers указан NOPASSWD.

Как user1330614 в комментариях:

Я заметил, что пользователь, которого я использую для запуска odoo, может делать sudo без пароля. Я удалил это. Теперь файлы не получают неправильных разрешений, поэтому это может быть ошибка в Odoo или в одной из его зависимостей или в самом Python, которая позволяет обычному пользователю стать суперпользователем с sudo, если NOPASSWD указано в sudoers,

Тем не менее, Tim Hockin предложил протестировать текущего пользователя контейнера, потому что:

Вы утверждали, что серверные модули Odoo работают как непривилегированные, но не настроены runAsUser в любом месте, поэтому они, вероятно, все еще работают от имени пользователя root:

  • kubectl exec -ti в ваш контейнер
  • бежать id и посмотрите, что такое uid / gid.
Другие вопросы по тегам