Кубернетес контейнерный владелец файлов
У меня есть 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.