Come funzionano le autorizzazioni per i file?


37

Puoi spiegare brevemente i concetti principali e gli strumenti da riga di comando utilizzati per gestire le autorizzazioni dei file?

Risposte:


23

Ogni file ha diritti per tre diverse categorie:

  • il proprietario del file,
  • il gruppo associato al file e
  • tutti gli altri.

Diritti significa il diritto di leggere il file, il diritto di scrivere nel file o il diritto di eseguire il file in caso di uno script o un programma.

Nella CLI, è possibile

  • cambiare il proprietario con chown, ad eschown guillermooo
  • cambiare il gruppo con chgrp, ad eschgrp root
  • modificare i diritti con chmod, ad es. chmod u+w filename.ext(Aggiunge l'autorizzazione alla scrittura per il proprietario del file filename.ext)

Se desideri saperne di più su ciascuno di questi strumenti, apri un terminale e digita man [tool], ad es man chmod.


8
È un po 'più complicato con le directory: per accedere ai contenuti della directory è necessaria l'autorizzazione di esecuzione. Ciò significa (ad esempio) per leggere o scrivere un file, è necessario eseguire l'accesso alla directory che lo contiene, nonché le autorizzazioni appropriate sul file stesso. Questo non viene quasi mai, ma è per questo che è scarsamente documentato / capito!
Adamnfish,

Huh. Hai ragione. Lo modificherò domani, quando avrò meno sonno.
ParanoiaPuppy

1
chown guillermooonon dovrebbe essere chown guillermooo filename?
Zeynel,

32

Avvertenza: la modifica delle autorizzazioni di file e directory è potenzialmente dannosa e può rendere il sistema inutilizzabile. Quando eseguito in modo ricorsivo come root sulla strada sbagliata, potremmo arrivare a un punto in cui dovremo reinstallare Ubuntu. È quindi una buona idea non modificare le autorizzazioni al di fuori delle directory HOME e, quando possibile, evitare di eseguire ricorsivamente i comandi come root.

Autorizzazioni per i file

Ubuntu ha ereditato il concetto di autorizzazioni da Unix quando per file o directory ci sono tre attività che possiamo consentire o negare:

  • r (lettura) file / directory possono essere aperti per l'accesso in lettura.
  • w (scrittura) file / directory possono essere aperti per l'accesso in scrittura / modifica.
  • Il file x (esegui) può essere eseguito mentre un programma / directory può essere attraversato.

( Attraversare una directory significa essenzialmente usarla come parte del nome di un percorso. Vedere https://unix.stackexchange.com/a/13891 o https://unix.stackexchange.com/questions/21251 per ulteriori spiegazioni.)

Inoltre, abbiamo tre casi per i quali concediamo un'autorizzazione:

  • u (utente) al proprietario di un file viene concessa una qualsiasi delle autorizzazioni.
  • Al gruppo (gruppo) a cui appartiene il file viene concessa un'autorizzazione.
  • o (altro) a tutti gli altri viene concessa un'autorizzazione.

Ora per ottenere la combinazione di questi ordinati usiamo un sistema binario in cui ogni bit definisce un'autorizzazione. Questo può essere mostrato al meglio nella seguente tabella

    Permission | Binary | Octal  | User  | Group | Other |
    ======================================================
      r        |  100   |   4    |       |       |       |
      w        |  010   |   2    |       |       |       |
      x        |  001   |   1    |       |       |       |
    =======================================================
    Number

Ora se vogliamo per esempio

a) il proprietario di un file (= utente) ha r ead, w rito, ed e x ecute permesso,
b) del file gruppo concesso r ead ed e x ecute i permessi, e
c) tutti gli altri dovrebbero avere solo r accesso ead.

Quindi l'autorizzazione del file risultante sarà:

 u   g   o
rwx r-x r--

Per ottenere questo nei numeri ottali, ad es. per il chmodcomando o quando dobbiamo capire un messaggio di errore dobbiamo compilare la tabella sopra come di seguito:

    Permission | Binary | Octal  | User  | Group | Other |
    ======================================================
      r        |  100   |   4    |   4   |   4   |   4   |
      w        |  010   |   2    |   2   |   0   |   0   |
      x        |  001   |   1    |   1   |   1   |   0   |
    ======================================================
    Numbers add to                   7       5       4     

Ogni numero di autorizzazione deve essere aggiunto per riassumere un utente (4 + 2 + 1 = 7), un gruppo (4 + 0 + 1 = 5) e altri (4 + 0 + 0 = 4). Il numero risultante è quindi:

 u   g   o
 7   5   4

Ora abbiamo due opzioni per modificare i bit di autorizzazione con chmod:

chmod u+rwx g+rx o+r filename

o molto più semplice con

chmod 751 filename

Entrambi i comandi faranno lo stesso.

L'autorizzazione predefinita di un file appena creato nella nostra casa sarà 664 (-rw-rw-r--).

Se vogliamo che i file siano eseguibili come programmi, dovremo modificare questa autorizzazione.

  • Si noti che dovremo anche modificare l'autorizzazione della directory in cui si trova questo eseguibile. Solo se sono impostati sia il bit eseguibile del file sia quello della directory, potremo eseguire questo file come programma.

  • Quando si copia un file a casa nostra perderà le autorizzazioni che verranno sostituite dalle nostre autorizzazioni predefinite (a meno che non si copi utilizzando opzioni avanzate, ad esempio un'opzione di archiviazione).

  • Si noti inoltre che il file può ereditare l'autorizzazione dal punto di montaggio, resp. opzioni di montaggio. Questo è importante quando si montano unità formattate per Windows che non supportano le autorizzazioni Unix.

Utenti e gruppi

Presto ci rendiamo conto che questa era solo metà della storia. Dobbiamo anche sistemare gli effetti personali. Per fare ciò ogni file o cartella ha un proprietario definito e un'appartenenza al gruppo definita.

Ogni volta che creiamo un file saremo il proprietario di un file e anche il gruppo del file sarà noi. Con ls -lpossiamo vedere le autorizzazioni, la proprietà e il gruppo come visto dal seguente esempio di output:

-rw-rw-r--  1 takkat takkat    4096 Sep 12 20:25 test
  • Ci è consentito solo modificare autorizzazioni, gruppi o proprietà di un file di nostra proprietà.

Se non siamo il proprietario del file, avremo un Permission deniederrore. Solo root può cambiarlo per tutti i file. Questo è il motivo per cui dobbiamo usare sudoquando modifichiamo i permessi di file che non sono nostri. Ci sono due comandi integrati per farlo chownper gli utenti e chgrpper i gruppi.

Per modificare la proprietà di un file da chiunque a, takkatpossiamo emettere questo comando:

sudo chown takkat testfile

Per cambiare il gruppo di un file in takkatquestione

sudo chgrp takkat testfile

Leggi le manpage dei comandi per maggiori dettagli e opzioni. C'è anche questa bella guida più elaborata raccomandata per ulteriori letture:

Trova anche alcune domande correlate qui:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.