Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1. Scrivere uno script in bash che dati due numeri come argomenti stampa il maggiore.
2. Identificare il tipo di file leggendo i file
3. Creare un nuovo utente di nome “studente 2” e fai in modo che “studente” posso eseguire
la shell di studente2 ?
1) Script che accetta un numero come parametro e stampa un messaggio se è divisibile sia
per 5 che per 7 oppure no.
2) Spiegare il job control con degli esempi e dire per cosa è utile, che problemi risolve. ?fin
3) Mostrare i browser disponibili e modificare quello che viene aperto con il comando
browser. stud
Lode) Trovare in che file apt-update salva le informazioni sui pacchetti tramite strace.
1) mi sembra di aver capito che avesse chiesto il meccanismo di controllo degli accessi su
un determinato file;
2) l'albero dei processi con la visualizzazione dei processi relativo al desktop environment e
spiegazione dei vari componenti del desktop manager;
3) trovare quale pacchetto fornisce il comando dd
1) scrivi un script che riceve due parametri e stampa il piu' grande o un messaggio se sono
ug
2) dipendenze duali; irette/inverse del pacchetto bash, sia testuali che grafiche;
3) scrivere un esempio di fork bomb in Bash /be spiegarla
1. Trova tutti i file con setuid e utente creatore root, poi quelli con setgid e gruppo di
lavoro root e infine quelli che hanno capabilities
2. Fai uso delle named pipe con una piccola demo
3. Trova tutti i pacchetti Debian che contengono librerie statiche
man
1. dimostrare in almeno 2 modi diversi che /bin/dd è un eseguibile
2. trovare quale disco contiene il file system principale per poi stampare solo le stringhe
3. albero processi di LibreOffice
1. L’utente studenteos può creare un file all’interno della home di root? Perchè? Cosa si
può fare per fare in modo che tale utente possa farlo? (alla fine è stato creato un file
di nome prova.txt)
2. Dopo essere tornato alla situazione iniziale (ovvero studenteos non può entrare in
/root), fare in modo che l’utente possa eseguire nano per modificare /root/prova.txt
(tramite sudo). studenteos può leggere il file /root/prova.txt? Perchè?
3. Il magic number dei file di tipo ELF è composto dai seguenti 4 byte: 127, “E”, “L”, “F”.
Dimostrare che un file ELF lo è effettivamente (bisogna aprirlo con hexdump e
convertire il primo byte 7F da esadecimale a decimale per verificare che è
effettivamente 127)
find / -name "*" -exec file '{}' \; 2>/dev/null | grep "text" | less
o
find / -name "*" -exec file '{}' \; 2>/dev/null | grep -E "(ASCII | UTF-8 UNICODE) text"
2) Dipendenze da 'dd'
man debtree
su -
cat -n /etc/shadow ---> numero delle password accanto a queste = in questo caso 38
o wc -l /etc/shadow ---> direttamente numero delle righe nel file /etc/shadow
paste <( seq 1 38 ) <( cut -f 1 -d":" /etc/shadow ) <( cut -f 2 -d ":" /etc/shadow ) | column -t
---------------------------------------------------------------------------------------------------------
nano script.sh
Dentro il file:
declare -i a
a=1
top -> priorità da 0 a 139: 0-99 non facilmente accessibile dall'utente -> sudo per impostare
top toglie 100
find / -printf "\n %s " -exec file '{}' \; 2>/dev/null | grep -E "^.*:[[:space:]].*image.*$" | sort -k1nr | head
---------------------------------------------------------------------------------------------------------
Dentro il file:
#!/bin/bash
find / -regex ".*\.\(gif\|png\|jpg\|svg\)$" -printf "%s %p\n" 2>/dev/null | sort -nrk 1 | head (sbagliato)
find / -printf "%s %p\n" -exec file ‘{}’ \; 2>/dev/null | grep “image” | sort -nrk 1 | head (giusto)
chmod +x immagini.sh
./immagini.sh
---------------------------------------------------------------------------------------------------------
apt show ".*" | grep "Download-Size:" | cut -f2 -d" " | sort -nrk 1 | head t-n 1
---------------------------------------------------------------------------------------------------------
apt:
- search: anche ricerche regex
- show: mostra informazioni sul pacchetto
---------------------------------------------------------------------------------------------------------
man syscalls
- Verifica permessi per l'utente che prova ad accederci e componenti del pattern (cartelle)
- Controllo privilegi /
- Controllo privilegi /proc
- Controllo privilegi /proc/kcore
man bash-builtins
---------------------------------------------------------------------------------------------------------
1) Realizzare uno script che riceve due parametri: file e pattern. Ritorna il numero di volte che il pattern è nel file
nano a.sh
Nel file:
#!/bin/bash
exit 0
---------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------
-Setuid
find / -perm -u+s -user root -exec ls -l '{}' \; 2>/dev/null
+
-Setgid
find / -perm -g+s -group root -exec ls -l '{}' \; 2>/dev/null
+
-Capabilities
find / -exec /usr/sbin/getcap '{}' \; 2>/dev/null
Buona soluzione ma lenta, perché i comandi vengono svolti per ogni file nel filesystem
Migliore soluzione:
---------------------------------------------------------------------------------------------------------
Job control puoi provare a lanciare un comando con & alla fine e poi guardi i processi
Si io ho fatto proprio così. Ho lanciato una sleep 30 &
Poi con i comandi fg, bg e jobs fai vedere lo stato dei processi.
---------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------
1) Lettura di un file una riga alla volta usando solo bash
exec 5<"$1"
---------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------
- Setuid = "S" al posto della "x" nella prima terna ---> Una volta che lo script parte agisce con il privilegi del
creatore
- Setgid = "S" al posto della "x" nella seconda terna ---> Una volta che lo script parte agisce con il privilegi del
gruppo del creatore
- Capabilities = Privilegi particolari del creatore a seconda della propria funzione
---------------------------------------------------------------------------------------------------------
pgrep -l firefox
2) Usare strace su apt update e trovare la directory dove vengono messi i file dei repository
apt update
strace apt update 2>&1 | less
ls -l /var/cache/apt/archives ---> No
ls -l [Altra cartella che si vede nell'output di strace]
---------------------------------------------------------------------------------------------------------
man find
find -L / -type l
---------------------------------------------------------------------------------------------------------
1) Creare un file e dare i permessi di accesso a solo due specifici utenti distinti
touch perStudente2.txt
su -
mkdir /home/lavoro
chmod 750 lavoro
chown studente:studente lavoro
chown studente:studente perStudente2.txt
cat perStudente2.txt
---------------------------------------------------------------------------------------------------------
1) Scrivere uno script di shell in BASH che legge un file una riga alla volta, scarta tutte le righe che
iniziano con "r" e stampa le altre, il tutto cercando di usare solo costrutti di BASH
#!/bin/bash
exec 5<"file.txt"
---------------------------------------------------------------------------------------------------------
Lanciare libreoffice
pstree -aps $(pgrep -l oosplash)
---------------------------------------------------------------------------------------------------------
find / -mtime -30 -user root -exec file '{}' \; 2>/dev/null | grep text
Numero | User
n | ...
... |
1 |
|
paste <(seq $(cat /etc/passwd | wc -l) -1 1) <(cut -f1 -d":" /etc/passwd) | column -t > tabellaUtenti.txt
o
paste <(tac <(seq $(wc -l /etc/passwd | cut -d " " -f1))) <(cut -d":" -f1 /etc/passwd)| column -t > tabellaUtenti.txt
---------------------------------------------------------------------------------------------------------
ls -ld /
ls -ld /etc
ls -l /etc/shadow
---------------------------------------------------------------------------------------------------------
i
1) Script in C che stampi i metadati di un file
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
if(ris==-1) {
perror("Errore");
exit(EXIT_FAILURE);
}
printf("ld\n",statbuf.st_size);
exit(EXIT_SUCCESS);
}
type -a echo
Il primo è un comando interno di shell ---> bash
apt-file search /usr/bin/echo ---> Non è registrato nel database di apt-file ---> Copia di /bin/echo per ragioni
storiche
apt-file search /bin/echo ---> coreutils
---------------------------------------------------------------------------------------------------------
1) Con una demo illustrare gli strumenti principali per la gestione della history
Unico file ---> HISTFILE contiene il nome del file della history
Attento con man history che porta alla libreria del C ---> Non legge i comandi interni di shell
---------------------------------------------------------------------------------------------------------
#include <unistd.h>
#include <stdio.h>
if(f == 0) {
printf("Processo figlio\n");
}
3) Trovare tutti i file di testo più recenti di un mese (30 giorni) posseduti dall'utente root
su -
find / -user root -mtime -30 -exec file '{}' \; 2>/dev/null | grep "text"
---------------------------------------------------------------------------------------------------------
1) Trovare tutti i link simbolici all'interno del file system
su -
find / -type l
jobs -l
A che serve? Nato nei primi sistemi che avevano terminali seriali -> 1 solo schermo testuale
1 Unico comando poteva partire in foreground e occupare esclusivamente il canale standard input
#!/bin/bash
declare -i numeroDaIndovinare=48
declare -i tentativi=0
declare -i numeroInserito
while true ; do
echo "Inserire un numero:"
read numeroInserito
let tentativi=++tentativi
if [ $numeroInserito -lt $numeroDaIndovinare ]; then
echo "Il numero inserito è più piccolo"
elif [ $numeroInserito -gt $numeroDaIndovinare ]; then
echo "Il numero inserito è più grande"
else
echo "Indovinato in $tentativi tentativi!!"
break
fi
done
---------------------------------------------------------------------------------------------------------
1) Fare in modo che una cartella con dei file sia condivisibile tra solo due utenti
su -
mkdir shared
gpasswd -a docente studente ---> Mette docente nel gruppo studente
ls -ld shared
chown root:studente shared/
chmod 0750 /shared
chmod 0660 /shared/prova.txt
cd shared
touch prova.txt
chown studente:studente prova.txt
logout
---------------------------------------------------------------------------------------------------------
1) Metapacchetti debian
esempio GNOME
Uso:
- Installare un sacco di pacchetti con un solo nome
(- Un kernel potrebbe non riconoscere una perifirica nell'ultima versione)
---------------------------------------------------------------------------------------------------------
Comando hexdump
---------------------------------------------------------------------------------------------------------