Behebung von Zugriffsproblemen für Nicht-Root-Benutzer auf Dateien in IBM Cloud

Beheben Sie Probleme beim Zugriff von Nicht-Root-Benutzern auf Dateien, die auf IBM Cloud hochgeladen wurden, wenn Sie bei runAsUser der Bereitstellung Ihrer App verwenden, einschließlich der Berechtigungen.

Virtuelle Private Cloud Klassische Infrastruktur

Sie haben Dateien über die Konsole oder die REST-API in Ihre IBM Cloud Object Storage-Serviceinstanz hochgeladen. Wenn Sie versuchen, auf diese Dateien als Benutzer ohne Rootberechtigung zuzugreifen, den Sie in der App-Bereitstellung mit runAsUser definiert haben, wird der Zugriff auf die Dateien verweigert.

Unter Linux hat eine Datei oder ein Verzeichnis drei Zugriffsgruppen: Owner, Group und Other. Wenn Sie eine Datei über die Konsole oder die REST-API in IBM Cloud Object Storage hochladen, werden die Berechtigungen für Owner, Group und Other entfernt. Die Berechtigung der einzelnen Dateien sieht wie folgt aus:

d--------- 1 root root 0 Jan 1 1970 <file_name>

Wenn Sie eine Datei mithilfe des IBM Cloud Object Storage-Plug-ins hochladen, werden die Berechtigungen für die Datei beibehalten und nicht geändert.

Um auf die Datei als Benutzer ohne Rootberechtigung zugreifen zu können, muss der Benutzer ohne Rootberechtigung über Lese- und Schreibberechtigungen für die Datei verfügen. Das Ändern der Berechtigung für eine Datei als Teil Ihrer Podbereitstellung erfordert eine Schreiboperation. IBM Cloud Object Storage ist nicht für Schreibworkloads konzipiert.

Durch die Aktualisierung der Berechtigungen während der Podbereitstellung kann verhindert werden, dass Ihr Pod in den Status Running wechselt.

Um dieses Problem zu beheben, müssen Sie vor dem Anhängen des PVC an Ihren App-Pod einen weiteren Pod erstellen, um die richtige Berechtigung für den Benutzer ohne Rootberechtigung festzulegen.

  1. Um die Berechtigungen Ihrer Dateien in Ihrem Bucket zu überprüfen, erstellen Sie eine Konfigurationsdatei für Ihren test-permission-Pod und geben Sie der Datei den Namen 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. Erstellen Sie den Pod test-permission.

    oc apply -f test-permission.yaml
    
  3. Melden Sie sich bei Ihrem Pod an.

    oc exec test-permission -it bash
    
  4. Navigieren Sie zu Ihrem Mountpfad und listen Sie die Berechtigungen für Ihre Dateien auf.

    cd test && ls -al
    

    Beispielausgabe

    d--------- 1 root root 0 Jan 1 1970 <file_name>
    
  5. Löschen Sie den Pod.

    oc delete pod test-permission
    
  6. Erstellen Sie eine Konfigurationsdatei für den Pod, die Sie verwenden, um die Berechtigungen Ihrer Dateien zu korrigieren, und geben Sie ihr den Namen 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. Erstellen Sie den Pod fix-permission.

    oc apply -f fix-permission.yaml
    
  8. Warten Sie, bis der Pod in den Status Completed wechselt.

    oc get pod fix-permission
    
  9. Löschen Sie den Pod fix-permission.

    oc delete pod fix-permission
    
  10. Erstellen Sie wieder den Pod test-permission, den Sie zuvor verwendet haben, um die Berechtigungen zu überprüfen.

    oc apply -f test-permission.yaml
    

Überprüfen Sie, ob die Berechtigungen für Ihre Dateien aktualisiert werden

  1. Melden Sie sich bei Ihrem Pod an.

    oc exec test-permission -it bash
    
  2. Navigieren Sie zu Ihrem Mountpfad und listen Sie die Berechtigungen für Ihre Dateien auf.

    cd test && ls -al
    

    Beispielausgabe

    -rwxrwx--- 1 <nonroot_userID> root 6193 Aug 21 17:06 <file_name>
    
  3. Löschen Sie den Pod test-permission.

    oc delete pod test-permission
    
  4. Hängen Sie den PVC mit dem Benutzer ohne Rootberechtigung an die App an.

Legen Sie für runAsUser und fsGroup dieselben Werte in Ihrer YAML-Implementierungsdatei fest.

Nachdem Sie die korrekten Dateiberechtigungen in Ihrer IBM Cloud Object Storage-Serviceinstanz festgelegt haben, laden Sie Dateien nicht über die Konsole oder die REST-API hoch. Verwenden Sie das IBM Cloud Object Storage-Plug-in, um Dateien zu Ihrer Serviceinstanz hinzuzufügen.