Auto saved by Logseq

This commit is contained in:
andrea 2023-11-10 16:52:53 +01:00
parent a1cd65080c
commit f3ae3bd955

View file

@ -65,5 +65,120 @@
- Inviate il file markdown su accademia@andrefazzi.eu indicando l'indirizzo IP locale della macchina host e allegando alla mail la chiave pubblica che avete inserito nel container per rendere l'accesso *password less*.
id:: 654e277f-3f84-4397-907f-debaddb5d90d
- Per costruire il servizio si può utilizzare un immagina già pronta oppure costruirla attraverso un Dockerfile. Nel primo caso occorrerà giustificare la scelta di quella particolare immagine.
- Converti il seguente script bash in python.
A partire dallo script generato produci un crash-course di Python da svolgere in massimo 2 ore di lezione in cui vengono messi in risalto i costrutti fondamentali del linguaggio di programmazione.
```bash
#!/bin/bash
DRY_RUN=0
REMOVE_USER=0
SMTP_SERVER=""
# Controlla se l'opzione --dry-run, --rm, --smtp sono state specificate
for arg in "$@"
do
if [ "$arg" == "--dry-run" ]
then
DRY_RUN=1
elif [ "$arg" == "--rm" ]
then
REMOVE_USER=1
elif [[ "$arg" =~ ^--smtp=.* ]]
then
SMTP_SERVER="${arg#*=}"
fi
done
# Controlla se pwgen è installato
if ! command -v pwgen &> /dev/null
then
echo "Il programma pwgen non è installato. Installarlo? (s/n)"
read answer
if echo "$answer" | grep -iq "^s"
then
sudo apt-get install -y pwgen
else
echo "Lo script non può continuare senza pwgen. Uscita."
exit 1
fi
fi
# Legge le credenziali SMTP dal file .env
source .env
echo $SMTP_SERVER
echo $SMTP_USER
# Inizia a leggere gli username da stdin
while IFS= read -r username
do
# Se l'opzione --rm è attiva e l'utente esiste, lo rimuove
if [ $REMOVE_USER -eq 1 ] && id -u "$username" >/dev/null 2>&1; then
sudo userdel "$username"
fi
# Controlla se l'utente esiste già
if id -u "$username" >/dev/null 2>&1; then
echo "L'utente $username esiste già. Saltando."
continue
fi
# Genera una password
password=$(pwgen -s -B 8 1)
# Se l'opzione --dry-run è attiva, stampa il comando senza eseguirlo
if [ $DRY_RUN -eq 1 ]
then
echo "sudo useradd -m -s /bin/bash -p \"$(openssl passwd -1 $password)\" \"$username\""
else
# Crea l'utente
if sudo useradd -m -s /bin/bash -p "$(openssl passwd -1 $password)" "$username"
then
echo "$username,$password"
# Se l'opzione --smtp è attiva, invia una mail all'utente
if [ -n "$SMTP_SERVER" ]
then
echo "Invio una mail tramite $SMTP_SERVER..."
# Popola il template della mail
mail_body=$(cat mail.tpl)
mail_body=${mail_body//'{USERNAME}'/$username}
mail_body=${mail_body//'{PASSWORD}'/$password}
echo -e "Subject: Nuovo account\n\n$mail_body" | msmtp --host=$SMTP_SERVER --port=587 --tls=on --tls-starttls=on --user=$SMTP_USER --password=$SMTP_PASS --from=$SMTP_USER posta@andreafazzi.eu
fi
else
echo "Errore nella creazione dell'utente $username. Saltando."
fi
fi
done
```
Per ogni costrutto fondamentale produci dei semplici esempi. Assicurati che la prima parte del corso contenga le istruzioni basilari per verificare che l'interprete Python sia presente sulla macchina supponendo che lo studente stia utilizzando una distribuzione basata su Debian o, in alternativa, fornisci i passi per installare Python su una distribuzione basata su Debian.
Non produrre il corso tutto in una volta ma, dopo aver terminato una sezione del corso, aspetta un mio prompt per continuare.
Non dimenticare di utilizzare lo script convertito come riferimento per gli argomenti trattati e per gli esempi.
Il corso potrebbe essere strutturato come segue. Formatta l'output generato in Markdown. Aspetta il mio prompt per procedere alla generazione dell'argomento successivo. Gli argomenti principali sono quelli di Livello 3 (`###`) nella strutturazione Markdown riportata sotto.
- ### Introduzione a Python (massimo 100 parole)
* Sottolineare il fatto che Python è un interprete
* Raccontare brevemente la storia delle versioni di Python
- ### Installazione di Python su Debian (massimo 50 parole)
* Spiegare come verificare se l'installazione è già presente
* Spiegare come installare Python qualora non fosse già presente sul sistema
- ### Costrutti fondamentali del linguaggio
- #### Variabili (massimo 100 parole di descrizione + esempi)
* Specificare i principali tipi di variabile
- #### Istruzioni (massimo 100 parole di descrizione + esempi)
- #### Cicli (massimo 100 parole di descrizione + esempi)
- #### Branch condizionali (massimo 100 parole di descrizione + esempi)
- #### Strutture di dati (massimo 100 parole di descrizione + esempi)
- ### Esercizi (massimo 3 esercizi)
- ### Compito di realtà
Assegna un compito di realtà da svolgere in Python che sia inerente al tema della Cybersecurity.
## Lezione 10 (4 ore)
- Verifica