Informazioni sulle autorizzazioni di directory in UNIX

6

Ho cercato di imparare Unix e Terminal un po 'meglio, e mi sono imbattuto in un comportamento che non capisco. Sperando che qualcuno possa spiegarmi cosa mi manca.

Ultimamente sto sperimentando le autorizzazioni sulle directory. Da ciò che ho (pensato) ho capito, leggere il permesso significa che puoi visualizzare il contenuto di una directory (ad esempio, ls directory dovrebbe elencare il contenuto della directory); permesso di scrittura significa che è possibile creare, modificare o eliminare file nella directory (ad esempio touch directory/newfile o vi directory/fileimade o rm directory/fileihate , tutto dovrebbe funzionare); ed esegui il permesso significa che puoi fare in modo che la directory sia la directory di lavoro (cioè, cd directory dovrebbe funzionare)

Ma non è quello che sto trovando.

Se ho r-- su una directory, ricevo errori durante il tentativo di cd directory o touch directory/newfile , come previsto. Ma se eseguo ls directory - beh, non ricevo un errore, ma nessun file è elencato, anche se so che ci sono file che possiedo e / o ho diritti all'interno della directory. Quindi, ls è stato eseguito correttamente ma senza dati sullo standard output. Perché no?

Se ho -w- su una directory, ricevo errori su cd e ls , come previsto. Ma se provo a creare un nuovo file - touch directory/newfile - ricevo anche un errore. Perché?

Tutte le x categorie funzionano esattamente come previsto; Posso cd nelle directory con --x , ma nient'altro. Posso cd nelle directory con -wx , creare ed eliminare file, ma ls restituisce un errore. E posso cd in r-x directory, elencarne il contenuto e lavorare sui file per i quali ho le autorizzazioni esistenti, ma non posso creare o eliminare file. Tutto questo ha senso per me.

Quindi cosa non sto capendo correttamente su r-- e -w- ?

    
posta CASmnl42 15.04.2018 - 11:42
fonte

2 risposte

6

If I have r-- on a directory, I receive errors on attempting cd directory or touch directory/newfile, as expected. But if I run ls directory -- well, I don't get an error, but no files are listed, even if I know there are files that I own and/or have rights to within the directory. So, ls has run successfully but with no data to standard output. Why not?

Se solo ls directory , i "file" all'interno di directory dovrebbero elencare, ma se utilizzi ls -l che chiama stat(2) l'operazione fallirà silenziosamente dato che stat richiede un percorso ricercabile completo all'oggetto del filesystem .

If I have -w- on a directory, I receive errors on cd and ls, as expected. But if I try to create a new file - touch directory/newfile - I also get an error. Why?

Ancora una volta touch chiama open(2) chiamata di sistema che richiede un percorso completo di ricerca (tutte le directory nel percorso sono eseguibili / ricercabili) o l'operazione fallirà.

    
risposta data 15.04.2018 - 15:35
fonte
4

Hai una buona idea delle autorizzazioni di file e directory UNIX, che è un buon inizio.

Ci sono tre tipi di permessi

  • r : autorizzazione di lettura

  • w : permesso di scrittura

  • x : autorizzazione di esecuzione

per tre categorie di proprietà

  • u : utente o proprietario

  • g : proprietario del gruppo

  • o : altri o chiunque altro

In generale, esistono due tipi di entità nel file system UNIX:

  • file

  • directory

A livello tecnico una directory non è altro che un tipo speciale di file, semplicemente contenente un elenco di file e directory contenuti al suo interno.

Ora, definiamo chiaramente che cosa significano i tre permessi (leggi, scrivi, esegui) per una directory. Supponiamo che l'utente loggato in questione sia il proprietario della directory (per mantenere le cose semplici)

  • leggi : la directory (tecnicamente il file di directory) può essere read , ad esempio il contenuto della directory può essere elencato per es. utilizzando il comando ls .

  • scrivi : la directory (tecnicamente il file di directory) può essere scritta . Ciò significa che un nuovo file / sottodirectory può essere creato ed eliminato usando comandi come touch , vim , cp ecc.

  • esegui : la directory (tecnicamente il file di directory) può essere eseguita . Ciò significa semplicemente che il proprietario può modificare questa directory, cioè cd nella directory.

Ora attentamente pensa a ciascuna delle autorizzazioni sopra discusse indipendentemente . Qui ci sono le varie possibilità di permessi e ciò che il proprietario può fare in ogni caso:

  • - - - : nessuna autorizzazione. La directory è praticamente inutile.

  • - - x : il proprietario può cambiare nella directory, ma non può né creare / eliminare file / directory, né può elencare il contenuto della directory.

  • - w - : il proprietario può creare / eliminare file / directory all'interno di questa directory, ma non può né elencarne il contenuto né modificarlo.

  • - w x : il proprietario può creare / eliminare file / directory all'interno di questa directory, cambiarlo, ma non può elencarne il contenuto.

  • r - - : il proprietario può solo elencare il contenuto della directory.

  • r - x : il proprietario non può creare / eliminare file / directory all'interno di questa directory.

  • r w - : il proprietario non può cambiare in questa directory.

  • r w x : il proprietario può eseguire tutte e tre le azioni nella directory.

Ora questo dovrebbe aiutare a ottenere una comprensione chiara di quali azioni sono possibili con quali permessi di directory.

Una volta che i concetti di cui sopra hanno un senso per te, passiamo nuovamente alle tue dichiarazioni sui problemi:

From what I (thought) I understood, read permission means you can view the contents of a directory (i.e., ls directory should list the contents of the directory);

Questo è assolutamente corretto e dovrebbe essere ovvio dalla discussione sopra.

write permission means you can create, modify, or delete files in the directory (i.e., touch directory/newfile, or vi directory/fileimade, or rm directory/fileihate, all should work);

Parzialmente corretto. Con il permesso di scrittura disponibile nella directory, puoi scrivere il file di directory , questo significa aggiungere e eliminare il file di directory. (A questo punto dovrebbe essere chiaro, ma lo ripeterò, una directory è semplicemente un file, anche se speciale, che memorizza semplicemente un elenco di tutti i file e le sottodirectory contenuti.) Ciò significa che è possibile creare ed eliminare file ( o directory) nella directory, ma non può modificare i file a meno che non sia disponibile il permesso di scrittura sul file. È possibile eliminare un file in cui non si disponga dell'autorizzazione di lettura o scrittura, poiché è disponibile il permesso di scrittura per la directory contenente. touch directory/newfile o vi directory/fileimade o rm directory/fileihate , tutto dovrebbe funzionare bene.

and execute permission means you can make the directory your working directory (i.e., cd directory should work)

assolutamente corretto.

If I have r-- on a directory, I receive errors on attempting cd directory or touch directory/newfile, as expected. But if I run ls directory -- well, I don't get an error, but no files are listed, even if I know there are files that I own and/or have rights to within the directory. So, ls has run successfully but with no data to standard output. Why not?

Hai ragione. Il caso in cui non viene mostrato alcun output si verifica quando la directory è completamente vuota. Se si dispone dell'autorizzazione di lettura su una directory, i contenuti dovrebbero essere elencati indipendentemente dall'autorizzazione su file / sottodirectory. Un'altra possibilità è che i file e le directory siano nascosti. Prova a eseguire ls -a directory . Puoi ricontrollare per assicurarti di avere i permessi di lettura sulla directory eseguendo ls -ld directory . Controlla anche l'output di alias ls .

If I have -w- on a directory, I receive errors on cd and ls, as expected. But if I try to create a new file - touch directory/newfile - I also get an error. Why?

Dovresti essere in grado di creare un file, a meno che non esistano già altri file / directory con lo stesso nome. Qual è l'errore che ottieni?

All of the x categories work exactly as expected; I can cd into directories with --x, but nothing else. I can cd into directories with -wx, create and delete files, but ls returns an error. And I can cd into r-x directories, list their contents, and work on files for which I have existing permissions, but cannot create or delete files. All these make sense to me.

So what am I not understanding correctly about r-- and -w-?

Leggi di nuovo la discussione sopra e vedi se è d'aiuto.

    
risposta data 15.04.2018 - 12:53
fonte

Leggi altre domande sui tag