• Non ci sono risultati.

Gli strumenti

Nel documento Introduzione a Linux (pagine 81-89)

Capitolo 3.  File e file system

3.4.  La sicurezza dei file

3.4.2.  Gli strumenti

Una normale conseguenza dell'applicazione di rigidi permessi dei file (e qualche volta anche una 

seccatura) è che i diritti d'accesso si dovranno cambiare per ogni genere di motivo. Per fare ciò 

usiamo   il   comando  chmod  ed  alla   fine  to chmod  diventa  un  verbo   inglese  quasi   accettabile, 

significando il cambio delle modalità d'accesso ad un file. Il comando chmod può essere utilizzato 

con opzioni alfanumeriche o numeriche come meglio ritenete.

L'esempio seguente usa le opzioni alfanumeriche per risolvere un problema che di solito si presenta 

con i nuovi utenti:

asim:~> ./hello

bash: ./hello: bad interpreter: Permission denied

asim:~> cat hello #!/bin/bash

echo “Hello, World”

asim:~> ls -l hello

-rw-rw-r-- 1 asim asim 32 Jan 15 16:29 hello

asim:~> chmod u+x hello

asim:~> ./hello Hello, World

asim:~> ls -l hello

-rwxrw-r-- 1 asim asim 32 Jan 15 16:29 hello*

Gli operatori + e ­ sono usati per concedere o negare un certo diritto ad un certo gruppo: sono 

permesse combinazioni separate. Le pagine Info e man contengono degli utili esempi. Eccone qui 

un altro che trasforma il file del precedente esempio in un file personale dell'utente asim:

asim:~> chmod u+rwx,go-rwx hello

asim:~> ls-l hello

-rwx--- 1 asim asim 32 Jan 15 16:29 hello*

Il tipo di problema manifestantesi in un messaggio di errore che dice che il permesso è negato da 

qualche parte, normalmente dipende in molti casi da un problema con i privilegi d'accesso. Anche 

commenti come “Ieri funzionava” o “Funziona quando lo avvio come root” derivano il più delle 

volte da errati permessi dei file.

Usando chmod con argomenti numerici, i valori di ogni diritto d'accesso consentito devono essere 

conteggiati insieme per gruppo. Così otteniamo un numero di tre cifre che è il valore simbolico 

delle impostazioni create con chmod. La tabella seguente elenca le combinazioni più comuni:

Tabella 3­9. Protezione dei file con chmod

Comando Significato

chmod 400 file Per proteggere un file contro sovrascritture accidentali.

chmod 500 directory Per proteggervi da cancellazioni, ridenominazioni o spostamenti 

accidentali di file da questa directory.

chmod 600 file Un file privato che può essere modificato solo dall'utente che ha 

dato questo comando.

chmod 644 file Un file leggibile pubblicamente che può essere modificato solo 

dall'utente che l'ha messo a disposizione.

chmod 660 file Gli utenti appartenenti al vostro gruppo possono modificare questo 

file mentre gli altri non possono assolutamente accedervi.

chmod 700 file Protegge un file contro ogni accesso da parte degli altri utenti, 

mentre l'utente proprietario ha ancora il pieno accesso.

chmod 755 directory Per file che dovrebbero essere leggibili ed eseguibili dagli altri, ma 

modificabili solo dall'utente proprietario.

chmod 775 file Modalità standard per la condivisione di un file in un gruppo.

chmod 777 file Chiunque può fare di tutto su questo file.

Se inserite un numero con meno di tre cifre come argomento di chmod, i caratteri omessi vengono 

rimpiazzati con degli zero a cominciare da sinistra. Effettivamente c'è una quarta cifra nei sistemi 

Linux, che precede le prime tre ed imposta speciali modalità di accesso. Qualsiasi informazione su 

ciò (e molto altro ancora) si trova nelle pagine Info.

3.4.2.2. Accesso ad un altro gruppo

appartenere,  preceduti  dai vostri nome  utente e ID e dal nome del gruppo e ID con cui siete 

correntemente connessi. Comunque in molti sistemi Linux potete essere attivamente collegati solo 

con un gruppo alla volta. Di base questo  gruppo attivo  o  primario  è quello assegnatovi nel file 

/etc/passwd. Il quarto campo di questo file contiene l'ID del gruppo primario degli utenti, che 

si può ricercare nel file /etc/group. Un esempio:

asim:~> id

uid=501(asim) gid=501(asim) groups=100(users),501(asim),3400(web)

asim:~> grep asim /etc/passwd

asim:x:501:501:Asim El Baraka:/home/asim:/bin/bash

asim:~> grep 501 /etc/group asim:x:501:

Il quarto campo nella linea da /etc/passwd contiene il valore “501” che rappresenta il gruppo 

asim  nell'esempio   precedente.   Da  /etc/group  possiamo   ottenere   il   nome   corrispondente   a 

questo ID del gruppo. Quando si connette al sistema, questo è il gruppo a cui appartiene asim.

Schema del gruppo privato dell'utente

Per consentire una maggiore flessibilità, molti sistemi Linux seguono il cosiddetto user 

private group scheme  (o schema del gruppo privato dell'utente) che assegna ciascun 

utente in primo luogo al proprio gruppo. Tale gruppo è un gruppo che contiene solo 

questo particolare utente, da qui il nome “gruppo privato”. Normalmente questo gruppo 

ha  lo   stesso  nome   del   nome  di   login  dell'utente,  cosa  che   può   creare  una   leggera 

confusione.

A parte il proprio gruppo privato, l'utente  asim  può anche stare nei gruppi  users  e  web. Poiché 

questi sono gruppi secondari per tale utente, costui dovrà usare  newgrp per registrarsi in uno di 

questi gruppi (utilizzate gpasswd per impostare prima la password del gruppo). Nell'esempio, asim 

deve creare file di proprietà del gruppo web.

asim:/var/www/html> newgrp web

asim:/var/www/html> id

uid=501(asim) gid=3400(web) groups=100(users),501(asim),3400(web)

Ora, quando asim creerà nuovi file, essi saranno di proprietà del gruppo web al posto del gruppo 

asim:

asim:/var/www/html> touch test

asim:/var/www/html> ls -l test

-rw-rw-r-- 1 asim web 0 Jun 10 15:38 test

Registrarsi in un nuovo gruppo vi permette di evitare l'uso di  chown  (v.  Sezione 3.4.2.4) o di 

contattare il vostro amministratore di sistema per cambiare le proprietà per voi.

3.4.2.3. La “maschera” dei file

Quando si salva un file da qualche parte, questo per prima cosa viene sottoposto alla procedura 

standard di sicurezza. I file senza permessi non esistono in Linux. I permessi dei file standard sono 

stabiliti dalla mask (maschera) per la creazione di nuovi file. Il valore di questa maschera può essere 

visualizzato mediante l'uso del comando umask:

bert:~> umask 0002

Invece di aggiungere i valori simbolici a ciascuno, come con chmod, per calcolare i permessi su un 

nuovo   file   questi   devono   essere   sottratti   dai   diritti   d'accesso   totali   possibili.   Nell'esempio 

precedente, comunque, vediamo 4 valori pur essendoci solo 3 categorie di permessi: user, group e 

other. Il primo zero fa parte delle impostazioni speciali degli attributi dei file che tratteremo nelle 

Sezioni 3.4.2.4 e 4.1.6. Potrebbe succedere che nel vostro sistema non venga neppure  mostrato il 

primo zero quando battete il comando umask e che vediate solo i tre numeri che rappresentano la 

maschera di  base per la creazione dei file.

Ogni sistema derivato da UNIX ha una funzione di sistema per la creazione di nuovi file, funzione 

che   viene   chiamata   ogni   qualvolta   un   utente   utilizza   un   programma   che   crea   nuovi   file,   per 

esempio, quando si scarica un file da internet, quando si salva un nuovo documento di testo e così 

via. Questa funzione crea sia file che directory nuovi. Il permesso totale di leggere, scrivere ed 

eseguire è concesso a tutti quando si crea una nuova directory. Quando invece si crea un nuovo file, 

tale funzione concederà i permessi di lettura e scrittura a tutti ma non darà i permessi di esecuzione 

a  nessuno   per  tutte   le categorie   di  utenti.  Perciò,   prima  dell'applicazione  della  maschera,   una 

directory ha i permessi 777 o rwxrwxrwx e un semplice testo 666 o rw­rw­rw­.

Il valore di umask viene sottratto da questi permessi base dopo che la funzione ha creato il nuovo 

file o directory. Di conseguenza, se il valore della maschera è (0)002, una directory avrà di base i 

permessi 775 e un file 664. Ciò viene mostrato nell'esempio seguente.

bert:~> mkdir newdir

bert:~> ls -ld newdir

drwxrwxr-x 2 bert bert 4096 Feb 28 13:45 newdir/

bert:~> touch newfile

bert:~> ls -l newfile

-rw-rw-r-- 1 bert bert 0 Feb 28 13:52 newfile

File contro directory

Normalmente una directory ha maggiori permessi: ha sempre il permesso di esecuzione 

(execute).   Se   non   l'avesse,   essa   sarebbe   inaccessibile.   Sperimentate   ciò   eseguendo 

chmod 644 con una directory!

Se vi registrate in un altro gruppo utilizzando il comando newgrp, la maschera rimane invariata. 

Così, se quest'ultima è impostata a 002, i file e le directory che creerete stando nel nuovo gruppo 

saranno pure accessibili a tutti gli altri membri di esso: non avrete quindi bisogno di usare chmod.

L'utente root di base ha dei permessi di creazione dei file più ristretti:

[root@estoban root]# umask 022

Questi valori di base sono impostati per tutto il sistema nei file di configurazione delle risorse di 

shell, per esempio /etc/bashrc oppure /etc/profile. Potete modificarli nel vostro file di 

configurazione della shell (v. il capitolo 7 dedicato alla personalizzazione del vostro ambiente di 

shell).

3.4.2.4. Cambiare le proprietà di utente e gruppo

Quando un file è posseduto da un utente o da un gruppo sbagliato, l'errore può essere corretto con i 

comandi  chown  (change owner) e  chgrp  (change group). Cambiare la proprietà di un file è un 

compito frequente di amministrazione del sistema in ambienti dove i file hanno la necessità di 

essere condivisi all'interno di un gruppo. Entrambi i comandi sono molto flessibili, come potete 

verificare ricorrendo all'opzione --help.

Il comando    chown  può essere impiegato per modificare le proprietà  dell'utente e del gruppo, 

mentre  chgrp cambia solo la proprietà del gruppo. Naturalmente il sistema verificherà se l'utente 

che fornisce uno di questi comandi ha sufficienti permessi sui file che intende modificare.

Per modificare l'appartenenza di un file ad un utente, usate questa sintassi:

chown newuser file

Se usate due punti (:) dopo il nome di utente (v. pagine Info), anche l'appartenenza al gruppo verrà 

cambiata al gruppo primario dell'utente che   fornisce il comando. In un sistema Linux ciascun 

utente ha il proprio gruppo cosicché questo sistema può essere usato per rendere privati i file.

jacky:~> id

uid=1304(jacky) gid=(1304) groups=1304(jacky),2034(pproject)

jacky:~> ls -l my_report

-rw-rw-r-- 1 jacky project 29387 Jan 15 09:34 my_report

jacky:~> chown jacky: my_report

jacky:~> chmod o-r my_report

jacky:~> ls -l my_report

-rw-rw---- 1 jacky jacky 29387 Jan 15 09:34 my_report

Se  jacky volesse condividere questo file, senza dare a nessuno il permesso di scriverlo, potrebbe 

usare il comando chgrp:

jacky:~> ls -l report-20020115.xls

-rw-rw---- 1 jacky jacky 45635 Jan 15 09:35 report-20020115.xls

jacky:~> chgrp project report-20020115.xls

jacky:~> ls -l report-20020115.xls

-rw-rw---- 1 jacky project 45635 Jan 15 09:35 report-20020115.xls

In questo modo gli utenti del gruppo project potranno lavorare su questo file. Gli utenti estranei al 

gruppo non avranno nulla a che fare con questo.

Sia  chown  che  chgrp  possono   essere   usati   per   cambiare   le   proprietà  ricorsivamente   usando 

l'opzione ­R. In tal caso tutti file sottostanti e le sottodirectory di una data directory apparterranno a 

quel dato utente e/o gruppo.

Restrizioni

In   molti   sistemi   l'utilizzo   dei   comandi  chown  e  chgrp  è   vietato   agli   utenti   non 

privilegiati.   Se   non   siete   gli   amministratori   di   sistemi,   non   avrete   la   possibilità   di 

modificare utente e gruppo  per ragioni di sicurezza. Se l'uso di   questi comandi non 

fosse limitato, utenti maliziosi potrebbero assegnare la proprietà, modificandola, dei file 

ad altri utenti e/o gruppi e modificare il comportamento di quegli ambienti utenti e pure 

causare danni ad altro file degli utenti.

3.4.2.5. Modi speciali

Per evitare che l'amministratore di sistema sia infastidito dal risolvere problemi di permessi per 

tutto il tempo, possono essere concessi speciali diritti d'accesso a tutte le directory o a programmi 

separati. Qui di seguito ci sono tre modi speciali:

modo sticky bit: dopo l'esecuzione di un compito, il comando viene mantenuto nella 

memoria di sistema. In origine questo era una funzione usata spesso per  risparmiare 

memoria: grandi job venivano caricati in memoria una sola volta. Ma oggigiorno la 

memoria è economica e  ci sono migliori tecniche per gestirla cosicché il modo non 

viene più utilizzato per le sue capacità di ottimizzazione su singoli file. Se applicato 

comunque ad un'intera directory, lo sticky bit assume un diverso significato. In tal 

caso un utente può modificare  file esistenti in questa directory quando è proprietario 

del file oppure quando il file ha i permessi corretti. Questa funzione viene utilizzata 

con directory come /var/tmp, che deve essere accessibile da chiunque, ma dove 

non è appropriato per gli utenti modificare o cancellare i dati altrui. Lo sticky bit è 

indicato con una t alla fine dell'elenco dei permessi sul file:

mark:~> ls -ld /var/tmp

drwxrwxrwt 19 root root 8192 Jan 16 10:37 /var/tmp/

Lo sticky bit si imposta utilizzando il comando chmod o+t directory. L'origine 

storica della “t” si ritrova nella funzione UNIX save Text access.

SUID (set user ID) e SGID (set group ID): rappresentato dalla lettera s nel campo dei 

permessi   dell'utente   o   del   gruppo.   Quando   un   file   eseguibile   ha   tale   modalità 

impostata, esso girerà con i permessi dell'utente e del gruppo invece che con quelli 

dell'utente che batte il comando, dando così acceso alle risorse di sistema. Più avanti 

discuteremo i ciò nel Capitolo 4. 

SGID (set group ID) su una directory: in questo caso speciale ogni file creato nella 

directory avrà come gruppo proprietario lo stesso della directory (mentre il normale 

comportamento sarebbe che i nuovi file fossero di proprietà dell'utente che li crea). 

In questa maniera gli utenti non devono preoccuparsi delle proprietà di file quando 

condividono directory

mimi:~> ls -ld /opt/docs

drwxrws--- 4 root users 4096 Jul 25 2001 docs/

mimi:~> ls -l /opt/docs

-rw-rw---- 1 mimi users 345672 Aug 30 2001-Council.doc

Questo è il modo normale di condividere file in UNIX.

I file esistenti non vengono modificati!

I file spostati in una directory SGID,  ma creati altrove, mantengono i loro utenti e 

gruppi proprietari. Ciò può confondere.

3.5. Sommario

Con UNIX, come con Linux, tutte le cose sono rappresentate in un modo o in un altro come file con 

le loro corrette proprietà. L'uso di percorsi (predefiniti) consente agli utenti ed all'amministratore di 

sistema di trovare, leggere e modificare i file.

Abbiamo compiuto i primi passi per diventare degli esperti: abbiamo trattato della struttura reale e 

fittizia del file system  ed ora sappiamo del modello Linux di sicurezza dei file come pure di diverse 

altre precauzioni per la sicurezza che vanno adottate normalmente con ogni sistema.

La shell è il più importante strumento per interagire con il sistema. In questo capitolo abbiamo 

appreso diversi comandi di shell, riportati nella tabella seguente.

Tabella 3­10. Nuovi comandi nel capitolo 3: i file ed il file system

Comando Significato

bash Programma GNU di shell.

cat file(s) Invia il contenuto dei file allo standard output

cd directory Entra nella directory. cd è un comando integrato in  bash.

chgrp newgroup file(s) Cambia il gruppo proprietario di file a newgroup

chown mode file Modifica i permessi di accesso nel file . chmod newowner[:[newgroup]] file(s) Modifica le proprietà di utente e gruppo del file  cp  sourcefile targetfile copia sourcefile con il nome targetfile df file Rapporto sullo spazio usato del disco nella partizione 

contenente file. echo stringa Mostra una linea di testo

export Parte di sistema.bash che mostra le variabili ed i loro valori al  file nomefile Determina il tipo di file di nomefile.

Comando Significato

find percorso espressione Trova file nella gerarchia del file system

grep PATTERN file Mostra le linee in file che contengono il modello  (pattern) di ricerca

head file Invia la prima parte di file allo standard output id Stampa il nome e i gruppi dell'utente reale ed attuale info comando Mostra la documentazione relativa a comando less file Mostra file con un potente visualizzatore ln targetfile linkname Crea un collegamento di nome linkname a 

targetfile.

locate stringadiricerca Mostra tutti i file accessibili che corrispondono al modello  di ricerca.

ls file Stampa il contenuto della directory.

man comando Formatta e mostra le pagine del manuale (di sistema) in  linea relative a comando.

mkdir nuovadir Crea una nuova directory vuota. mv vecchiofile nuovofile Rinomina o sposta vecchiofile. newgroup nomegruppo Registra in un nuovo gruppo

pwd Mostra la directory di lavoro attuale o corrente. quota Mostra l'utilizzo del disco e i limiti.

rm file Rimuove file e directory.

rmdir file Rimuove directory.

tail file Stampa l'ultima parte di file.

umask[valore] Mostra o cambia la modalità di creazione dei nuovi file. wc file Conta linee, parole e caratteri di file.

which comando Mostra l'intero percorso del comando.

Insistiamo pure sul fatto che voi dovreste LEGGERE LE PAGINE MAN. Tale documentazione è il 

vostro kit di pronto soccorso e contiene le risposte a molte domande. La lista precedente contiene i 

comandi fondamentali che userete quotidianamente, ma essi possono fare molto di più rispetto a 

quanto abbiamo detto qui. Leggere la documentazione vi darà il controllo di cui avete bisogno.

Ultima ma non meno importante, ecco un'agile panoramica dei permessi sui file:

Tabella 3­11. Permessi sui file

Chi r(ead) ­ lettura w(rite)­scrittura (e)x(ecute)

u(ser) ­ utente 4 2 1

Chi r(ead) ­ lettura w(rite)­scrittura (e)x(ecute)

o(ther) ­ altri 4 2 1

3.6. Esercizi

Registratevi semplicemente con il vostro ID di utente comune.

Nel documento Introduzione a Linux (pagine 81-89)