Decalogo

Da Luckylinux.org - Il wiki di informatica, tecnologia e programmazione.

In questa pagina cercheremo di raccogliere in 10 punti le principali informazioni che un utente medio di Windows deve assolutamente conoscere per rendere il meno possibile traumatico l'impatto con GNU/Linux.

Indice

Utente e Amministratore, 2 identità distinte

Molti sistemi operativi, tra cui tutti quelli della famiglia Windows, di default identificano l'utilizzatore del PC come un unico utente, che ha pieno controllo sul sistema. Benché questo approccio possa (apparentemente) rendere più semplice la vita agli utenti, è la causa principale di una debolezza strutturale di questi sistemi, che li rende patricolarmente vulnerabili a virus e malware in generale.

In GNU/Linux (o in generale in tutti i sistemi derivati da UNIX), invece, un'installazione tipica prevede la creazione iniziale di 2 utenti:

  • utente normale: può avere un nome utente (o login) qualsiasi, e ha limiti molto stretti per quanto riguarda la possibilità di intervenire sulla configurazione del sistema; queste limitazioni, comunque, non costituiscono minimamente un ostacolo all'utilizzo normale della macchina, tuttavia impediscono che l'utente possa danneggiare in qualsiasi modo il sistema (o gli altri utenti, se presenti);
  • l'utente root: ha controllo completo della macchina, può accedere a tutti i files e gestire tutta la configurazione; il suo ruolo è generalmente limitato ai compiti di amministrazione, messa a punto della configurazione, installazione/rimozione programmi, etc...

Le limitazioni degli utenti normali possono variare in funzione della distribuzione, della configurazione e seguono le esigenze imposte dal livello di sicurezza richiesto: un PC domestico ha bisogno di una maggiore usabilità di un server di rete affacciato su Internet, la cui esigenza principale è la resistenza agli attachi esterni, quindi sarà diversa anche la configurazione dei permessi.

In generale, comunque, un utente non può modificare nessun file eseguibile, di sistema o di configurazione globale, non può accedere in modo diretto ad alcune periferiche (ad esempio, non può modificare le partizioni presenti sul disco). Questa filosofia garantisce una sicurezza ed un'affidabilità di gran lunga superiore a quella monoutente, e rendono il sistema praticamente immune da virus, trojan, spyware e dialer (maggiori informazioni qui).

Nella configurazione standard, all'avvio della macchina, l'utilizzatore del PC deve identificarsi al sistema, mediante un username e una password (fase di login).

ALT! Identificarsi

Proprio a causa dell'importanza della distinzione dei ruoli, è necessario che un sistema UNIX sappia chi ha davanti, in modo da permettere l'utilizzo della macchina in modo corretto e ordinato. L'identificazione avviene normalmente attraverso l'inserimento di un username e una password.

In questo modo, il sistema riesce a stabilire i limiti da applicare all'utente (che sono alla base della sicurezza di UNIX), impedendogli, ad esempio, di danneggiare i dati degli altri utenti di quella macchina, oppure il sistema stesso.

Ogni file creato dall'utente sarà di sua proprietà, che gli sarà riconosciuta dal sistema (vedi più avanti Il sistema arroccato: i permessi).

Tuttavia, per i PC destinati ad uso workstation o domestici, è possibile impostare il login automatico di un utente predefinito, in modo da risparmiare all'utente il fastidio di mettere ogni volta login e password, procedura inutile in un ambiente monoutente o fidato. Naturalmente è fortemente sconsigliato impostare il login automatico dell'utente root, perché, così facendo, si mina la base su cui poggia tutta la sicurezza del sistema.

A:, C:, e D: non esistono

Nel sistema GNU/Linux non esistono i nomi delle partizioni. Per capire cosa e' una partizione bisogna spiegare come windows concepisce volumi e partizioni nel suo file system.

Prendo ad esempio il file system NTFS. Quando installate un hd in un pc e lo formattare con ntfs potete scegliere o di allocare l'intero disco associandogli una lettera (partizione unica, tipicamente identificato dalla lettera C:, perche' A: e B: storicamente sono associati ai floppy disk), oppure dividere l'hd in tante partizioni, associando ad ognuna di essere una lettera progressivamente crescente secondo l'alfabeto; quindi C:, D:, E:, etc...

Il volume in questo caso e' sempre rappresentato dal singolo disco rigido fisico, mentre la partizione rappresenta una parte di esso. Se invece abbiamo installato 2 hardisk nel pc possiamo unire i 2 hd facendoli vedere come un'unica partizione composta pero' da 2 volumi. Questo e' brevemente e' forse in maniera superficiale come si comporta windows con gli hd.

Ora vediamo GNU/Linux. Nei sistemi UNIX-like il discorso e' diverso anche se non in maniera eccessiva. Innanzitutto abbiamo una univoca "radice delle cartelle", che non e' altro che l'apice o punto di partenza da cui si dirameranno tutte le directory del nostro sistema linux come se fosse un albero. Quindi niente C: ma semplicemente "/" (si legge root).

Generalmente avremo una struttura cosi' delle directory :

  /--+
     |-- boot
     |-- bin --+
     |         |-- eseguibili 
     |
     |-- etc --+
     |         |-- principali file di configurazione del sistema
     |  
     |-- home --+
     |          |-- <directory utente 1>
     |          |-- <directory utente 2>
     |                     ...
     |-- media --+
     |           |-- floppy
     |           |-- CDROM
     |           |-- USB pen
     |                ...
     |-- usr --
     |
     .
     .

ESISTE 1 SOLA ROOT ben intesi!!!! Quando dovrete inserire altri hd o altre periferiche di massa queste ve le ritroverete, se avete la procedura automatica di montaggio, di solito dentro la cartella /mnt o in alcune distribuzioni linux e' su /media. Per il discorso delle partizioni vale come per windows, cioe' come e' possibile dividere un hd con + partizioni, generalmente /, /home, "swap", ma anche unire + hd da assegnare per esempio alla cartella delle "home" degli utenti del sistema. Ovviamente ogni cartella principale dentro la cartella root ha un significato ben preciso. Per quanto riguarda il tipo di file system utilizzato in linux ce ne sono svariati e per tutti i gusti/esigenza, dai normali ext2/ext3 ai + evoluti e professionali per esigenze speciali tipo XFS o le versione Reiser di ext3. Da linux da un po' di tempo e' anche possibile pero' leggere/scrivere partizioni di windows anche con file system NTFS, di solito ritenuta la + ostica con la quale trattare; brevemente i file system di windows sono FAT, FAT32, NTFS.

Ma cos'e' alla fine questo file system di cui tanto si parla ??? Il file system non e' altro che quella parte di sistema operativo, cioe' quella del programma principale di qualsiasi pc, che gestisce in maniera diretta senza far trasparire all'utilizzatore tutta quella parte di comandi atti a far funzionare tutte quelle componenti hardware in cui vengono letti/scritti dei dati, esempio hd, lettori cd, memory card, ma anche la ram. Non solo fa' da' intermediario tra noi e l'hardware ma ci organizza anche come verranno memorizzati i dati e quindi avremo, sotto linux, un'array i-node che non sono altro che una lista di clusters, cioe' blocchi dati, in cui saranno memorizzati i dati dei files secondo un certo schema ben preciso, e sotto windows, abbiamo invece una serie di MFT.

Approfondimenti

Il sistema arroccato: i permessi

Immagine:Permessi konqueror.png
Gestione dei permessi attraverso l'interfaccia grafica (Konqueror File Manager)
In un sistema UNIX, qualsiasi file o directory è caratterizzato da un proprietario, un gruppo di appartenenza e un insieme di etichette che indicano al sistema quali sono le operazioni che il proprietario, i membri del gruppo o gli altri utenti sono autorizzati ad eseguire su un determinato file.

Consideriamo ad esempio questo gruppo di files (il layout è lo stesso di quello dell'output su terminale del comando ls, una versione più evoluta di quello che era il comando dir dell'MS-DOS):

 drwxr-xr-x  2 tizio ufficio      80 2006-01-24 14:20 sottodirectory
 -rw-r--r--  1 tizio ufficio    3655 2006-01-07 18:51 questo.txt
 -rw-rw-r--  3 tizio ufficio    5482 2005-11-15 12:41 quello.ods
 -rw-r--r--  4 caio  ufficio    1224 2005-06-27 18:15 quell'altro.jpeg
 -rwxr-x---  3 root  ufficio     458 2006-04-12 10:38 eseguibile

Si considerino, per il momento, solo le voci in grassetto. A sinistra troviamo 10 byte, alcuni occupati da una lettera, altri con un - (segno di sottrazione). Questi byte indicano i permessi vigenti su quei files. Nelle due colonne centrali, troviamo i nomi del proprietario (in rosso) e del gruppo (in blu) a cui appartiene il file. Nell'ultima colonna a destra, in nero, c'è il nome del file.

Il primo byte a sinistra indica il tipo di file elencato: il segno di sottrazione (-) indica che si tratta di un file semplice, d di una directory, l di un collegamento simbolico, etc...

Gli altri 9 bytes vanno letti a gruppi di 3, ognuno dei quali ricalca la sequenza rwx. Il primo gruppo (in rosso) indica i permessi che ha il proprietario su quel file, il secondo (in blu) quelli dei membri del gruppo, il terzo (in verde) quelli di tutti gli altri utenti.

Se è presente la lettera r indica:

  • per files e dispositivi: si dispone del permesso di lettura del contenuto;
  • per directory: è possibile vedere la lista dei files contenuti (quest'ultimi non necessariamente leggibili, deve essere associato il permesso di lettura per ognuno).

La lettera w indica:

  • per files e dispositivi: la risorsa è modificabile;
  • per directory: è possibile creare/cancellare i file contenuti, indipendentemente dai permessi di ogni file.

La lettera x, infine, associa il permesso di esecuzione al file, analogamente al ruolo svolto dall'estensione .exe nei sistemi DOS/Windows. In GNU/Linux, non ha alcuna importanza quale sia l'estensione del file, la presenza di questo flag è condizione necessaria e sufficiente per l'identificazione di codice eseguibile. Nel caso in cui l'oggetto sia una directory, indica che è possibile l'attraversamento della stessa.

Nota: talvolta è possibile trovare la lettera s al posto di x. In questo caso, significa che il file è eseguibile e verrà lanciato con gli stessi diritti del proprietario (o del gruppo).

Approfondimenti

Si scrive solo a casa propria

Una volta eseguito il login come utenti, l'unica directory alla quale si ha accesso in scrittura è la propria home (generalmente /home/<nomeutente>). L'utente deve poter usare la macchina, ma non gli è consentito modificare nessun file né di sistema, né quello degli altri utenti, a meno che l'amministratore non disponga diversamente (sconsigliatissimo). Questa architettura impedisce anche che un eventuale virus o malware in generale, lanciato anche involontariamente dall'utente possa in alcun modo arrecare danni o provocare malfunzionamenti, oltre che a rendere particolarmente agevoli le operazioni di backup e manutenzione.

Antivirus e Firewall

Antivirus

I sistemi UNIX non hanno bisogno di antivirus per proteggersi, poiché le restrizioni dei permessi imposte dal sistema, la distinzione tra diritti di amministratore e di utente e la rapidità con cui vengono corrette le falle di sicurezza garantiscono un ottima difesa e rendono praticamente impossibile la realizzazione di malware in grado di infettare e riprodursi.

Per approfondire, consigliamo la lettura dell'articolo: Linux/Unix: i Sistemi Operativi non vulnerabili al classico concetto di "virus", di Marco Pratesi, che, indicando le differenze tra le architetture dei sistemi operativi UNIX-like e Windows, spiega come la minaccia virus sia praticamente sconosciuta su GNU/Linux e perché, molto probabilmente, rimarra tale anche in futuro.

Firewall

Il kernel Linux include già un firewall, Netfilter, molto apprezzato per le sue doti di:

  • affidabilità e sicurezza: come tutto il codice incluso nel kernel, ha superato test molto severi prima di essere stato incluso nella versione ufficiale, ed è molto utilizzato per proteggere server di rete e intranet aziendali, dove l'affidabilità è cruciale;
  • prestazioni: è integrato nel kernel, quindi il filtraggio del traffico viene effettuato nel livello più basso del sistema: in questo modo i tempi di latenza vengono ridotti drasticamente, fino ad essere considerati trascurabili;
  • flessibilità: grazie all'utilizzo delle catene, possono essere costruite tabelle molto complesse per la realizzazione del filtraggio.

Il principale strumento per la configurazione di Netfilter è il comando iptables, attraverso il quale è possibile impostare le regole delle catene, in modo da realizzare un firewall adeguato alle proprie esigenze. Alcuni esempi di configurazione con iptables sono disponibili qui.

Esistono anche diversi tools grafici per la configurazione di Netfilter da parte di utenti poco esperti; tra questi ricordiamo GuardDog e Firestarter.

Niente .exe per le installazioni: i pacchetti

La gestione del software installato in GNU/Linux viene gestito attravesro i pacchetti, che costituiscono un archivio compresso contenente i files dell'applicazione, informazioni sulle dipendenze e degli script per la configurazione del sistema da eseguire prima e dopo l'installazione e la rimozione del pacchetto.

L'utilizzo dei pacchetti consente di gestire il software installato nel sistema in modo molto efficiente ed ordinato e rende gli aggiornamenti molto rapidi.

Tutte le distribuzioni più diffuse mettono a disposizione una grande scelta di software già sotto forma di pacchetti, o nel CD/DVD di installazione della distribuzione, oppure nei repositories (sing. repository), degli archivi in rete accessibili con una normale connessione ad Internet. I repositories vengono utilizzati sia per prelevare gli aggiornamenti della distribuzione (sempre sotto forma di pacchetti), sia per l'installazione di nuovo software.

A differenza di Windows, quindi, non c'è la necessità di scaricare il software dal sito ufficiale, ma spesso basta una veloce ricerca attraverso il programma di gestione dei pacchetti per trovare il software cercato. Rimane tuttavia la possibilità di installare del software compilandolo direttamente dai sorgenti (e pacchettizzarlo con l'utility checkinstall), oppure ricorrendo ad uno script eseguibile, analogamente a Windows. Quest'ultima opzione è spesso scelta da software commerciale e videogiochi, in quanto indipendente dalla tipologia di pacchetti adottato dalla distribuzione. In questo caso, l'installazione viene effetuata in una directory separata da quella degli altri programmi (generalmente /opt), per mantenere il sistema ordinato, e le eventuali dipendenze da librerie di sistema vanno soddisfatte manualmente.

Le dipendenze

Molto spesso le applicazioni si appoggiano, per il loro funzionamento a programmi o librerie di sistema esterne, a loro volta necessarie per il funzionamento di altri programmi, contenuti in altri pacchetti. Il sistema di gestione del software deve quindi garantire che, nel momento in cui venga installato un pacchetto, trovi già nel sistema tutti i files esterni di cui ha bisogno (o, in gergo, dipende) o, eventualmente, si occupi di installarli automaticamente. Questo costituisce il sistema delle dipendenze.

Approfondimenti

Le tante facce di GNU/Linux: gestori delle finestre e ambienti desktop

L'architettura del sistema grafico di GNU/Linux (e più in generale dei sistemi UNIX) è basata su una struttura modulare (client-server), a differenza di quella di Windows, che costituisce un tutt'uno con il sistema operativo.

Questa tecnologia ha permesso la realizzazione di diverse interfacce utente che vanno dai semplici window manager, che si occupano solo di fornire un supporto di programmi che girano sotto forma di finestre, agli evolutissimi ambienti desktop in grado di formire molte funzioni avanzate (ad esempio la gestione dello storico degli appunti).

Approfondimenti

L'importanza del terminale

Immagine:Shell.png
Konsole - il terminale predefinito di KDE
Il terminale (o shell) costituisce il migliore strumento che un'utente possiede per comunicare con il sistema. Se chiederete aiuto per la risoluzione di un problema con il vostro sistema, è molto probabile che vi verrà richiesto di utilizzare il terminale per raccogliere maggiori informazioni sul problema stesso, oppure di intervenire attraverso la riga di comando.

Per questo motivo, è indispensabile che, una volta effettuata l'installazione della vostra distribuzione nuova fiammante, impariate immediatamente da dove si lancia un terminale, in modo da poter intervenire agevolmente in caso di problemi.

In caso di malfunzionamenti del server grafico X Window, inoltre, il terminale è l'unico strumento attraverso il quale è possibile accedere al sistema per tentare di mettere a posto le cose.

Nota: la necessità di utilizzare il terminale spesso viene vista come un limite del sistema operativo GNU/Linux, perché meno intuitiva da utilizzare di un'interfaccia grafica. Benché possa risultare ostica, soprattutto per chi è stato abituato al punta e clicca di Windows, la riga di comando è indispensabile sia per la sua affidabilità e possibilità di controllo, sia per la sua flessibilità. Di questo fatto sembra aver preso coscienza anche Microsoft, che doterà di una shell le prossime versioni di Windows.

Per maggiori informazioni sull'utilizzo del terminale: Introduzione all'uso della shell.

Maiuscole e minuscole

I sistemi UNIX sono case sensitive, distinguono cioè lettere maiuscole da quelle minuscole. Ad esempio, i files pippo, Pippo, e PIPPO sono 3 files distinti, e possono coesistere nella stessa directory.

Questa costituisce una differenza significativa rispetto alla gestione dei nomi in Windows, che permette di usare lettere maiuscole nel nome, ma considera pippo, Pippo e PIPPO lo stesso file.

Particolare attenzione, quindi, deve essere prestata anche per i comandi lanciati da terminale.

Immagine:P2pforumcollab.gif‎

Strumenti personali

-->
Navigazione
Siti amici
-->

Strumenti
-->

-->