debootstrap

Ciao,

per una prossima versione di linux sul mio portatile pensavo, invece di
usare un immagine *ubuntu prefatta,
di partire da qualcosa di più ridotto tipo debootstrap. Da quella
versione poi fare le configurazioni e l'installazione
dei pacchetti necessari.
Oltre per la "didattica" ho visto che questo approccio porterebbe ad un
sistema decisamente più snello e performante

Se per la parte di installazione dei pacchetti e configurazioni ritengo
di avere abbastanza esperienza,
invece ho meno esperienza sul fatto di renderlo sicuro. Non so se
nell'iso "prefabbircata" ci siano accorgimenti di sicurezza
che magari ignoro.

In pratica la sicurezza che volevo configurare era:

* firewall con iptables
* apparmor
* disable root login
* utilizzare normalmente un utente non privilegiato

Secondo voi ci può essere altro? Avete fatto già esperienze con sistemi
fabbricati con debootstrap?

Saluti!

apparmor non l'ho neanche mai usato però iptables, disabilitazione di root
login e uso di un utente non privilegiato sono proprio le cose che faccio
io.

io le iptables su un pc usato come client ho iniziato ad utilizzarle solo
da quando ho un portatile che uso in giro, quando sono a casa le tengo
aperte perché tanto ho già le iptables sul serverino domestico, ma se sono
in giro specie sotto wifi pubblici chiudo tutto così sono sicuro che
nessuno può accedere al mio apache, al samba (anche se è protetto da pwd),
nfs e servizi vari che in un ambiente non-trust sono delle belle backdoor.

poi dipende dal livello di sicurezza che si vuole ottenere, io stavo
pensando sempre per il portatile che se me lo fregano (spero di no!!!!!)
possono leggere tutto il contenuto, quindi forse un filesystem criptato può
aiutare (anche se devo ancora iniziare ad approfondire che tecnologie
usare, partirei da qua cmq
Data-at-rest encryption - ArchWiki) e sempre per la
questione "sicurezza in ambienti non sicuri" tipo wifi-open proxare tutto
il traffico tramite vpn o tunnel di qualche tipo, tutte cose che voglio
fare ma non ho ancora provato; magari questa pagina
OpenVPN - ArchWiki può dare buoni spunti ma
ancora non ho mai provato e non so se c'è qualcosa di meglio o più adatto,
certo avrei il traffico criptato e quindi anche se mi sniffano in open-wifi
non leggono le robe in chiaro e se la usassi per connettermi a casa,
dovunque mi trovo sarebbe come se fossi nella mia lan di casa.

per il firewall con iptables è un mondo enorme, dipende sempre da cosa si
vuole ottenere e da quanto se ne sa, si potrebbe passare una vita intera a
configurare un firewall, è un po' come decidere se per fare un blog si
scarica un wordpress o ci si scrive l'engine da zero!
poi c'è usa un mix di iptables e sysctl, ad esempio per l'antispoofing si
può abilitare direttamente il flag nel kernel usando sysctl, altri invece
disabilitano la protezione e preferiscono scriverla con iptables per
loggare i tentativi di spoofing!!!
poi dallo scorso ottobre iniziano a prendere piede le nftables che pare un
giorno sostituiranno le iptables.
in rete si trovan 10000 modi per scrivere le stesse cose in modo diverso.

cmq sia io mi sono trovato molto bene per capirci un po' di più di iptables
consultando questi link, sono della Arch-Wiki ma le info contenute sono
portabili su altre distribuzioni tranquillamente:

   - Internet sharing - ArchWiki
   - Simple stateful firewall - ArchWiki
   - iptables - ArchWiki (non capire il flusso
   delle catene iptables
   <iptables - ArchWiki; equivale
   a programmare in JS e non sapere come è gestito this e lo scope :D:D:D)
   - nftables - ArchWiki (quando sei diventato un
   iptables-evangelist ecco che arrivano le nftables :smiley: mah sembrano
   interessanti cmq)

Stefano.

2016-01-17 12:10 GMT+01:00 Davide <d(a)vide.bz>:

attachment.htm (5.12 KB)

Ciao Stefano,

grazie per la lunga descrizione. Si mi sono dimenticato ma già
attualmente uso file cryptati. Da una parte
uso la home criptata che ubuntu mette a disposizione con una
configurazione. Dall'altra uso encfs da anni
per i progetti dei clienti. E' interessante come ci si riesca a lavorare
in modalità mount "on-the-fly" senza particolari
problemi di performance.
Da quello che leggevo sarebbe meglio andare verso ecryptfs per via che
encfs è più vecchio, ormai poco mantenuto
e con qualche vulnerabilità come per esempio il caso in cui l'attaccante
abbia la possibilità di leggere più versioni dello stesso file nel tempo.

Per il futuro vorrei criptare tutto il filesystem anche se mi piacciono
più gli "Stacked filesystem encryption" per via che hai dei semplici
file e quindi puoi fare backup con un semplice rsync dei file criptati
direttamente.

attachment.htm (8.31 KB)

grazie a te per le info, mi aiuteranno nella scelta del sistema di
encrypting.
da quello che descrivi mi viene da desumere che encfs sia sensibile al
partial-information-attack

2016-01-17 17:24 GMT+01:00 Davide <d(a)vide.bz>:

attachment.htm (8.71 KB)

La maggior parte delle distro configura quello di cui sopra out of the
box (tranne selinux vs apparmor a seconda della famiglia). Piuttosto
che debootstrap, suggerisco di iniziare da qui:
https://github.com/lfit/itpol/blob/master/linux-workstation-security.md

saluti,
Michele

Ciao,

2016-01-17 12:10 GMT+01:00 Davide <d(a)vide.bz>:

Ciao,

per una prossima versione di linux sul mio portatile pensavo, invece di
usare un immagine *ubuntu prefatta,
di partire da qualcosa di più ridotto tipo debootstrap. Da quella versione
poi fare le configurazioni e l'installazione
dei pacchetti necessari.
Oltre per la "didattica" ho visto che questo approccio porterebbe ad un
sistema decisamente più snello e performante

Mi viene in mente almeno un altro approccio: linux from scratch [1],
mai provato, ma credo sia l'approccio più didattico in assoluto, ma
richiede molto tempo.

* firewall con iptables
* apparmor
* disable root login
* utilizzare normalmente un utente non privilegiato

Come ti hanno detto, tutte queste cose sono già fatte
"automaticamente" da tutte le distro, con l'eccezione di apparmor vs
selinux e, anzi, generalmente sono _caldamente_ consigliate.

Secondo voi ci può essere altro? Avete fatto già esperienze con sistemi
fabbricati con debootstrap?

No, se escludiamo aver usato per anni gentoo, che permette(va) un
approccio simile. Da affiancare a iptables potrebbe essere ndpi
(ovvero quello che passa sotto il nome di "application firewall") [2]
per definire regole basate sulle applicazioni che generano il traffico
piuttosto che su porte/protocolli (stateful firewall).

Di sicuro poi l'uso di openvpn come client è sempre caldamente
consigliato, però occorre avere un punto di accesso "fidato", può
bastare un serverino fatto in casa. La configurazione di base non è
difficile, la documentazione di openvpn è abbastanza buona.
Aggiungerei poi alla lista almeno altri due tool:

* snort o un altro tool di IDS/IPS (intrusion detectipon/protection system)
* sshguard/fail2ban (creazione di regole di firewall contro IP che
attaccano ripetutamente il pc/server/portatile)
* dnsmasq/bind (magari con qualche blacklist) per evitare problemi di
risoluzione "maligna" di DNS

Poi beh, se vuoi proprio essere sicuro al 100%, usa TOR :smiley:

@Stefano:

quando sei diventato un iptables-evangelist ecco che arrivano le nftables :smiley:

...e le ebtables dove le hai dimenticate? :smiley:

my 2 cents

Ciao,
Stefano
PS: poi se vuoi approfondire il discorso sicurezza, esistono millemila
distro pronte da provare/studiare

[1] http://www.linuxfromscratch.org/
[2] http://www.ntop.org/products/deep-packet-inspection/ndpi/

Premetto che non ho mai usato Linux From Scratch e non ho ben capito
come funzionerebbe l'approccio con debootstrap. Ma ho il dubbio che
entrambi sistemi non ti forniscano un modo facile di tenere il sistema
aggiornato.
Quindi penso che sono utili dal punto di vista didattico, ma
problematici dal punto di vista della sicurezza, se non c'è un modo
facile per ottenere e installare security updates.

Proposta alternativa:
Perché non installare un sistema minimale Debian (non selezionare Web
Server/Desktop/ nella finestra di tasksel -- e poi ci sono ancora
parechhi pacchetti da rimuovere...), e poi aggiungere solo quei
pacchetti che ti servono.
Se vuoi imparare, fai un upgrade a Debian testing; ogni tanto
(sopratutto nei mesi dopo una nuova release) qualcosa si rompe e va
sistemato... :slight_smile:

Thomas

Ciao,

2016-01-18 13:31 GMT+01:00 Thomas Pircher <tehpeh-lugbz(a)tty1.net>:

Mi viene in mente almeno un altro approccio: linux from scratch [1],
mai provato, ma credo sia l'approccio più didattico in assoluto, ma
richiede molto tempo.

Premetto che non ho mai usato Linux From Scratch e non ho ben capito come
funzionerebbe l'approccio con debootstrap. Ma ho il dubbio che entrambi
sistemi non ti forniscano un modo facile di tenere il sistema aggiornato.
Quindi penso che sono utili dal punto di vista didattico, ma problematici
dal punto di vista della sicurezza, se non c'è un modo facile per ottenere e
installare security updates.

Infatti, forse dovevo precisare che secondo me questi approcci sono
interessanti soprattutto (solo?) dal punto di vista didattico.

Proposta alternativa:
Perché non installare un sistema minimale Debian (non selezionare Web
Server/Desktop/ nella finestra di tasksel -- e poi ci sono ancora parechhi
pacchetti da rimuovere...), e poi aggiungere solo quei pacchetti che ti
servono.

Anche altre distro offrono la possibilità di una installazione minima,
a questo punto allora forse meglio partire da gentoo, forse ostica
all'inizio, ma sei forzato a capire cosa stai facendo/configurando.

Ciao,
Stefano

Infatti, forse dovevo precisare che secondo me questi approcci sono
interessanti soprattutto (solo?) dal punto di vista didattico.

Ack.

Anche altre distro offrono la possibilità di una installazione minima,
a questo punto allora forse meglio partire da gentoo, forse ostica
all'inizio, ma sei forzato a capire cosa stai facendo/configurando.

Ok, Debian è la distribuzione che conosco meglio, e se l'unico attrezzo
che uno conosce è un martello... :slight_smile:
Immagino che Gentoo vada altrettanto bene se non meglio.

Thomas

Oltre per la "didattica" ho visto che questo approccio porterebbe ad
un sistema decisamente più snello e performante

Ciao Davide,

io non credo che questo sia vero per quanto riguarda le performance. Da
quello che capisco tu vorresti comunque installare i pacchetti
"prefatti" della distro, quindi non avresti vantaggi a livello di
compilazione nè a livello di dipendenze. Posso darti ragione per quello
che riguarda il sistema "snello" (= con meno files sul file system) ma
credo che l'impatto reale di avere questo sistema "snello" sia nullo.

Non so se
nell'iso "prefabbircata" ci siano accorgimenti di sicurezza
che magari ignoro.

^Questo, e questo sempre, e fortissimamente questo. Ricorda poi che lo
stesso discorso che fai qui sulla sicurezza vale anche sulle performance
:slight_smile:

In pratica la sicurezza che volevo configurare era:

* firewall con iptables
* apparmor
* disable root login
* utilizzare normalmente un utente non privilegiato

Secondo voi ci può essere altro? Avete fatto già esperienze con
sistemi fabbricati con debootstrap?

A livello di sicurezza secondo me è molto più efficace considerare
*ogni* applicazione una potenziale minaccia, facendola girare in un
ambiente virtuale ad hoc (o anche più di uno: esempio il browser per
fare home banking e quello per il casual browsing? due VM separate). La
mia preoccupazione principale sul mio laptop non è che la app X possa
diventare superutente, mi preoccupa di più che abbia accesso non
protetto a tutte le informazioni del *mio* utente stesso, facendo girare
ogni app in una sua VM limito i dati visibili a quella app a quelli che
sono gestiti direttamente da lei (motivo per cui il browser per l'home
banking è diverso da quello per il casual browsing).

Esistono delle distribuzioni che fanno questa seprazione out of the box,
una su tutte: qubes os[0] (non l'ho ancora provata, era il mio buon
proposito per le ferie di Natale ma non ho avuto tempo :frowning: )

È però abbastanza semplice farlo su qualsiasi sistema, usando un sistema
di virtualizzazione (virtualbox) o i container (docker, lxc, ...). Io lo
faccio sul mio laptop, e non posso che consigliarlo.

Se vuoi provare ad avere in una VM o in un container una distro
"snella", puoi provare alpinelinux[1] che in versione "container-izzata"
pesa meno di 10 MB. Ovviamente hanno operato delle scelte riduttive (es:
è basata sulle libc musl e busybox).

Ciao,
Daniele

P.S. Ovviamente se si usano sistemi di container e/o virtualizzazione, è
bene NON scaricare i sistemi pre-fatti disponibili online[2] ma farseli
da se, e in questo senso l'uso di debootstrap è un grande alleato su
sistemi debian-based.

Ciao,
Daniele

[0] https://www.qubes-os.org/
[1] https://www.alpinelinux.org/
[2] Purtroppo è comune vedere indicazioni come "wget $sito_a_caso | sh
"con note tipo "inserire la password per sudo quando viene richiesto".
NON fatelo, per favore!

innanzitutto grazie a tutte le risposte e gli spunti che mi avete dato

@Stefano: ecryptfs è quello usato per criptare le home in *ubuntu.
           Invece riguardo encfs:
https://en.wikipedia.org/wiki/EncFS#Disadvantages

@Michele: grazie per il link, lo leggerò!
           mi è ben chiaro che la maggior parte delle distro lo fa, ed è
proprio da li che sono partito
           per capire cosa bisognerebbe fare partendo da una versione
non già prefabbricata

@Steevie: linux from scratch: ci avevo pensato anch'io ma questo è
troppo in "basso" e fuori dalla mia portata

@Thomas: usare debootstrap è facilissimo: debootstrap --arch=amd64 wily
root-folder
          viene creato un sistema debian/ubuntu minimale dentro la
cartella specificata come ultimo parametro.
          Ha anche un minimale /etc/apt/sources.list
          ma se ci copi sopra quello di una distribuzione regolare
allora hai esattamente i pacchetti e security updates
          della distro prefabbricata. Credo quindi possa essere qualcosa
di più che didattico.
          Si la proposta alternativa potrebbe anche essere quella che
dici tu. Non so esattamente in cosa differisca
          debootstrap da un sistema minimale con tutto de-selezionato.
Magari ci guardo un po'.

@Daniele: si penso anche io che non è sul singolo pacchetto che ci
guadagno ma sul fatto che non tutti mi servono.
           si potrei fare anche dei purge ma non mi convince del tutto.
Più snello non è poco secondo me (siamo tra in 30%-50% in meno).
           intanto meno tempo/costo di backup, update/upgrade, e meno
software meno problemi di sicurezza.
           Concordo con te che per la sicurezza bisognerebbe conoscere
ogni applicazione, per questo da questo punto
           di vista mi piace aggiungere io man mano quello che mi serve
piuttosto che avere già un insieme di
           programmi e servizi da disintallare.
           Concordo con te che su una macchina client importante è che
non tutte le app possano vedere tutto.
           Molto interessanti i tuoi spunti riguardo alle vm.
           In parte questo argomento lo risolvo con encfs come dicevo.
Il materiale dei clienti e criptato e viene reso
           in chiaro solo quando ci lavoro. Quindi non sempre tutti i
file sono leggibili. Anche nel caso di perdita del portatile
           Oltre alle vm hai mai pensato per esempio a dei chroot? Non
basterebbe?

Grazie per la risposta. Se ho capito bene, l'approccio sarebbe:
- Ridurre la partizione attuale di Ubuntu, diciamo /dev/sda1.
- Creare una nuova partizione, diciamo /dev/sda2 per il deboostrap.
   Formattare, montare e popolare /dev/sda2 con debootstrap.
- Configurare Grub su /dev/sda1 per aggiungere il sistema su /dev/sda2.
   Rebootare il sistema con /dev/sda2 come root.
- Riconfigurare Grub sull'installazione su /dev/sda2.
- Testare il setup, riformattare /dev/sda1 per reclamare lo spazio,
   magari per usarla come partizione per le homes criptate(?)

Ho fatto dei giochi simili parecchio tempo fa, con LILO e due hard disks
al posto di due partizioni. Non mi sono divertito affatto e l'unica cosa
che ho imparato era di odiare LILO con una passione... :slight_smile:

Thomas

Ciao Thomas,

si esatto! per l'esattezza c'e' anche la necessità di un chroot + apt
per installare un kernel-image-linux
per renderlo avviable. update-grub dovrebbe fare tutto il necessario e
dovrebbe riconoscere entrambi

Io nel frattempo ho provato

https://help.ubuntu.com/community/Installation/MinimalCD

Interessante. Potrebbe essere proprio il giusto compromesso. E' già una
"distrubuzione" in quanto
mette già le funzioni di cui abbiamo parlato (apparmor, utente root
disabilitato, ecc...) ed un installer,
ma parte da un numero di pacchetti veramente minimo.

Ciao Davide,

c'e' anche la necessità di un chroot + apt per installare un
kernel-image-linux per renderlo avviable.

upps, mi ero dimenticato di questo dettaglio! :slight_smile:

https://help.ubuntu.com/community/Installation/MinimalCD
Potrebbe essere proprio il giusto compromesso.

Penso sia l'equivalente delle ISO netboot/hd-media di Debian. Se
quest'ISO riesce a connettersi ad un mirror di Ubuntu, allora
l'installazione non è diversa da un'installazione da un ISO completo.
L'unica differenza è che i pacchetti vengono installati scaricandoli dal
mirror anziché usando quelli nell'ISO.
Con entrambi metodi (MinimalCD e l'ISO normale) puoi installare sia un
sistema minimale sia uno che ha installato tutti i pacchetti possibili.

Comunque se ti interessa capire cosa serve per far funzionare una
distribuzione Linux, allora togliendo da un sistema appena installato
tutti i pacchetti non-essenziali non è la cosa peggiore che puoi fare, a
mio vaviso.

Thomas

Ciao Davide,

mi attacco alla vostra discussione con un'altra proposta: Slackware.

Visto che anch'io anni fa mi sono trovato a questo punto che volevo
partire da un sistema ridotto al minimo e Debian mi installava troppi
pacchetti, sono rimasto con Slackware. Una delle prime distro in giro e
segue ancora la filosofia KISS (Keep It Stupid Simple). Sicuramente un
pò più "hardcore" in rispetto a un Debian nel senso che non ci sono
belle interfacce per la configurazione, non funziona niente in
automatico e ti tocca a configurare le cose a mano - ma alla fine una
volta configurato tutto sei esperto sul tuo sistema customizzato. Io
l'ho usato infatti per router e server (iptables, samba, mailserver,
etc...), per un sistema desktop forse non è la cosa ideale perchè non
offre sempre dei pacchetti attuali. Comunque ci sono dei packet manager
per tenere aggiornato facilmente il sistema.

Hannes

Non è così banale. I pacchetti installati possono dipendere da un azione
esplicita o per dipendenza. dpkl -l, a quanto ne so io non riesce a
darti questa differenza.
per cui mi pare di andare a tentativi ... o c'e' un modo migliore?

Ciao Hannes,

per un periodo ho usato

https://www.slax.org/it/

basato su slackware. la sua modularità l'ho trovata spettacolare. Il
meccanismo delle dipendenze e molto più banale:
se vuoi installare un programma/servzio metti uno zip con tutto il
necessario (bin/lib/conf). Se non lo vuoi più togli lo zip.
uno se li può anche fare da se. pensa che figo avere per esempio lo zip
sviluppo, zip navigazione web, ecc che metti e togli a piacere.

Meccanismo semplice che funziona probabilmente fino ad un certo livello
di complessità perché alla fine viene fatto un merge virtuale su un linux
classico che ragiona in maniera meno "modulare".

Sistemi più recenti come android anche fanno così con gli apk.

Putroppo la mia occupazione principale è più la programmazione software
per cui "purtroppo" il tempo per "giocare" con linux
arriva fino ad un certo punto.

Sì esatto. Per "navigare" i pacchetti deb uso aptitude. Inizialmente il
programma è un pò difficile ad usarlo, ma una volta capito come
funziona, è molto utile. Non so se esistono programmi con interfaccia
grafica che ti danno un simile accesso ai pacchetti.

Si naviga con i tasti "su" e "giù". Per aprire una lista prmi "Enter".
Per aprire una lista e tutte le sotto-liste premi "[". Per chhiudere le
liste premi "Enter" oppure "]".

Un pacchetto installato normalmente ha il flag "i" settato, un pacchetto
installato per dipendenza ha i flags "i A" settato.
Per installare un pacchetto o per togliere il flag "A", usi il comando
"+".
Per aggiungere il flag "A" premi "M". Se il pacchetto poi ha i flags
"idA" settato, allora nessun altro pacchetto dipende da esso e verrà
rimosso quando dai l'avvio (premendo "g").
Per rimuovere un pacchetto premi "-". Per rimuovere un pacchetto e file
di configurazione (purge) premi "_".

Niente paura di fare dei danni: il comando "CTRL-u" è undo, puoi
premerlo più volte.

Una volta che sei contento delle selezioni fatte, permi "g" per
installare/rimuovere i pacchetti. aptitude ti fa vedere una pagina con
tutte le modifiche che verranno fatte. Premi un'altra volta "g" per
confirmare oppure CTRL-u per tornare indietro.

Altri comandi: per svuotare la lista dei pacchetti nuovi, premi "f".
Per uscire da aptitude premi "q".
Puoi anche navigare un pacchetto premendo "Enter" sul nome. Per uscire
da questa view: "q".

HTH
Thomas

Ciao,

2016-01-19 23:05 GMT+01:00 Thomas Pircher <tehpeh-lugbz(a)tty1.net>:

Sì esatto. Per "navigare" i pacchetti deb uso aptitude. Inizialmente il
programma è un pò difficile ad usarlo, ma una volta capito come funziona, è
molto utile. Non so se esistono programmi con interfaccia grafica che ti
danno un simile accesso ai pacchetti.

aptitude show synaptic (mai usato, come non uso quasi mai aptitude
come browser :))

Altri comandi: per svuotare la lista dei pacchetti nuovi, premi "f".
Per uscire da aptitude premi "q".
Puoi anche navigare un pacchetto premendo "Enter" sul nome. Per uscire da
questa view: "q".

Occhio però che se hai fatto delle selezioni di pacchetti da
installare/rimuovere ed esci da aptitude senza confermare con g + g,
al prossimo riavvio queste restano selezionate.

Aggiungo anche il tasto "i", molto utile proprio per il motivo
richiesto da Davide: puoi ciclare tra la vista delle info di un
pacchetto, le sue dipendenze / conflitti / recommends / suggest, ed il
suo status (installato o meno).

hth,
Stefano

aptitude show synaptic (mai usato, come non uso quasi mai aptitude
come browser :))

Ok. Una nota di cautela: se per una qualsiasi motivo (togliendo qualche
pacchetto di troppo, upgrade di sistema, etc) l'interfaccia grafica non
parte più allora è meglio saper usare i tool a riga di comando.

Occhio però che se hai fatto delle selezioni di pacchetti da
installare/rimuovere ed esci da aptitude senza confermare con g + g,
al prossimo riavvio queste restano selezionate.

Sì, questo è importante.
Ho sentito di una persona che si è trovata in una situazione del genere
e ha risolto il problema cancellando /var/lib/aptitude/pkgstates. Non
suggirerei mai una cosa del genere in questa mailing list! :wink:

Aggiungo anche il tasto "i", molto utile

Utile, grazie.

Thomas