237 lines
8.9 KiB
Markdown
237 lines
8.9 KiB
Markdown
---
|
|
title: Cybersecurity con sistemi GNU/Linux
|
|
subtitle: Dispensa del corso
|
|
author: Andrea Fazzi
|
|
data: 13.03.2024
|
|
urlcolor: blue
|
|
---
|
|
|
|
# Utilizzo avanzato del terminale
|
|
|
|
In questa sezione verranno discussi gli utilizzi più avanzati del
|
|
terminale. In particolare, ci si soffermerà sui cosidetti *terminal
|
|
multiplexer*.
|
|
|
|
## I *terminal multiplexer*
|
|
|
|
I terminal multiplexer in Linux sono strumenti potenti che consentono
|
|
agli utenti di creare più sessioni di terminale all'interno di una
|
|
singola finestra del terminale. Questi strumenti sono particolarmente
|
|
utili per gestire più processi contemporaneamente, mantenendo aperte
|
|
le sessioni anche dopo la disconnessione, e per organizzare le
|
|
finestre del terminale in modo efficiente.
|
|
|
|
Uno dei terminal multiplexer più popolari e ampiamente utilizzati è
|
|
`tmux`. `tmux` permette agli utenti di creare, gestire e navigare tra
|
|
più sessioni di terminale, facilitando l'organizzazione dei processi e
|
|
la gestione delle finestre. Con `tmux`, è possibile dividere la
|
|
finestra del terminale in più riquadri, ciascuno dei quali può
|
|
eseguire un processo separato, e passare facilmente da una sessione
|
|
all'altra.
|
|
|
|
Un altro esempio di terminal multiplexer è `screen`, che offre
|
|
funzionalità simili a `tmux` ma con una sintassi leggermente
|
|
diversa. Entrambi gli strumenti sono disponibili per la maggior parte
|
|
delle distribuzioni Linux e possono essere installati tramite il
|
|
gestore di pacchetti della distribuzione.
|
|
|
|
Utilizzare un terminal multiplexer può migliorare notevolmente
|
|
l'efficienza e la produttività degli sviluppatori e degli
|
|
amministratori di sistema, consentendo di lavorare con più processi
|
|
contemporaneamente senza dover aprire molteplici finestre del
|
|
terminale.
|
|
|
|
### Riferimenti
|
|
|
|
1. [https://opensource.com/article/21/5/linux-terminal-multiplexer](https://opensource.com/article/21/5/linux-terminal-multiplexer)
|
|
|
|
## Introduzione a `tmux`
|
|
|
|
`tmux` è un potente strumento di gestione delle sessioni di terminale
|
|
in Linux. Permette agli utenti di creare, gestire e navigare tra più
|
|
sessioni di terminale all'interno di una singola finestra del
|
|
terminale. Questa funzionalità è particolarmente utile per
|
|
l'esecuzione di più programmi con una singola connessione, come quando
|
|
si effettua una connessione remota a una macchina utilizzando Secure
|
|
Shell (SSH) [1].
|
|
|
|
Per iniziare ad utilizzare `tmux`, basta digitare `tmux` nel
|
|
terminale. Questo comando avvia un server `tmux`, crea una sessione
|
|
predefinita (numero 0) con una singola finestra e si collega ad
|
|
essa. Una volta connessi a `tmux`, è possibile eseguire qualsiasi
|
|
comando o programma come si farebbe normalmente.
|
|
|
|
## Installazione di `tmux`
|
|
|
|
`tmux` è un'applicazione disponibile nel repository di `Arch
|
|
Linux`. Per installarla basterà utilizzare il comando `pacman`.
|
|
|
|
```bash
|
|
sudo pacman -S tmux
|
|
```
|
|
|
|
Per verificare che l'installazione sia andata a buon fine:
|
|
|
|
```bash
|
|
tmux -V
|
|
```
|
|
|
|
Il comando restituirà la versione installata.
|
|
|
|
### Riferimenti
|
|
|
|
1. https://www.redhat.com/sysadmin/introduction-tmux-linux
|
|
2. https://linuxhandbook.com/tmux/
|
|
3. https://hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/
|
|
4. https://linuxize.com/post/getting-started-with-tmux/
|
|
5. https://linuxconfig.org/introduction-to-terminal-multiplexer-tmux
|
|
6. https://github.com/tmux/tmux/wiki/Getting-Started
|
|
7. https://www.howtogeek.com/671422/how-to-use-tmux-on-linux-and-why-its-better-than-screen/
|
|
8. https://opensource.com/article/17/2/quick-introduction-tmux
|
|
9. https://wiki.archlinux.org/title/Tmux
|
|
10. https://github.com/tmux/tmux/wiki
|
|
|
|
## Primi passi con `tmux`
|
|
|
|
Per eseguire `tmux` si dovrà semplicemente invocare il comando
|
|
all'interno di una sessione di terminale.
|
|
|
|
```bash
|
|
tmux
|
|
```
|
|
|
|
È possibile staccare la sessione `tmux` premendo `Ctrl+B` seguito da
|
|
`D`. `tmux` opera utilizzando una serie di scorciatoie da tastiera
|
|
(keybindings) attivate premendo la combinazione "prefisso". Di
|
|
default, il prefisso è `Ctrl+B`. Dopo di che, premere `D` per staccare
|
|
dalla sessione corrente. La sessione continua ad eseguire in
|
|
background anche dopo la disconnessione, permettendo di riprendere
|
|
dove si è lasciati quando si è pronti a riconnettersi al server e
|
|
riattaccarsi alla sessione esistente.
|
|
|
|
`tmux` fornisce una serie di scorciatoie da tastiera per eseguire
|
|
comandi rapidamente all'interno di una sessione `tmux`. Alcune delle
|
|
più utili includono:
|
|
|
|
- `Ctrl+B D` — Stacca dalla sessione corrente.
|
|
- `Ctrl+B %` — Suddividi la finestra in due pannelli orizzontalmente.
|
|
- `Ctrl+B "` — Suddividi la finestra in due pannelli verticalmente.
|
|
- `Ctrl+B` seguito da una freccia (sinistra, destra, su, giù) — Sposta tra i pannelli.
|
|
- `Ctrl+B X` — Chiudi il pannello.
|
|
- `Ctrl+B C` — Crea una nuova finestra.
|
|
- `Ctrl+B N` o `P` — Sposta alla finestra successiva o precedente.
|
|
- `Ctrl+B 0` (1,2...) — Sposta a una finestra specifica per numero.
|
|
- `Ctrl+B :` — Entra nella riga di comando per digitare
|
|
comandi. L'auto-completamento tramite tab è disponibile.
|
|
- `Ctrl+B ?` — Visualizza tutte le scorciatoie da tastiera. Premere `Q` per uscire.
|
|
- `Ctrl+B W` — Apre un pannello per navigare tra le finestre in più sessioni.
|
|
|
|
### Esercizio
|
|
|
|
Utilizza `tmux` per suddividere il terminale in due pannelli
|
|
verticali. Nel pannello di sinistra apri uno script in Python
|
|
utilizzando l'editor `nano`. Nel pannello di destra esegui il comando
|
|
`htop`. Se `htop` non è presente nel sistema, procedi con la sua
|
|
installazione attraverso il package manager `pacman`.
|
|
|
|
## Configurazione di `tmux`
|
|
|
|
Il file di configurazione di `tmux`, noto come `tmux.conf`, è un file
|
|
di testo che permette agli utenti di personalizzare l'ambiente di
|
|
lavoro di `tmux` secondo le proprie preferenze. Questo file può essere
|
|
posizionato in due luoghi principali:
|
|
|
|
- `~/.tmux.conf` per una configurazione specifica dell'utente corrente.
|
|
- `/etc/tmux.conf` per una configurazione globale, applicabile a tutti gli utenti del sistema.
|
|
|
|
Se il file `~/.tmux.conf` non esiste, può essere creato semplicemente
|
|
eseguendo il comando `touch ~/.tmux.conf` nel terminale. Questo creerà
|
|
un file di configurazione vuoto che può essere modificato per
|
|
aggiungere le impostazioni desiderate.
|
|
|
|
La configurazione di `tmux` può includere una vasta gamma di opzioni, tra cui:
|
|
|
|
- Cambio del prefisso di comando predefinito.
|
|
- Abilitazione della modalità mouse.
|
|
- Impostazione di due prefissi.
|
|
- Cambio del comportamento predefinito del server.
|
|
- Inizio del conteggio dei numeri delle finestre e dei pannelli (Base-Index) a 1.
|
|
- Modifica dello sfondo del pannello corrente.
|
|
- ...
|
|
|
|
Per esempio, per cambiare il prefisso di comando predefinito da
|
|
`Ctrl+B` a `Ctrl+A`, si potrebbe aggiungere la seguente riga al file
|
|
`tmux.conf`:
|
|
|
|
```
|
|
set-option -g prefix C-a
|
|
```
|
|
|
|
Dopo aver apportato modifiche al file di configurazione, è necessario
|
|
ricaricarlo per applicare le nuove impostazioni. Questo può essere
|
|
fatto eseguendo il comando `tmux source-file ~/.tmux.conf` dal
|
|
terminale o utilizzando il comando `source-file ~/.tmux.conf` dalla
|
|
modalità di comando di `tmux`. Per facilitare il processo, è possibile
|
|
aggiungere un collegamento rapido nel file `tmux.conf` per ricaricare
|
|
facilmente la configurazione:
|
|
|
|
```
|
|
bind r source-file ~/.tmux.conf \; display "Reloaded!"
|
|
```
|
|
|
|
Questo permette di ricaricare la configurazione premendo il prefisso
|
|
seguito da `r`, visualizzando un messaggio di conferma.
|
|
|
|
### Riferimenti
|
|
|
|
1. https://hamvocke.com/blog/a-guide-to-customizing-your-tmux-conf/
|
|
2. https://www.hostinger.com/tutorials/tmux-config
|
|
3. https://dev.to/iggredible/useful-tmux-configuration-examples-k3g
|
|
4. https://github.com/gpakosz/.tmux
|
|
5. https://arcolinux.com/everthing-you-need-to-know-about-tmux-configuration/
|
|
6. https://thevaluable.dev/tmux-config-mouseless/
|
|
7. https://github.com/samoshkin/tmux-config
|
|
8. https://wiki.archlinux.org/title/tmux
|
|
9. https://medium.com/@bhavik.n/customize-tmux-to-use-it-effectively-28b262c8b692
|
|
|
|
## Creazione di layout personalizzati
|
|
|
|
Si supponga di voler creare un file di configurazione specifico per un
|
|
progetto in cui il terminale viene diviso in tre parti: due colonne
|
|
verticali di cui una a sua volta suddivisa orizzontalmente. In questo
|
|
caso è possibile utilizzare uno script di configurazione
|
|
personalizzato per `tmux`. Questo script può essere salvato in un file
|
|
separato, ad esempio in `~/.config/tmux/split.conf`.
|
|
|
|
```
|
|
new -s splitted_session # crea una nuova sessione
|
|
|
|
selectp -t 0 # seleziona il primo pannello
|
|
splitw -h -p 50 # divide il pannello corrente orizzontalmente in due parti
|
|
|
|
selectp -t 1 # seleziona il nuovo secondo pannello
|
|
splitw -v -p 50 # divide il pannello corrente verticalmente in due parti
|
|
selectp -t 0 # torna al primo pannello
|
|
```
|
|
|
|
Una volta creato il file di configurazione, occorrerà "eseguirlo" con
|
|
|
|
```bash
|
|
tmux source-file ~/.config/tmux/split.conf
|
|
```
|
|
|
|
### Esercizio
|
|
|
|
Crea un file di configurazione `tmux` per produrre un layout con due
|
|
righe di cui la prima suddivisa in due colonne secondo uno schema
|
|
simile a quello riportato sotto.
|
|
|
|
|
|
```
|
|
-----------
|
|
| | |
|
|
| | |
|
|
-----------
|
|
| |
|
|
-----------
|
|
```
|