====== ITS Corso GNU/Linux ====== ===== Argomenti ===== Linux da utente ==== Linux da amministratore di sistema ==== - Terminale - Generali: , , , - man, history - ls, cd, cat, head, tail, lsb_release -a - Accesso remoto - ssh - FHS - La gerarchia delle directory - /home,/root - /etc,/var,/usr,/tmp - /proc,/sys - /dev - /usr/local,/opt - Gestione utenti non privilegiati e privilegiati - sudo - Installazione/rimozione pacchetti - apt, apt-get, apt-cache, apt-file - Download file remoti - via ssh: scp - via web: wget e curl - Gestione dei servizi con systemd - systemctl, resolvectl, hostnamectl, timedatectl - Gestione del firewall - la soluzione di Ubuntu ''ufw'' = "Uncomplicated firewall" - firewall standard ''nftables'' (più noto come ''iptables'') - Configurare il sistema - modifica dei file di testo con vim o vi - ricerca contenuti con grep - ricerca files con find - sospensione/riattivazione con , bg e fg ==== Linux da amministratore di rete ==== - i protocolli ''/etc/protocols'' - i servizi e le porte di default ''/etc/services'' - i socket attivi ''ss'' e ''netstat'' - la propria configurazione di rete ''ip addr list'' - le proprie interfacce di rete ''ip link show'' - test di raggiungibilità ''ping'' - test di connessione ad un servizio ''nc'', ''telnet'' - test di connessione ssl/tls con ''openssl'' - test di richieste https ''curl'' - scansione delle porte ''nmap'' - analisi del traffico di rete ''tcpdump'', ''wireshark'' ===== Possibili attività/piccoli progetti ===== - **Riusciamo ad installare un Dokuwiki?** - **Creazione bulk di utenti con password** - **Predisposizione macchina GNU/Linux per il corso di fondamenti di programmazione** ===== Servizi, protocolli e porte di default ===== Qui trovate i servizi utilizzati o citati durante il corso: * dove leggete "porta" è da intendersi come "porta di default"; * dove leggete "client" è da intendersi come "software client di riferimento"; * dove leggete "server" è da intendersi come "software server di riferimento"; | Servizio ^ alias (aka) ^ proto ^ porta ^ client ^ server ^ pkg client ^ pkg server ^ ^ Secure Shell | OpenSSH | ssh | 22 | ssh | sshd | openssh-client | openssh-server | ^ Remote Desktop | Connessione Remota Windows | rdp | 3389 | rdesktop/xfreerdp | xrdp | rdesktop/xfreerdp | xrdp | ^ IMAPs | Consultazione Email (sicuro) | imaps | 993 | thunderbird/mutt | dovecot | thunderbird (snap) | dovecot-imapd | ^ IMAP | Consultazione Email (insicuro) | imap | 143 | ::: | ::: | ::: | ::: | ===== Lezione 4 - 30 aprile 2024 ===== * Rispolveriamo la pipe ''|'' e le pipeline (sequenze di comandi separati dalla pipe) utilizzati per comporre articolati comandi da una riga di shell (di solito la bash e per questo detti ''oneliner bash'' o più sinteticamente ''oneliner'') * Dopo l'esercitazione, ripasseremo velocemente FHS * Poi continueremo con 2 parole sulla ''bash'' e altri comandi base: * Command substitution ''$()'' (o ''`'', ma meglio la forma con il ''$'') * ''awk'' come ''cut'' superpotenziato: https://stackoverflow.com/a/36211753/720743 * ''sed'' come arma letale per processare le righe dello standard input o di uno o più files * Cicli in Bash ==== Esercitazione ==== **Scenario**: Il prof ha esportato 1,3TB di posta elettronica da un server ad un altro via IMAP. Il formato di destinazione è il classico "Maildir" in cui le cartelle che appaiono sul client di posta elettronica sono esattamente cartelle sul filesystem all'interno di una directory "Maildir". Riusciresti a dire cosa voleva monitorare il prof. (comando ''watch'' da esaminare alla fine dell'esercizio) con la sequenza di comandi (o meglio pipeline) che progressivamente ha raffinato qui si seguito tra virgolette? root@new-mail:/home/ced# watch -n10 "du -sh Maildir/.MailSt*" root@new-mail:/home/ced# watch -n10 "du -sch Maildir/.MailSt*" root@new-mail:/home/ced# watch -n10 "du -sch Maildir/.MailSt*" root@new-mail:/home/ced# watch -n10 "du -sch Maildir/.MailSt* | grep G" root@new-mail:/home/ced# watch -n10 "du -sch Maildir/.MailSt* | tail | grep G" root@new-mail:/home/ced# watch -n300 "du -sch Maildir/.MailSt* | tail " root@new-mail:/home/ced# watch -n10 "du -sch Maildir/.MailSt* | tail -n30 | grep Posta" root@new-mail:/home/ced# watch -n10 "du -sch Maildir/.MailSt* | tail -n20 | grep Posta" root@new-mail:/home/ced# watch -n10 "du -sch Maildir/.MailSt*Posta* | tail -n20" root@new-mail:/home/ced# watch -n10 "du -sch Maildir/.MailSt*Posta* | sort -n tail -n20" root@new-mail:/home/ced# watch -n10 "du -sch Maildir/.MailSt*Posta* | sort -n | tail -n20" root@new-mail:/home/ced# watch -n10 "du -sch Maildir/.MailSt*Posta* | grep G | sort -n | tail -n20" Nota: alcune righe potrebbero non aver dato il risultato sperato, per questo sono state rilanciate in modo più opportuno. **Suggerimento banale se ti trovi in difficoltà su comandi o opzioni**: usa il ''man'' oppure esegui il comando con ''-h'' (o ''--help''). Se proprio non riesci a sbloccarti fai una ricerca web, ma a questo punto è meglio se chiedi a ChatGPT o Copilot, perché almeno ti possono chiarire la situazione. Tuttavia non farlo, se vuoi imparare a cavartela da solo, prima di aver provato con il ''man'' o il ''-h''. ===== Lezione 3 - 23 aprile 2024 ===== Il prof crea la macchina Ubuntu2 - Accesso in ssh alla macchina Ubuntu2 - Ripetizione delle operazioni della lezione precedente in autonomia ed esplorando, grazie al comando ''man'' e all'opzione ''--help'', i seguenti comandi: - ls, cat, head e sort, tail e sort, lsb_release -a, grep - cd, mkdir - Ognuno espone un comando esplorato e una opzione. Potete dire da quale directory viene eseguito? - Impostare l'hostname con hostnamectl ==== Integrazione al contesto della Lezione 1 ==== Il progetto rivoluzionario chiamato Linux, porta con sé in realtà un contesto composto da 2 anime, quella più etica del Software Libero ideata da Richard Stallman e quella più tecnica del kernel Linux ideata da Linus Torvalds. La conoscenza della sua storia ci fa capire il ruolo di entrambe e in particolare quello di Linux, come nucleo fondamentale e punta dell'iceberg di un ecosistema che gli ha consentito di spopolare e portare una **vera rivoluzione tecnica e socioeconomica**: * **Quanto è utilizzato GNU/Linux rispetto agli altri sistemi operativi?** [[https://en.wikipedia.org/wiki/Usage_share_of_operating_systems|Percentuale di utilizzo dei sistemi operativi in vari settori (Wikipedia)]] * [[http://www.gnu.org/philosophy/free-sw.it.html|Cos'è il Software Libero?]] * [[http://www.gnu.org/philosophy/why-free.it.html|Perché il software non deve avere padroni]] * [[https://www.debian.org/social_contract|Debian Free Software Guidelines o Debian Social Contract]] * [[https://opensource.org/osd|The Open Source definition]]: open source è la visione aziendale del software libero. Perché realizzare software libero è più efficace ed efficiente e secondo gli "opensourcisti" deve essere presentato in questo modo alle aziende, e non (o in secondo piano) per il valore etico * Le modalità di collaborazione Open Source sono parte de [[https://agilemanifesto.org|Il Manifesto dello sviluppo Agile (2001)]] * [[https://agilemanifesto.org/display/000000020.html|La firma IMPORTANTE di Eric S. Raymond (Open Source Initiative)]] * [[http://agilemanifesto.org/display/000000085.html|La firma di Paxer Conseil]] * [[https://agilemanifesto.org/display/000000027.html|La firma di David Lillie]] ===== Lezione 2 - 19 aprile 2024 ===== ==== Obiettivi ==== - Utilizzo del terminale ed accesso remoto - Utenti, creazione - I Pacchetti e i Repository. Installazione/Disinstallazione/Aggiornamento ==== Attività ==== Parte 1: - its-student accede in ssh alla macchina Ubuntu1 (192.168.6.203) - ssh its-student@192.168.6.203 - its-student crea un utente per ogni alunno - sudo adduser tuonick - id tuonick - its-student rende l'utente alunno privilegiato - sudo adduser tuonick sudo - id tuonick - ls /home/ - its-student fa logout (logout o exit o CTRL+D) dalla macchina Ubuntu1 - ogni alunno accede via ssh alla macchina Ubuntu1 Parte 2: - ogni alunno installa vim, code, gcc e tmux, xrdp rispettivamente - test dei comandi appena installati - test di accesso remoto al sistema Ubuntu tramite Connessione Desktop Remoto di Windows ===== Lezione 1 - 09 aprile 2024 ===== ==== Il contesto: Il Software Libero, Linux e GNU/Linux ==== (WAS: Le 2 anime di GNU/Linux: contesto etico e tecnica) **Richard Stallman** dal 1984 rappresenta la parte etica per portare la libertà agli individui attraverso il software libero. Fonda il progetto GNU, definisce le 4 libertà e crea la licenza software GPL-v2 (ora GPL-v3) che garantisce la 4 libertà fondamentali. **Linus Torvalds** inizia nel 1991 a scrivere un kernel per migliorare la sua produttività e per divertirsi. Inizialmente nemmeno doveva essere un kernel. È bravo, lo comunica agli appassionati, decide di applicargli la licenza GPL-v2 e può integrare facilmente il suo sviluppo con i tool per progetto GNU per ottenere un sistema operativo Unix alternativo. Che secondo Stallman //Per questo durante questo corso presenteremo prevalentemente gli aspetti pratici, ma non tralasceremo il contesto che ha creato Stallman e che ha altre implicazioni pratiche sulla diffusione del software, sull'immenso business che si è creato e, se riusciremo a vederlo anche sulle modalità di lavoro dei team delle moderne aziende Lean.// ==== Efficacia di oggi: OpenSSH per la connessione remota sicura e installazione VM Ubuntu ==== {{ :its:corsolinuxits-openssh.jpg?400|}} - Introduzione al protocollo SSH e la sua implementazione libera OpenSSH - Porta di default 22, come porte http e https - Utilizzo di ssh da Windows a Ubuntu Live - Accenno minimale comandi ''ip'' e ''ss'', da vedere ''ifconfig'' e ''netstat'' === Installazione di Ubuntu Desktop === - Eseguita installazione con impostazioni predefinite su macchina VMWare - **Problema**: al riavvio della VM abbiamo ottenuto un blank screen; - **Soluzione**: assegnare 24MB alla scheda grafica di VMWare che di default ne assegna solo 4; - **Nota**: a noi non serve l'interfaccia grafica, se non (forse) per analizzare i pacchetti con wireshark [[https://docs.befair.it/doku.php?id=sysadmin:index#introduzione_a_ssh|Per smanettare un po' con ssh ci si può rivolgere anche alla seziona apposita in questo wiki]]. Si accettano consigli / pull request per migliorare questi contenuti. ==== Contesto etico di oggi: 20 anni di Linux e Revolution OS ==== {{ :its:corsolinuxits-gnusnotunix.jpg?400|}} - [[https://www.youtube.com/watch?app=desktop&v=fDWZUpMqDDM|20 anni di Linux EN con sottotitoli]] - [[https://www.youtube.com/watch?v=1o9RaSdGlOI|Revolution OS ITA]] - Personaggi da sapere - Richard Stallman, - Linus Torvalds - Eric Raymond (La cattedrale e il bazaar, manutentore Jargon File) - Progetti da sapere - **Il progetto GNU e la licenza GPL con le 4 libertà del Software Libero** - Netscape come premessa a Mozilla Firefox - Addon: timeline delle distribuzioni GNU/Linux. - Principali: Slackware, Debian e Red Hat - Nota di merito su Archlinux