解決非 root 使用者存取 中的檔案所產生的問題 IBM Cloud
在應用程式部署中使用 runAsUser 時,解決非 root 使用者存取上傳至 IBM Cloud 的檔案所產生的問題,包括權限相關問題。
虛擬私有雲 經典基礎架構
您已使用主控台或 REST API,將檔案上傳至 IBM Cloud Object Storage 服務實例。 當您嘗試在應用程式部署中以使用 runAsUser 所定義的非 root 使用者身分存取這些檔案時,會拒絕對檔案的存取。
在 Linux 中,檔案或目錄有三個存取群組:Owner、Group 及 Other。 當您使用主控台或 REST API 將檔案上傳至 IBM Cloud Object Storage 時,會移除 Owner、Group 及 Other 的許可權。 每個檔案的許可權都如下所示:
d--------- 1 root root 0 Jan 1 1970 <file_name>
當您使用 IBM Cloud Object Storage 外掛程式上傳檔案時,會保留檔案的許可權而且不會變更。
若要使用非 root 使用者身分存取檔案,非 root 使用者必須具有該檔案的讀取及寫入權。 作為 Pod 部署的一部分,變更檔案的權限需要進行寫入作業。IBM Cloud Object Storage 並非為寫入工作負載而設計。
在 Pod 部署期間更新許可權可能會讓您的 Pod 無法進入 Running 狀態。
若要解決此問題,在將 PVC 裝載至應用程式 Pod 之前,請建立另一個 Pod 以設定非 root 使用者的正確許可權。
-
若要檢查儲存區中檔案的許可權,請建立
test-permissionPod 的配置檔,並將檔案命名為test-permission.yaml。apiVersion: v1 kind: Pod metadata: name: test-permission spec: containers: - name: test-permission image: nginx volumeMounts: - name: cos-vol mountPath: /test volumes: - name: cos-vol persistentVolumeClaim: claimName: <pvc_name> -
建立
test-permissionPod。oc apply -f test-permission.yaml -
登入 Pod。
oc exec test-permission -it bash -
導覽至您的裝載路徑,並列出檔案的許可權。
cd test && ls -al輸出範例
d--------- 1 root root 0 Jan 1 1970 <file_name> -
刪除 Pod。
oc delete pod test-permission -
建立您用來更正檔案許可權之 Pod 的配置檔,並將它命名為
fix-permission.yaml。apiVersion: v1 kind: Pod metadata: name: fix-permission namespace: <namespace> spec: containers: - name: fix-permission image: busybox command: ['sh', '-c'] args: ['chown -R <nonroot_userID> <mount_path>/*; find <mount_path>/ -type d -print -exec chmod u=+rwx,g=+rx {} \;'] volumeMounts: - mountPath: "<mount_path>" name: cos-volume volumes: - name: cos-volume persistentVolumeClaim: claimName: <pvc_name> -
建立
fix-permissionPod。oc apply -f fix-permission.yaml -
等待 Pod 進入
Completed狀態。oc get pod fix-permission -
刪除
fix-permissionPod。oc delete pod fix-permission -
重建您稍早用來檢查許可權的
test-permissionPod。oc apply -f test-permission.yaml
確認檔案的權限是否已更新
-
登入 Pod。
oc exec test-permission -it bash -
導覽至您的裝載路徑,並列出檔案的許可權。
cd test && ls -al輸出範例
-rwxrwx--- 1 <nonroot_userID> root 6193 Aug 21 17:06 <file_name> -
刪除
test-permissionPod。oc delete pod test-permission -
使用非 root 使用者身分,將 PVC 裝載至應用程式。
在部署 YAML 中,將 runAsUser 及 fsGroup 設為相同的值。
在您的 IBM Cloud Object Storage 服務實例中設定正確的檔案權限後,請勿透過控制台或 REST API 上傳檔案。 請使用 IBM Cloud Object Storage 外掛程式,將檔案新增至服務實例。