Pourquoi les utilisateurs non root ne peuvent-ils pas accéder aux fichiers ?
Virtual Private Cloud Infrastructure classique
Vous avez téléchargé des fichiers dans votre instance de service IBM Cloud Object Storage en utilisant la console ou l'API REST. Lorsque vous tentez d'accéder à ces fichiers avec un utilisateur non root que vous avez défini avec runAsUser dans votre déploiement d'application, l'accès aux fichiers est refusé.
Dans Linux, un fichier ou un répertoire comporte trois groupes d'accès : Owner, Group et Other. Lorsque vous téléchargez un fichier dans IBM Cloud Object Storage en utilisant la console ou l'API REST, les
droits pour les groupes Owner, Group et Other sont retirés. Le droit sur chaque fichier se présente comme suit :
d--------- 1 root root 0 Jan 1 1970 <file_name>
Lorsque vous téléchargez un fichier en utilisant le plug-in IBM Cloud Object Storage, les droits correspondant à ce fichier sont conservés et ne changent pas.
Pour accéder au fichier avec un utilisateur non root, cet utilisateur doit disposer des droits en lecture et en écriture pour le fichier. La modification des droits sur un fichier dans le cadre de votre déploiement de pod nécessite une opération d'écriture. IBM Cloud Object Storage n'est pas conçu pour les charges de travail d'écriture.
La mise à jour des droits lors du déploiement du pod peut empêcher votre pod de passer à l'état Running (en cours d'exécution).
Pour y remédier, avant de monter la réservation de volume persistant sur votre pod d'application, créez un autre pod pour définir les droits nécessaires pour l'utilisateur non root.
-
Pour vérifier les droits de vos fichiers dans votre compartiment, créez un fichier de configuration pour votre pod
test-permissionet nommez le fichiertest-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> -
Créez le pod
test-permission.kubectl apply -f test-permission.yaml -
Connectez-vous à votre pod.
kubectl exec test-permission -it bash -
Accédez à votre chemin de montage et répertoriez les droits correspondant à vos fichiers.
cd test && ls -alExemple de sortie
d--------- 1 root root 0 Jan 1 1970 <file_name> -
Supprimez le pod.
kubectl delete pod test-permission -
Créez un fichier de configuration pour le pod que vous utilisez pour corriger les droits de vos fichiers et nommez-le
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> -
Créez le pod
fix-permission.kubectl apply -f fix-permission.yaml -
Patientez jusqu'à ce que le pod passe à l'état
Completed.kubectl get pod fix-permission -
Supprimez le pod
fix-permission.kubectl delete pod fix-permission -
Recréez le pod
test-permissionque vous avez utilisé auparavant pour vérifier les droits.kubectl apply -f test-permission.yaml
Procédure visant à vérifier que les droits pour vos fichiers sont mis à jour
-
Connectez-vous à votre pod.
kubectl exec test-permission -it bash -
Accédez à votre chemin de montage et répertoriez les droits correspondant à vos fichiers.
cd test && ls -alExemple de sortie
-rwxrwx--- 1 <nonroot_userID> root 6193 Aug 21 17:06 <file_name> -
Supprimez le pod
test-permission.kubectl delete pod test-permission -
Montez la réservation de volume persistant sur l'application avec l'utilisateur non root.
Définissez runAsUser et fsGroup sur les mêmes valeurs dans votre fichier YAML de déploiement.
Une fois que vous avez défini les droits d'accès au fichier corrects dans votre instance de service IBM Cloud Object Storage, ne téléchargez pas de fichiers à l'aide de la console ou de l'API REST. Utilisez le plug-in IBM Cloud Object Storage pour ajouter des fichiers dans votre instance de service.