Resolución de problemas de acceso de usuarios que no son root a archivos en IBM Cloud
Resuelve los problemas de acceso de usuarios que no sean root a los archivos subidos a IBM Cloud cuando utilices en runAsUser la implementación de tu aplicación, incluidos los permisos.
Nube privada virtual Infraestructura clásica
Ha subido archivos a la instancia de servicio de IBM Cloud Object Storage utilizando la consola o la API REST. Cuando intenta acceder a estos archivos con un usuario no root que ha definido con runAsUser en el despliegue de la app,
se deniega el acceso a los archivos.
En Linux, un archivo o un directorio tienen tres grupos de acceso: Owner, Group y Other. Cuando sube un archivo a IBM Cloud Object Storage mediante la consola o la API REST, se eliminan los permisos de Owner,
Group y Other. El permiso de cada archivo tiene el aspecto siguiente:
d--------- 1 root root 0 Jan 1 1970 <file_name>
Cuando carga un archivo utilizando el plugin de IBM Cloud Object Storage, los permisos para el archivo se conservan y no se modifican.
Para acceder al archivo con un usuario no root, el usuario no root debe tener permisos de lectura y escritura en el archivo. Para cambiar el permiso de un archivo como parte del despliegue de pod, es necesaria una operación de grabación. IBM Cloud Object Storage no está diseñado para cargas de trabajo de grabación.
La actualización de permisos durante el despliegue de pod puede impedir que el pod pase a un estado Running.
Para resolver este problema, antes de montar la PVC en el pod de la app, cree otro pod para establecer el permiso correcto para el usuario no root.
-
Para comprobar los permisos de los archivos del grupo, cree un archivo de configuración para el pod
test-permissiony asigne un nombre al archivotest-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> -
Cree el pod
test-permission.oc apply -f test-permission.yaml -
Inicie una sesión en el pod.
oc exec test-permission -it bash -
Vaya a la vía de acceso de montaje y liste los permisos de los archivos.
cd test && ls -alSalida de ejemplo
d--------- 1 root root 0 Jan 1 1970 <file_name> -
Suprima el pod.
oc delete pod test-permission -
Cree un archivo de configuración para el pod que utilice para corregir los permisos de los archivos y denomínelo
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> -
Cree el pod
fix-permission.oc apply -f fix-permission.yaml -
Espere a que el pod pase al estado
Completed.oc get pod fix-permission -
Suprima el pod
fix-permission.oc delete pod fix-permission -
Vuelva a crear el pod
test-permissionque ha utilizado anteriormente para comprobar los permisos.oc apply -f test-permission.yaml
Verificar que se han actualizado los permisos de los archivos
-
Inicie una sesión en el pod.
oc exec test-permission -it bash -
Vaya a la vía de acceso de montaje y liste los permisos de los archivos.
cd test && ls -alSalida de ejemplo
-rwxrwx--- 1 <nonroot_userID> root 6193 Aug 21 17:06 <file_name> -
Suprima el pod
test-permission.oc delete pod test-permission -
Monte la PVC en la app con el usuario no root.
Establezca runAsUser y fsGroup en los mismos valores en el YAML de despliegue.
Después de establecer los permisos de archivo correctos en la instancia de servicio de IBM Cloud Object Storage, no suba archivos utilizando la consola o la API REST. Utilice el plugin de IBM Cloud Object Storage para añadir archivos a la instancia de servicio.