Risoluzione dei problemi relativi all'accesso da parte di utenti non root ai file in IBM Cloud

Risolvi i problemi relativi all'accesso da parte di utenti non root ai file caricati su IBM Cloud quando utilizzi runAsUser nella distribuzione della tua app, comprese le autorizzazioni.

Virtual Private Cloud Infrastruttura classica

Hai caricato dei file nella tua istanza del servizio IBM Cloud Object Storage utilizzando la console o l'API REST. Quando provi ad accedere a questi file con un utente non root che hai definito con runAsUser nella tua distribuzione dell'applicazione, l'accesso ai file viene rifiutato.

In Linux, un file o una directory hanno tre gruppi di accesso: Owner, Group e Other. Quando carichi un file in IBM Cloud Object Storage utilizzando la console o l'API REST, le autorizzazioni per Owner, Group e Other vengono rimosse. L'autorizzazione di ciascun file si presenta così:

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

Quando carichi un file utilizzando il plugin IBM Cloud Object Storage, le autorizzazioni per il file vengono conservate e non modificate.

Per accedere al file con un utente non root, quest'ultimo deve disporre delle autorizzazioni in lettura e scrittura per il file. La modifica dei permessi di un file nell'ambito della distribuzione dei pod richiede un'operazione di scrittura. IBM Cloud Object Storage non è progettato per carichi di lavoro in scrittura.

L'aggiornamento delle autorizzazioni durante la distribuzione del pod potrebbe impedire al tuo pod di passare a uno stato di Running.

Per risolvere questo problema, prima di montare la PVC nel tuo pod dell'applicazione, crea un altro pod per impostare l'autorizzazione corretta per l'utente non root.

  1. Per controllare le autorizzazioni dei tuoi file nel bucket, crea un file di configurazione per il tuo pod test-permission e denomina il file 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. Crea il pod test-permission.

    oc apply -f test-permission.yaml
    
  3. Accedi al tuo pod.

    oc exec test-permission -it bash
    
  4. Passa al percorso di montaggio ed elenca le autorizzazioni per i tuoi file.

    cd test && ls -al
    

    Output di esempio

    d--------- 1 root root 0 Jan 1 1970 <file_name>
    
  5. Elimina il pod.

    oc delete pod test-permission
    
  6. Crea un file di configurazione per il pod che utilizzi per correggere le autorizzazioni dei tuoi file e denominalo 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. Crea il pod fix-permission.

    oc apply -f fix-permission.yaml
    
  8. Attendi che il pod passi a uno stato di Completed.

    oc get pod fix-permission
    
  9. Elimina il pod fix-permission.

    oc delete pod fix-permission
    
  10. Ricrea il pod test-permission che hai utilizzato in precedenza per controllare le autorizzazioni.

    oc apply -f test-permission.yaml
    

Verifica che i permessi dei tuoi file siano aggiornati

  1. Accedi al tuo pod.

    oc exec test-permission -it bash
    
  2. Passa al percorso di montaggio ed elenca le autorizzazioni per i tuoi file.

    cd test && ls -al
    

    Output di esempio

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

    oc delete pod test-permission
    
  4. Monta la PVC nell'applicazione con l'utente non root.

Imposta runAsUser e fsGroup agli stessi valori nel tuo YAML di distribuzione.

Dopo aver impostato i permessi corretti per i file nell'istanza del servizio IBM Cloud Object Storage, non caricare file tramite la console o l'API REST. Utilizza il plugin IBM Cloud Object Storage per aggiungere file alla tua istanza del servizio.