Docker
Kubernetes 容器混亂文件所有者
我有一個執行 Kubernetes 的 Debian 盒子,在那裡我得到了我所有的生產環境,有近 50 個部署。我的問題是,在其中一個以非特權使用者身份執行 Odoo 伺服器的 pod 中,一些文件(不是全部)是以 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
在我的入口點腳本中,我使用 supervisord 執行 odoo,這是我的 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。
誰能告訴我為什麼我在非根程序創建的文件中搞砸了所有者?
好吧,我找到了一種解決方法:我用來執行 odoo 的使用者可以在沒有密碼的情況下執行 sudo。我已經刪除了。現在文件沒有獲得錯誤的權限,因此它可能是 Odoo 或其中一個依賴項或 python 本身中的錯誤,如果在 sudoers 中指定了 NOPASSWD,則允許普通使用者成為超級使用者 sudo。
正如 評論中提到的user1330614 :
我注意到我用來執行 odoo 的使用者
sudo
無需密碼即可。我已經刪除了。現在文件沒有獲得錯誤的權限,因此它可能是 Odoo 或其中一個依賴項或 python 本身中的一個錯誤,它允許普通使用者成為超級使用者sudo
,如果NOPASSWD
在sudoers
.然而,蒂姆霍金建議測試目前容器使用者,因為:
您斷言 Odoo 伺服器 pod 以非特權身份執行,但您沒有在
runAsUser
任何地方設置,因此它們可能仍以 root 身份執行:
kubectl exec -ti
進入你的容器- 執行
id
並查看 uid/gid 是什麼。