IBM Cloud Docs
Pourquoi les utilisateurs non root ne peuvent-ils pas accéder aux fichiers ?

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.

  1. Pour vérifier les droits de vos fichiers dans votre compartiment, créez un fichier de configuration pour votre pod test-permission et nommez le fichier 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>
    
  2. Créez le pod test-permission.

    kubectl apply -f test-permission.yaml
    
  3. Connectez-vous à votre pod.

    kubectl exec test-permission -it bash
    
  4. Accédez à votre chemin de montage et répertoriez les droits correspondant à vos fichiers.

    cd test && ls -al
    

    Exemple de sortie

    d--------- 1 root root 0 Jan 1 1970 <file_name>
    
  5. Supprimez le pod.

    kubectl delete pod test-permission
    
  6. 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>
    
  7. Créez le pod fix-permission.

    kubectl apply -f fix-permission.yaml
    
  8. Patientez jusqu'à ce que le pod passe à l'état Completed.

    kubectl get pod fix-permission
    
  9. Supprimez le pod fix-permission.

    kubectl delete pod fix-permission
    
  10. Recréez le pod test-permission que 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

  1. Connectez-vous à votre pod.

    kubectl exec test-permission -it bash
    
  2. Accédez à votre chemin de montage et répertoriez les droits correspondant à vos fichiers.

    cd test && ls -al
    

    Exemple de sortie

    -rwxrwx--- 1 <nonroot_userID> root 6193 Aug 21 17:06 <file_name>
    
  3. Supprimez le pod test-permission.

    kubectl delete pod test-permission
    
  4. 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.