Volete imparare Linux per la cybersecurity? Questi appunti vi illustreranno i fondamenti del sistema operativo Linux e i consigli per impararlo.
L'apprendimento dei sistemi operativi Linux è un passo essenziale e inevitabile per la sicurezza informatica. Linux copre circa due terzi dei server mondiali, compreso macOS, anch'esso basato su Linux. Impararlo può sembrare difficile all'inizio, ma Linux è semplice ed esegue solo le azioni che gli indichiamo di eseguire.
Una volta installato su una macchina virtuale, iniziate a guardarvi intorno, fate rivivere il bambino che è in voi con un po' di curiosità. La regola semplice da seguire quando si impara qualcosa di nuovo, compreso Linux, è che più ci si gioca, più diventa facile.
Linux è il sistema operativo più stabile ed è difficile da danneggiare come utente standard. Tutto ciò che dovete fare è non cancellare nulla che richieda la password di amministratore. Per il resto, sentitevi liberi di farci quello che volete.
I sistemi operativi Linux seguono cinque semplici principi che rendono il sistema operativo stesso duraturo ed efficiente:
Principi | Descrizione |
---|---|
Tutto è un file | Tutti i file di configurazione dei vari servizi in esecuzione sul sistema operativo Linux sono memorizzati in uno o più file di testo. |
Programmi piccoli e con un unico scopo | Linux offre diversi strumenti di lavoro che possono essere combinati in vari modi. |
Capacità di concatenare programmi per eseguire compiti complessi | L'integrazione e la combinazione di diversi strumenti ci permette di svolgere compiti ampi e complessi, come l'elaborazione o il filtraggio di specifici risultati di dati. |
Evitare le interfacce utente vincolate | Linux funziona principalmente all'interno della shell (o terminale), che offre all'utente un maggiore controllo sul sistema operativo. |
I dati di configurazione sono memorizzati in un file di testo | Un esempio di questo tipo di file è il file /etc/passwd, che memorizza tutti gli utenti registrati sul sistema (quindi non contiene le password!). |
Tutto in Linux è un file. Tutte le configurazioni e le impostazioni. Questo significa che possiamo trovare e lavorare con qualsiasi impostazione in un file di testo. Tuttavia, possiamo ancora utilizzare l'interfaccia grafica (GUI). Linux ha bisogno solo di un terminale/shell per lavorare. Poiché tutto è contenuto in singoli file, è sufficiente imparare alcuni brevi comandi per lavorare con questi file per crearli, nominarli, spostarli o personalizzarli.
L'altro grande vantaggio di Linux è rappresentato dai tanti piccoli programmi che servono a uno scopo specifico. La sperimentazione di questi piccoli strumenti aumenta notevolmente la nostra potenza ed efficienza nel lavoro con Linux. Inoltre, una volta compreso lo scopo di uno strumento, è possibile combinarlo con altri tool.
Layer | Descrizione |
---|---|
Hardware | Dispositivi periferici come la RAM del sistema, il disco rigido, la CPU e altri. |
Kernel | Il cuore del sistema operativo Linux è la virtualizzazione e il controllo delle risorse hardware comuni del computer, come la CPU, la memoria allocata, i dati accessibili e altro. Il kernel assegna a ciascun processo le proprie risorse virtuali e previene/gestisce i conflitti tra i diversi processi. |
Shell | Un'interfaccia a riga di comando (CLI) è una shell in cui l'utente può inserire comandi per eseguire le funzioni del kernel. |
System Utility | Mette a disposizione dell'utente tutte le funzionalità del sistema operativo. |
Ogni computer ha bisogno di risorse hardware per funzionare. Non importa se si tratta di un PC tower o di un portatile. In Linux, il kernel è l'elemento centrale del software che controlla e gestisce l'hardware. Il kernel gestisce anche i singoli processi e impedisce che vadano in conflitto.
Inseriamo i comandi nella shell per dire al sistema Linux cosa fare; questo ci fornisce varie utilità di sistema che possiamo usare per controllare il sistema stesso.
La struttura del file system di Linux è semplice. Tutto si trova in una directory (per chi viene da Windows - cartella), in cui sono suddivise molte sotto-directory. Ognuna di queste sotto-directory ha uno scopo specifico. A questo scopo è stato sviluppato il cosiddetto Filesystem Hierarchy Standard (FHS).
A prima vista, sembrano esserci molte directory, ma dopo poco tempo le farete vostre. Diamo una rapida occhiata alle singole descrizioni di queste cartelle per capire il loro scopo:
Path | Descrizione |
---|---|
/ | La directory di primo livello è il filesystem root. Contiene tutti le directory che tra poco dettaglierò. |
/bin | Contiene i binari dei comandi essenziali. |
/boot | Al suo interno possiamo trovare il bootloader statico, l'eseguibile del kernel e i file necessari per avviare il sistema operativo Linux. |
/dev | Contiene la virtualizzazione delle risorse hardware in file, questo per facilitare l'accesso a tutti i dispositivi hardware collegati al sistema. |
/etc | File di configurazione del sistema locale. In questa directory possono essere salvati anche i file di configurazione delle applicazioni installate. |
/home | Ogni utente del sistema ha qui una sua sottodirectory per la memorizzazione dei suoi file. |
/lib | File di libreria condivisa necessari per l'avvio del sistema. |
/media | Qui vengono montati i dispositivi multimediali rimovibili esterni, come le unità USB. |
/mnt | Punto di montaggio temporaneo per i filesystem regolari. |
/opt | I file opzionali, come gli strumenti di terze parti, possono essere salvati qui. |
/root | La directory home dell'utente root. |
/sbin | Questa directory contiene gli eseguibili utilizzati per l'amministrazione del sistema (file binari di sistema). |
/tmp | Il sistema operativo e molti programmi utilizzano questa directory per memorizzare i file temporanei. Questa directory viene generalmente cancellata all'avvio del sistema e può essere eliminata in altri momenti senza preavviso. |
/usr | Contiene eseguibili, librerie, file man, ecc. |
/var | Questa directory contiene file di dati variabili, come i file di log, le caselle di posta elettronica, i file relativi alle applicazioni web, i file di cron e altro ancora. |
Ora che è abbastanza chiara la struttura del sistema operativo Linux. I passi successivi consistono nell'imparare a controllare Linux con diversi comandi.
Un comando Linux è come un'istruzione che inseriamo nel nostro terminale per eseguire un programma con uno scopo specifico. Come si può immaginare, ci sono molti scopi per i diversi componenti hardware, software e di rete. Ad esempio, possiamo recuperare, creare, cancellare o modificare informazioni. I comandi possono essere suddivisi (ma non solo) nelle seguenti categorie:
Categoria | Commandi |
---|---|
Recuperare le informazioni | ls, cat, less, more, pwd, grep, ip, ... |
Creare o eliminare informazioni | touch, mkdir, rm, rmdir, ... |
Modifica delle informazioni | vi, vim, nano, sed, ... |
Molti di questi comandi non solo servono a uno scopo, ma offrono anche opzioni che, ad esempio, non servono solo a leggere le informazioni, ma anche a modificarle. Per vedere quali opzioni sono disponibili, digitate "--help" dopo il comando, ad esempio "ls --help".
Il modo migliore per imparare i comandi Linux è sporcarsi le mani e iniziare a fare pratica in ambienti realistici. Nessuna teoria può sostituire la pratica. Un esempio è la guida di un'automobile. Quanto velocemente avete imparato a guidare?
Molto probabilmente avete avuto bisogno di più lezioni di guida con un istruttore per riuscire a tenere il passo con il traffico e a prestare attenzione a molte cose contemporaneamente: marce, pedali del gas, sterzo, distanze e segnali stradali. Rispetto a oggi, probabilmente siete un guidatore più rilassato e non più frustrato dall'esperienza; questo perché avete già sopportato la frustrazione necessaria per imparare. Quando si cerca di imparare qualcosa in fretta (o di imparare qualsiasi cosa), è bene ricordarlo:
Il punto in cui si fatica di più è quello in cui si impara di più. Incontrare sentimenti di frustrazione è naturale e prevedibile.
Ecco un elenco di comandi importanti che vi serviranno per lavorare rapidamente con Linux.
No. | Command | Description |
1 | man <tool> | Apre le pagine man (man sta per manuale) del tool specificato. Il 90% dei tool in ambiente linux ha una raccolta man. |
2 | <tool> -h <tool> --help |
Stampa la pagina di aiuto dello strumento. Non è proprio uno standard ma la stragrande maggioranza di tool usa questo argomento per visualizzare un rapido aiuto. |
3 | pwd | Restituisce il nome della directory di lavoro. Se vi sentite persi, questo tool vi aiuta a capire dove vi trovate. |
4 | ls | Elenca il contenuto della directory. |
5 | tree | Elenca il contenuto di una directory in modo ricorsivo. Ricordate che non sempre è un tool presente nelle distribuzioni Linux, molto spesso questo tool si installa separatamente. |
6 | cd | Il comando che ci consente di cambiare la directory. |
7 | clear [ CTRL ] + [ L ] |
Ripulisce il terminale in cui stiamo lavorando, eliminando dallo schermo le linee di output. |
8 | touch | Crea un file vuoto. |
9 | mkdir | Crea una directory. |
10 | mv | Spostare o rinomina file o directory. |
11 | cp | Copia file o intere directory. |
12 | locate | Utilizza il database dei locali per trovare i contenuti del sistema. Questo tool lo trovate presente di default in molte distribuzioni, ma in molte altre bisogna installarlo a parte. |
13 | cat | Concatenare e stampa i file nello STDOUT. |
14 | more | Pager utilizzato per leggere STDOUT o i file. |
15 | head | Stampa le prime righe in STDOUT di un file. |
16 | tail | Stampa le ultime righe in STDOUT di un file. |
17 | whoami | Visualizza il nome utente corrente. |
18 | id | Restituisce l'identità dell'utente. |
19 | hostname | Imposta o stampa il nome del sistema host corrente. |
20 | uname | Stampa il nome del sistema operativo. |
21 | ifconfig | L'utilità ifconfig viene utilizzata per assegnare o visualizzare un indirizzo a un'interfaccia di rete e/o configurare i parametri dell'interfaccia di rete. Tool attualmente considerato OBSOLETO, ma pur sempre utile. Le sue funzioni sono state sostituite dal tool 'ip' |
22 | ip | Ip è un'utilità per mostrare o manipolare il routing, i dispositivi di rete, le interfacce e i tunnel. |
23 | netstat | Mostra lo stato della rete. |
24 | env | Stampa nello STDOUT le variabili d'ambiente. |
25 | who | Visualizza chi ha effettuato l'accesso. |
26 | passwd | Modifica la password dell'utente. |
27 | useradd | Crea un nuovo utente o aggiorna le informazioni di un nuovo utente predefinito. |
28 | userdel | Elimina un account utente e i relativi file. |
29 | addgroup | Aggiunge un gruppo al sistema. |
30 | delgroup | Rimuove un gruppo dal sistema. |