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.
-
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 Namentest-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> -
Erstellen Sie den Pod
test-permission.oc apply -f test-permission.yaml -
Melden Sie sich bei Ihrem Pod an.
oc exec test-permission -it bash -
Navigieren Sie zu Ihrem Mountpfad und listen Sie die Berechtigungen für Ihre Dateien auf.
cd test && ls -alBeispielausgabe
d--------- 1 root root 0 Jan 1 1970 <file_name> -
Löschen Sie den Pod.
oc delete pod test-permission -
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> -
Erstellen Sie den Pod
fix-permission.oc apply -f fix-permission.yaml -
Warten Sie, bis der Pod in den Status
Completedwechselt.oc get pod fix-permission -
Löschen Sie den Pod
fix-permission.oc delete pod fix-permission -
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
-
Melden Sie sich bei Ihrem Pod an.
oc exec test-permission -it bash -
Navigieren Sie zu Ihrem Mountpfad und listen Sie die Berechtigungen für Ihre Dateien auf.
cd test && ls -alBeispielausgabe
-rwxrwx--- 1 <nonroot_userID> root 6193 Aug 21 17:06 <file_name> -
Löschen Sie den Pod
test-permission.oc delete pod test-permission -
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.