ePrometeusCorsoLinuxLinux
testi articoli
Testi Articoli  Download
Home | OpenSource | PhpNuke | Programming | SysAdm | 
CorsoJava è ora Video! Free for all!
Clicca Qui!
FONDAMENTI DI LINUX
Linux: tutto quello che...
Cominciamo...
Utenti e permessi
Processi e segnali
Compressione e archiviazione
Bibliografia


<<< Utenti e permessi >>>

Una cosa che lascia sorpresi chi è abituato a utilizzare il DOS è il fatto che certe operazioni sui file non si possono fare se non si hanno adeguati permessi. In DOS non ci sono permessi (tranne l’attributo di READ ONLY), e dunque si rimane stupiti quando, tentando varie operazioni sui file, si ottiene un messaggio di permission denied. Vediamo quindi come funziona il meccanismo dei permessi di Linux. Innanzitutto abbiamo degli utenti, ognuno identificato dalla login. Ma ci sono anche dei gruppi di utenti. Ogni file appartiene sia ad un utente, che è il suo proprietario, che ad un gruppo. Si possono impostare separatamente i permessi per il proprietario, per il gruppo e per “tutti gli altri”. Vediamo la flessibilità di questo meccanismo. Posso rendere un file leggibile e scrivibile al legittimo proprietario, leggibile ma non scrivibile a tutti gli utenti del mio gruppo di lavoro, e né leggibile né scrivibile agli altri. Detto questo, possiamo dire che ogni file ha 3 possibili operazioni che si possono attivare o disattivare: leggerlo, scriverlo (e cancellarlo) ed eseguirlo. Ognuno di questi permessi può essere impostato separatamente per il proprietario, per il gruppo e per tutti gli altri. Nessun vincolo comunque vale per root, il quale può fare tutto.

Il comando ls ha degli “switch” che permettono di esaminare il particolare stato di un file allo scopo di stabilire per quale motivo non si riesce a leggere un dato file. A volte è meglio capire perché non si riesce a fare una data operazione (e anche cercare di capire perché è stata inibita, magari c’è un buon motivo) piuttosto che diventare root per non avere “noiosi” vincoli (che di solito sono vitali per la sicurezza del sistema).

Parlavamo degli switch. Gli switch sono argomenti opzionali di un comando che permettono di modificarne il comportamento. Tutti i comandi hanno degli switch. Se ricordate il dir /p del DOS, il /p è appunto uno switch. Solo che in Linux gli switch convenzionalmente non cominciano con la barra ‘/’ (che serve nei path dei file) ma con il trattino. Proviamo ad usare il comando ls con lo switch -l che significa “long”, ovvero dettagliato:


$ ls -l
-rw-r--r--   1 root     root   \
      3299 Dec 29 10:25 article
-rwxr-xr-x   1 msciab   msciab    \
   1766 Nov 28 16:05 pipesock
drwxr-x---   5 msciab   users\
       1024 Dec 27 12:39 document

Cosa c’è in questa directory? Innanzitutto, un file, article. Questo file è posseduto dall’utente root e dal gruppo root (che sono due cose diverse anche se hanno lo stesso nome   di solito per ogni utente pippo si crea un gruppo pippo che contiene innanzitutto l’utente pippo stesso, ma al quale possono essere aggiunti altri utenti). Il file article è di 3299 byte, è stato modificato l’ultima volta il 19 dicembre, ed è leggibile e scrivibile dal suo proprietario (root), e soltanto leggibile dal gruppo root e dagli altri. Infatti consideriamo la stringa di dieci caratteri che indica i permessi (la prima di ogni riga): -rw-r--r--: il primo carattere è d se è una directory, è - per i file normali (può anche essere l per i link, c per i file speciali a carattere, b per i file speciali a blocchi eccetera). I restanti 9 caratteri vanno spezzati in tre gruppi di tre, che definiscono i permessi, in ordine, per proprietario, gruppo e “mondo”; ogni gruppo dice in ordine lettura (r), scrittura (w) e esecuzione (x). Quindi: rw- per il proprietario, r-- per il gruppo e tutti gli altri. Il secondo file invece, pipesock, è un leggibile ed eseguibile da tutti, mentre è scrivibile solo dal proprietario. Infine, document è una directory. Per le directory il permesso x sta per il diritto di “entrarci”.

Notare che in Linux sono eseguibili anche normali file di testo, non necessariamente dei binari. Di solito si tratta di programmi simili ai batch del DOS, detti script. In DOS, i file di testo eseguibili sono i .BAT, mentre i binari eseguibili sono .EXE e .COM. Linux invece distingue automaticamente i binari eseguibili perché i primi 4 byte di ogni file rappresentano un magic number che ne specifica il tipo. Se un file non viene riconosciuto in altro modo, lo si considera uno script di shell (la shell è l’equivalente del COMMAND.COM DOS) e viene fatto eseguire da /bin/sh.

Linux ha anche un interessante meccanismo che consente di specificare quale interprete deve effettivamente eseguire uno script. Se infatti il file comincia con #!, allora il resto della linea identifica l’interprete. Uno script di shell spesso comincia con #!/bin/sh; se si tratta di uno script che funziona solo con le estensioni della bash (Bourne Again Shell, la shell dello GNU, standard di Linux), si specifica #!/bin/bash; gli script Perl spesso cominciano con #!/usr/bin/perl, ma il meccanismo funziona con i vari linguaggi, come tcl, python e perfino i makefile.

Rimane da esaminare come si cambiano i permessi e la proprietà dei file. Cominciamo dai permessi. il comando è chmod <permessi> file.... Per <permessi> si intende una stringa la cui sintassi è (in parte) [ugoa][+-][rwx]. Ovvero user (proprietario), group, other (altri) o all (tutti); + aggiungi, - togli il permesso di lettura/scrittura/esecuzione. Esempi:


chmod a+x file
[rendi il file eseguibile da tutti]
chmod og-rwx file
[togli i permessi al gruppo e gli altri]

Comunque il modo più comodo per impostare i permessi è quello “complessivo” utilizzando un codice ottale. Consideriamo una stringa rwxr-xr-x. Se trasformiamo in zeri i trattini e in uni gli altri caratteri, otteniamo 111 101 101, che in ottale è 755. Un comando chmod 755 file imposta in un colpo solo i permessi del file. Può sembrare complicato, ma in fondo i casi pratici sono pochi: 4 sola lettura (r--), 6 lettura e scrittura (rw-), 5 lettura e esecuzione (r-x) e 7 tutto (rwx). Di solito i permessi dei file non sono complicati. Nel 90% dei casi i file devono essere leggibili ed eseguibili da tutti e scrivibili dal proprietario. Si può impostare questo permesso con un solo comando ad un intero albero di directory con:


chmod -R 755 directory


dove il -R applica ricorsivamente il comando all’intero albero di directory.

Infine abbiamo un comando per cambiare la proprietà di un file, chown che può essere eseguito solo da root. Se vogliamo assicurarci che tutti i file di directory appartengano al proprietario e gruppo root ecco come fare:


chown -R root.root directory


Naturalmente lo switch -R non è obbligatorio, e ha la stessa funzione dell’omonimo switch di chmod; proprietario e gruppo vengono separati dal punto.


ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com