Resolução de problemas de acesso de usuários não root a arquivos em IBM Cloud
Resolva problemas de acesso de usuários não root a arquivos enviados para IBM Cloud ao utilizar o runAsUser na implantação do seu aplicativo, incluindo permissões.
Nuvem privada virtual Infraestrutura clássica
Você transferiu por upload os arquivos para a sua instância de serviço do IBM Cloud Object Storage usando o console ou a API de REST. Quando você tenta acessar esses arquivos com um usuário não raiz definido com runAsUser em sua implementação
de app, o acesso aos arquivos é negado.
No Linux, um arquivo ou um diretório tem três grupos de acesso: Owner, Group e Other. Ao fazer upload de um arquivo para o IBM Cloud Object Storage usando o console ou a API de REST, as permissões para o
Owner, Group e Other serão removidas. A permissão de cada arquivo é semelhante à seguinte:
d--------- 1 root root 0 Jan 1 1970 <file_name>
Ao fazer upload de um arquivo usando o plug-in IBM Cloud Object Storage, as permissões para o arquivo são preservadas e não mudam.
Para acessar o arquivo com um usuário não raiz, o usuário não raiz deve ter permissões de leitura e gravação para o arquivo. A mudança da permissão em um arquivo como parte da implantação de pod requer uma operação de gravação. O IBM Cloud Object Storage não é projetado para cargas de trabalho de gravação.
A atualização de permissões durante a implementação do pod pode evitar que seu pod entre em um estado Running.
Para resolver esse problema, antes de montar o PVC em seu pod de app, crie outro pod para configurar a permissão correta para o usuário não raiz.
-
Para verificar as permissões de seus arquivos em seu depósito, crie um arquivo de configuração para o seu pod
test-permissione nomeie o arquivotest-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> -
Crie o pod
test-permission.oc apply -f test-permission.yaml -
Efetue login em seu pod.
oc exec test-permission -it bash -
Navegue para o caminho de montagem e liste as permissões para seus arquivos.
cd test && ls -alSaída de exemplo
d--------- 1 root root 0 Jan 1 1970 <file_name> -
Exclua o pod.
oc delete pod test-permission -
Crie um arquivo de configuração para o pod que você usar para corrigir as permissões de seus arquivos e nomeie-o como
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> -
Crie o pod
fix-permission.oc apply -f fix-permission.yaml -
Espere o pod entrar em um estado
Completed.oc get pod fix-permission -
Exclua o pod
fix-permission.oc delete pod fix-permission -
Recrie o pod
test-permissionque você usou anteriormente para verificar as permissões.oc apply -f test-permission.yaml
Verificando se as permissões de seus arquivos estão atualizadas
-
Efetue login em seu pod.
oc exec test-permission -it bash -
Navegue para o caminho de montagem e liste as permissões para seus arquivos.
cd test && ls -alSaída de exemplo
-rwxrwx--- 1 <nonroot_userID> root 6193 Aug 21 17:06 <file_name> -
Exclua o pod
test-permission.oc delete pod test-permission -
Monte o PVC para o app com o usuário não raiz.
Configure runAsUser e fsGroup para os mesmos valores em seu YAML de implementação
Depois de configurar as permissões corretas de arquivo na instância de serviço do IBM Cloud Object Storage, não faça o upload de arquivos usando o console ou a API de REST. Use o plug-in do IBM Cloud Object Storage para incluir arquivos em sua instância de serviço.