解决非root用户访问文件时遇到的问题 IBM Cloud
在应用程序部署中使用 runAsUser 时,解决非 root 用户访问上传至 IBM Cloud 的文件时遇到的问题,包括权限问题。
虚拟私有云 传统基础设施
您已使用控制台或 REST API 将文件上传到 IBM Cloud Object Storage 服务实例。 在尝试使用通过 runAsUser 在应用程序部署中定义的非 root 用户访问这些文件时,将拒绝对文件的访问。
在 Linux 中,文件或目录具有 3 个访问组: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 安装到应用程序。
将 runAsUser 和 fsGroup 设置为部署 YAML 中的相同值。
在 IBM Cloud Object Storage 服务实例中设置正确的文件权限后,请勿通过控制台或REST API上传文件。 使用 IBM Cloud Object Storage 插件以将文件添加到服务实例。