Introduzione
Storicamente, i sistemi Unix-like (tra cui GNU/Linux e quindi Ubuntu) hanno avuto l'esigenza di poter controllare ogni aspetto del computer e del software tramite la riga di comando, e il sistema usato per avere questo tipo di controllo è cercare di trasformare tutto in un file, tramite i filesystem. Pertanto i dati sono file, le directory tramite cui sono ordinati i file sono anch'esse file, i dispositivi, come anche i singoli processi e tutto ciò che riguarda lo stato attuale del computer, sono rappresentati tramite file. Tutti i file all'interno del sistema hanno associati un utente proprietario, un gruppo di utenti e dei permessi che ne regolano l'accesso. Solo il super utente "root" ha la possibilità di accedere a qualsiasi file nel sistema senza tenere conto dei permessi.
Per modificare i permessi di un file il cui proprietario non è l'utente corrente, è necessario l'utilizzo del comando sudo.
Permessi in azione
Per visualizzare i permessi dei file e delle cartelle contenute nella directory corrente si usa il seguente comando:
ls -l
Il comando ls accetta come argomento un percorso che può rappresentare un singolo file o una qualunque directory del sistema, a patto che si abbiano i permessi per leggere tale directory. Se l'argomento non viene fornito, il comando viene applicato alla directory corrente. Esempio:
ls -l /home
Verranno visualizzate informazioni sui file e sulle directory presenti nella cartella di sistema /home:
totale 28 drwx------ 2 root root 16384 2007-02-21 11:18 lost+found drwxr-xr-x 33 utente1 utente1 4096 2007-05-21 11:41 utente1 drwxr-x--- 68 utente2 utente2 4096 2007-05-21 11:40 utente2 drwxr-xr-x 2 utente3 utente 4096 2007-05-21 11:59 utente3
Il primo carattere a sinistra indica un attributo specifico del file, per esempio nel caso il file rappresenti una directory comparirà il carattere «d». I successivi nove caratteri rappresentano i permessi e sono divisi in tre terne.
Terna |
Output di ls |
Utente |
prima terna |
-rwx------ |
owner (proprietario) |
seconda terna |
----rwx--- |
group (gruppo) |
terza terna |
-------rwx |
other (altro) |
Sono presenti tre diverse restrizioni di accesso:
Simbolo |
Permesso |
Azione |
r |
read |
lettura |
w |
write |
scrittura |
x |
execute |
esecuzione |
Nel caso ci si riferisca a un file:
«r» (lettura) consente di aprire un file per visualizzarne il contenuto;
«w» (scrittura) consente di sovrascrivere o aggiungere dati a un file;
«x» (esecuzione) consente di eseguire un file (nel caso si tratti di un file eseguibile).
Nel caso ci si riferisca a una directory:
«r» (lettura) consente la visualizzazione del contenuto della directory, con il comando ls;
«w» (scrittura) consente la creazione o l'eliminazione di file all'interno della directory;
«x» (esecuzione) consente di accedere alla directory (per esempio con il comando cd) anche nel caso non se ne possa visualizzarne il contenuto.
| Applicare il permesso di scrittura ad una directory consente la cancellazione dei file contenuti in essa anche ad utenti che non possiedono i permessi di scrittura su tali file. |
Cambiare i permessi
Il comando da utilizzare per la modifica dei permessi è chmod, la cui sintassi è:
chmod [OPZIONI] permessi nomefile
Ci sono due metodi per modificare i permessi, attraverso l'uso dei numeri o delle lettere. Non è consigliabile modificare i permessi ai file di sistema, alcuni file hanno dei permessi molto restrittivi per scongiurare accessi non autorizzati e problemi di sicurezza. Ad esempio, il file /etc/shadow, che contiene le password utente, non ha impostato alcun permesso per gli utenti.
Utilizzare chmod con i letterali
Quello che segue è il dizionario dei letterali da usare con i permessi:
Opzioni |
Definizione |
u |
proprietario |
g |
gruppo |
o |
altri |
x |
esecuzione |
w |
scrittura |
r |
lettura |
+ |
aggiungi permesso |
- |
annulla permesso |
= |
imposta permesso |
Quelli che seguono sono degli esempi di utilizzo del comando chmod con i letterali: per prima cosa è utile creare alcuni file vuoti. Digitare il seguente comando:
touch file1 file2 file3 file4
Al fine di rendersi conto di come variano i permessi si può utilizzare il comando ls -l dopo ogni applicazione del comando chmod. Appena creati i file, l'output del comando ls sarà simile al seguente:
total 0 -rw-r--r-- 1 user user 0 Nov 19 20:13 file1 -rw-r--r-- 1 user user 0 Nov 19 20:13 file2 -rw-r--r-- 1 user user 0 Nov 19 20:13 file3 -rw-r--r-- 1 user user 0 Nov 19 20:13 file4
Aggiungere il bit di esecuzione al «proprietario»:
chmod u+x file1
Aggiungere agli «altri» i bit di scrittura ed esecuzione:
chmod o+wx file2
Negare al «gruppo» il bit di lettura:
chmod g-r file3
Aggiungere i bit di lettura, scrittura ed esecuzione a tutti gli utenti:
chmod ugo+rwx file4
Utilizzare chmod con i numeri
Opzioni |
Definizione |
Definizione in lettere |
#-- |
proprietario |
u (user) |
-#- |
gruppo |
g (group) |
--# |
altri |
o (others) |
0 |
nessun permesso |
- |
1 |
esecuzione |
(x, execution) |
2 |
scrittura |
(w, write) |
3 |
esecuzione + scrittura |
(xw) |
4 |
lettura |
(r, read) |
5 |
lettura + esecuzione |
(rx, somma dei valori 1+4) |
6 |
lettura + scrittura |
(rw, somma dei valori 2+4) |
7 |
lettura + scrittura + esecuzione |
(rwx, somma dei valori 1+2+4) |
«Proprietario», «gruppo» e «altri» sono rappresentati da tre numeri. Per ottenere il valore da impostare, è sufficiente determinare la tipologia d accesso e poi fare la somma.
Per esempio, se si desidera un file con i permessi «-rw-rw-rwx» è necessario utilizzare la seguente combinazione:
Proprietario |
Gruppo |
Altri |
lettura e scrittura |
lettura e scrittura |
lettura, scrittura ed esecuzione |
4+2=6 |
4+2=6 |
4+2+1=7 |
Dunque, il comando da digitare sarà il seguente:
chmod 667 nomefile
Se invece si desidera un file con i permessi «--w-r-x--x» è necessario utilizzare la seguente combinazione:
Proprietario |
Gruppo |
Altri |
scrittura |
lettura ed esecuzione |
esecuzione |
2 |
4+1=5 |
1 |
Per applicare tali permessi sarà necessario digitare il seguente comando:
chmod 251 nomefile
Quelli che seguono sono degli esempi di utilizzo del comando chmod con i numeri: per prima cosa creare alcuni file vuoti con il seguente comando:
touch file1 file2 file3 file4
I permessi di tali file, visualizzabili con ls, corrispondono ai seguenti:
total 0 -rw-r--r-- 1 user user 0 Nov 19 20:13 file1 -rw-r--r-- 1 user user 0 Nov 19 20:13 file2 -rw-r--r-- 1 user user 0 Nov 19 20:13 file3 -rw-r--r-- 1 user user 0 Nov 19 20:13 file4
Aggiugnere il bit di esecuzione al «proprietario»:
chmod 744 file1
Aggiungere ad «altri» i bit lettura ed esecuzione:
chmod 647 file2
Negare a «gruppo» il bit lettura:
chmod 604 file3
Aggiungere i bit lettura, scrittura ed esecuzione a tutti:
chmod 777 file4
N.B. Per cambiare i permessi in modo ricorsivo a tutti i file presenti in una cartella ed alla cartella stessa si deve usare l'opzione -R subito dopo il comando chmod:
chmod -R 777 Cartella/
da i permessi di lettura, scrittura, esecuzione di ogni singolo file della cartella Cartella/ a tutti gli utenti (proprietario, gruppo e altri)
Utilizzare chmod con sudo
I comandi chmod e sudo possono essere combinati per cambiare i permessi a file di cui non si è proprietari.
| Cambiare i permessi nel modo sbagliato ai file sbagliati può compromettere l'integrità del sistema. Utilizzare il comando sudo con attenzione. |
Quelli che seguono sono degli esempi di gestione dei permessi con i privilegi di amministrazione del sistema:
user@host:/home/user$ ls -l /usr/local/bin/somefile -rw-r--r-- 1 root root 550 2005-11-13 19:45 /usr/local/bin/somefile user@host:/home/user$ user@host:/home/user$ sudo chmod o+x /usr/local/bin/somefile user@host:/home/user$ ls -l /usr/local/bin/somefile -rw-r--r-x 1 root root 550 2005-11-13 19:45 /usr/local/bin/somefile user@host:/home/user$
Cambiare i permessi delle partizioni
umask, fmask e dmask
File system come NTFS o FAT hanno un sistema per gestire utenti e permessi incompatibile col sistema usato da GNU/Linux, pertanto durante la fase di montaggio di tali filesystem viene assegnato in modo predefinito un utente proprietario (con relativi permessi) e un gruppo proprietario (con relativi permessi) a tutti i file presenti in essi, e per tutto il tempo in cui tali file system rimangono montati non si potrà modificare né i permessi né l'utente o il gruppo proprietario. In modo predefinito vengono assegnati permessi di lettura, scrittura ed esecuzione per tutti gli utenti e sono validi sia per i file che per le directory, ma è possibile togliere permessi tramite la cosiddetta "maschera dei permessi", che corrisponde all'opzione «umask». Per togliere permessi alle sole directory si usa l'opzione «dmask», mentre per i soli file di dati si usa «fmask».
I permessi per le partizioni vengono solitamente modificati attraverso l'uso del suddetto modificatore nel file /etc/fstab, il contenuto del quale sarà simile al seguente:
# # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 / ext3 defaults,errors=remount-ro 0 1 /dev/sda2 /media/windowsXP ntfs-3g umask=0222,ro,nls=utf8 0 0 /dev/sdb1 /media/windows98 vfat umask=0002,nls=utf8 0 0 /dev/sdb2 /media/storage ntfs-3g dmask=000,fmask=113 0 0
Nell'esempio, la directory /media/windowsXP viene montata in sola lettura (opzione ro) e la maschera corrispondente toglie i permessi di scrittura a tutti gli utenti. La directory /media/windows98 lascia tutti i permessi all'utente proprietario e al gruppo proprietario, ma toglie il permesso di scrittura agli altri utenti, in modo che questi non potranno nè creare o eliminare file (permesso di scrittura negato per le directory), nè modificare i file esistenti (permesso di scrittura negato per i file). Nella directory /media/storage tutti gli utenti possono accedere a tutte le directory, possono creare o eliminare file (come indicato dalla dmask), ma non hanno il permesso di eseguire eventuali file eseguibili, e in più gli utenti che non fanno parte del gruppo proprietario o che non sono l'utente proprietario non possono modificare nessun file.
Cambiare i permessi di una partizione FAT con umask
Per iniziare fare una copia di sicurezza del file /etc/fstab con il seguente comando:
sudo cp /etc/fstab /etc/fstab.old
Aprire il file sopra citato con un editor di testo e con i privilegi di amministrazione. A tale scopo si può digitare un comando simile al seguente:
sudo nano /etc/fstab
Cercare la riga relativa al volume FAT desiderato. Dovrebbe essere simile alla seguente:
/dev/dispositivo /punto/di/mount vfat defaults 0 0
Una volta trovata, modificarla come segue:
/dev/dispositivo /punto/di/mount vfat umask=000 0 0
In questo modo tutti gli utenti avranno accesso in scrittura e lettura alla partizione.
La modifica sarà applicata automaticamente al successivo riavvio di Ubuntu. Se si desidera applicarla subito, è sufficiente smontare il volume e rimontarlo con i seguenti comandi:
sudo umount /punto/di/mount sudo mount /punto/di/mount

