I sistemi operativi derivati da Unix, come Linux, differiscono da altri sistemi per computer per il fatto di non essere soltanto multitasking, ma anche multiutente.
Cosa significa esattamente? Significa che più utenti possono usare il computer nello stesso momento. Benché il proprio computer abbia una sola tastiera e un solo monitor, esso può essere usato anche da più di un utente. Per esempio, se il vostro computer è collegato a una rete o a internet, utenti remoti possono eseguire l'accesso attraverso telnet o ssh (la secure shell) e operare sul computer. Di fatto, utenti remoti possono eseguire applicazioni X e visualizzarne l'output grafico su un computer remoto. Il sistema X Window prevede questa funzionalità.
La capacità multiutente dei sistemi tipo Unix non è una "innovazione" recente ma piuttosto una caratteristica che è profondamente radicata nel progetto del sistema operativo. Se ricordate l'ambiente nel quale Unix venne creato ciò acquista senso compiuto. Anni prima che divenissero "personali", i computer erano grandi, costosi e centralizzati. Un tipico sistema di computer universitario consisteva di un grande elaboratore principale collocato in un palazzo del campus, e i terminali erano disseminati in tutto il campus, ciascuno connesso al grande computer centrale. Il computer doveva consentire l'accesso a molti utenti allo stesso momento.
Al fine di rendere fattibile tutto ciò, fu escogitato un metodo per proteggere un generico utente dagli altri. Dopo tutto, se non si voleva permettere a un utente di mandare in crash il computer, non si voleva nemmeno che un utente potesse interferire coi file appartenenti ad un altro utente.
Questa lezione affronterà i seguenti comandi:
Su un sistema Linux, a ciascun file e directory sono assegnati diritti di accesso per il proprietario del file, per i membri di un gruppo di utenti correlati e per tutti gli altri utenti del sistema. Possono essere assegnati i diritti di lettura, scrittura ed esecuzione di un file (per esempio, l'avvio di un file come programma).
Per vedere le impostazioni dei permessi per un file, possiamo
usare il comando ls
. Come esempio, vedremo il programma bash
,
che si trova nella directory /bin
:
[io@linuxbox io]$ ls -l /bin/bash
-rwxr-xr-x 1 root root 316848 Feb 27 2000 /bin/bash
Qui possiamo vedere che:
Nel diagramma sottostante, vediamo come viene interpretata la prima porzione del listato. Essa consiste di un carattere che indica il tipo di file, seguito da tre insiemi di tre caratteri che racchiudono i permessi di lettura, scrittura ed esecuzione per il proprietario, per il gruppo e per tutti gli altri.
- rwx rw- r--
___ ___ ___
^ ^ ^ ^
| | | |__________ Permessi di lettura (r), scrittura (w) ed
| | | esecuzione (x) per tutti gli altri utenti.
| | |
| | |______________ Permessi di lettura (r), scrittura (w) ed
| | esecuzione (x) per i membri appartenenti al
| | gruppo del file.
| |
| |__________________ Permessi di lettura (r), scrittura (w) ed
| esecuzione (x) per il proprietario del file.
|
|_____________________ Tipo di file. Il trattino "-" indica un file
regolare. Una "d" indica una directory.
Il comando chmod
è usato per cambiare i permessi di un file
o di una directory. Per usarlo, si devono specificare le impostazioni desiderate
dei permessi e il file (o i file) che si vuole modificare. Ci sono due modi per
specificare i permessi, ma in questa lezione ne illustrerò solo uno,
chiamato metodo con notazione ottale.
È comodo pensare all'impostazione dei permessi come a una serie di bit (che è proprio il modo in cui li intende il computer). Ecco come funziona:
rwx rwx rwx = 111 111 111
rw- rw- rw- = 110 110 110
rwx --- --- = 111 000 000
e così via...
rwx = 111 in codice binario = 7
rw- = 110 in codice binario = 6
r-x = 101 in codice binario = 5
r-- = 100 in codice binario = 4
Ecco che, se si rappresenta ciascuno dei tre insiemi di permessi (proprietario, gruppo e altri) come un singolo numero, si ha un modo alquanto conveniente per esprimere le possibili impostazioni dei permessi. Per esempio, se volessimo attribuire a un_file i permessi di lettura e scrittura per il proprietario, ma volessimo anche escluderne l'accesso agli altri, dovremmo dare:
[io@linuxbox io]$ chmod 600 un_file
Ecco una tabella di numeri che mostra tutte le impostazioni più comuni. Quelle che iniziano con "7" sono utilizzate con i programmi (in quanto abilitano l'esecuzione); le restanti sono per altri tipi di file.
Valore | Significato |
777 |
(rwxrwxrwx) Nessuna restrizione dei permessi. Chiunque può fare qualsiasi cosa. Generalmente non è un'impostazione desiderabile. |
755 |
(rwxr-xr-x) Il proprietario del file può leggere, scrivere ed eseguire il file. Tutti gli altri possono leggerlo ed eseguirlo. Questa impostazione è comune per programmi che sono usati da tutti gli utenti. |
700 |
(rwx------) Il proprietario del file può leggere, scrivere ed eseguire il file. Nessun altro ha dei diritti. Questa impostazione è utile per programmi che solo il proprietario può usare e il cui accesso deve essere escluso agli altri. |
666 |
(rw-rw-rw-) Tutti gli utenti possono leggere e scrivere il file. |
644 |
(rw-r--r--) Il proprietario del file può leggere e scrivere il file, mentre tutti gli altri possono solo leggere il file. Un'impostazione comune per file di dati che tutti possono leggere, ma solo il proprietario può modificare. |
600 |
(rw-------) Il proprietario può leggere e scrivere il file. Tutti gli altri non hanno diritti. Un'impostazione comune per file di dati che il proprietario vuole tenere privati. |
Il comando chmod può essere usato anche per controllare i permessi di accesso alle directory. Ancora una volta, possiamo usare la notazione ottale per impostare i permessi, però il significato degli attributi r, w e x è diverso:
cd dir
).Ecco alcune utili impostazioni per le directory:
Valore | Significato |
777 |
(rwxrwxrwx) Nessuna restrizione sui permessi. Chiunque può elencare i file, creare nuovi file nella directory e cancellare file nella directory. Generalmente non è una buona impostazione. |
755 |
(rwxr-xr-x) Il proprietario della directory ha accesso completo. Tutti gli altri possono elencare i file della directory, ma non possono creare e cancellare i file. Questa impostazione è comune per le directory che si vogliono condividere con altri utenti. |
700 |
(rwx------) Il proprietario della directory ha accesso completo. Nessun altro ha dei diritti. Questa impostazione è utile per le directory che solo il proprietario può utilizzare e il cui accesso deve essere escluso agli altri. |
Spesso è necessario diventare super-utente per effettuare importanti
compiti di amministrazione del sistema ma, una volta terminati, non si dovrebbe
rimanere collegati in questo stato; di questo siete già stati avvertiti.
Nella maggior parte delle distribuziooni c'è un programma che può
dare un accesso temporaneo ai privilegi di super-utente. Questo programma si
chiama su
(substitute user) e può essere usato in quei casi
dove serve diventare super-utente per eseguire pochi compiti. Per
diventare il super-utente, basta digitare il comando su
.
Verrà richiesta la password del super-utente:
[io@linuxbox io]$ su
Password:
[root@linuxbox io]#
Dopo avere eseguito il comando su, avrete una nuova sessione di shell in qualità di super-utente. Per uscire dalla sessione di super-utente, digitare "exit" e ritornerete alla sessione precedente.
In alcune distribuzioni, Ubuntu in particolare, viene usato un metodo
alternativo. Al posto di usare su
, adoperano il comando sudo
.
Con sudo
, a uno o più utenti vengono garantiti i privilegi di
superutente secondo le necessità. Per eseguire un comando come superutente, il
comando desiderato viene semplicemente preceduto dal comando sudo. Dopo che il
comando è stato dato, l'utente viene invitato a immettere la password
dell'utente anziché quella del superutente:
[io@linuxbox io]$ sudo
Password:
[root@linuxbox io]$
Potete cambiare il proprietario di un file usando il comando chown
.
Ecco un esempio: supponiamo di voler cambiare il proprietario di un_file da
"io" a "tu". Potremmo fare così:
[io@linuxbox io]$ su
Password:
[root@linuxbox io]# chown tu un_file
[root@linuxbox io]# exit
[io@linuxbox io]$
Si noti che per cambiare il proprietario di un file si dev'essere
superutente. Per fare questo nel nostro esempio abbiamo impiegato il
comando su
, poi abbiamo eseguito chown
e, alla fine,
abbiamo digitato exit
per ritornare alla sessione precedente.
chown
funziona in questo stesso modo anche sulle directory.
Il gruppo proprietario di un file o directory può
essere cambiato con chgrp
. Questo comando si usa nel modo seguente:
[io@linuxbox io]$ chgrp nuovo_gruppo un_file
Nell'esempio sopra, abbiamo cambiato il gruppo proprietario di
un_file dal suo precedente gruppo a "nuovo_gruppo".
Per utilizzare chgrp
su di un file o una directory, bisogna esserne
il proprietario.