Determinare i permessi di file e directory

Nei sistemi operativi multi-utente viene solitamente previsto un meccanismo che garantisca l’accesso in lettura e scrittura a file e directory solo a chi ha i permessi per farlo.

I sistemi Unix-like, come Linux,  implementano un sistema che distingue i permessi di lettura, scrittura ed esecuzione in 3 livelli di accesso: il proprietario (user), un gruppo di utenti (group) e tutti gli altri. Il file system associa a ogni file (e directory) una mascheratura di bit, ciascuno dei quali ha un significato e il relativo valore determina il permesso di accesso. Si hanno un bit per stabilire il permesso in lettura, un’altro bit per il permesso in scrittura e un altro ancora per il permesso di esecuzione. Questa tripla si ripete per altre due volte, ottenendo così tre triple, una per livello.

Tuttavia, per questioni di leggibilità, si preferisce visualizzare questa mascheratura attraverso il suo corrispettivo valore decimale che possiamo calcolare tramite questo schema:

Livello Read Write Execute Somma
User 4 2 1 7
Group 4 2 1 7
All 4 2 1 7

Per ottenere il valore è sufficiente calcolare la somma di ogni riga.

Per esempio: abilitiamo l’utente-proprietario ad accedere in lettura e in scrittura, mentre la sola lettura tutti gli altri. Lo schema verrebbe così:

Livello Read Write Execute Somma
User 4 2 6
Group 4 4
All 4 4

Pertanto, per impostare questi permessi ad un ipotetico file pippo è sufficiente aprire una shell e scrivere:

# chmod 644 pippo

Se i permessi di lettura e scrittura risultano ovvi, quello di esecuzione merita una spiegazione a parte. Questo tipo di abilitazione ha un significato particolare quando viene associato a:

  • file: in questo caso indica se il file può essere eseguito o meno. Pensiamo ad esempio ad un file binario o a uno shell script.
  • directory: in questo caso indica se si hanno i permessi aprirla, ovvero leggerne il suo contenuto.