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:
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.