Назад | Перейти на главную страницу

Владелец файлов сообщений контейнера Kubernetes

У меня есть коробка Debian, на которой запущен 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, вот мой конф:

[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.

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

Так как user1330614 упоминается в комментариях:

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

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

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

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

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