Home > GNU/Linux, Sicurezza e GNU/Linux > Sicurezza e GNU/Linux (parte 4): Dividere i poteri di root tramite i gruppi

Sicurezza e GNU/Linux (parte 4): Dividere i poteri di root tramite i gruppi

Il problema di essere root

Forse qualcuno dei lettori ha visto il film “Essere John Malkovich”. Il protagonista del film scopre un tunnel molto particolare che gli permette di entrare nella testa dell’attore John Malkovich e prenderne il controllo, fino la punto di fondare una società che vende “l’esperienza di essere John Malkovich” per 15 minuti, al modico prezzo di 200 dollari.

Unix dà più o meno la stessa esperienza agli utenti, attraverso SUDO e SU, che permettono di diventare utente root.
L’utente root, quello cioè che possiede l’identificativo (UID) zero, ha pieno controllo sul sistema: può leggere e scrivere su tutti i file, può montare i dischi, può persino cancellare l’intero sistema.
Come nel film, questa esperienza non è solo appagante: a volte può essere pericolosa. Quando parliamo di “utente”, infatti, parliamo anche di tutti i processi che l’utente lancia, volontariamente o a sua insaputa. Essere l’utente root dà tutti i poteri, ma – tanto per citare un altro film, Spiderman – “da grandi poteri derivano grandi responsabilità”.
Sarebbe quindi desiderabile, in determinate circostanze, non diventare root, ma acquisire solo alcuni dei suoi poteri. Ove questo non sia possibile, o lo sia solo parzialmente, sarebbe necessario rendere root un po’ meno potente, almeno riguardo ad alcuni processi che egli esegue.
Vedremo in questo post e in quelli immediatamente successivi, quali strumenti mette a disposizione GNU/Linux per ottenere ciò e quali tecniche vengono usate per mettere in sicurezza i processi, affidando loro solo i minimi privilegi necessari o impedendogli di compiere azioni non previste.

Un problema di design risolto con un pregio di design

Come abbiamo detto, il fatto che tra utente “normale” e root non vi sia una via di mezzo ha sempre costituito per gli utenti Unix un problema. In questo post e nel successivo illustrerò i metodi classici per affrontarlo, mentre successivamente vedremo quelli che non attengono agli standard Unix (o almeno a quelli più classici), ma sono più potenti.
Abbiamo detto che il pregio dell’utente root è quello di avere accesso totale a tutte le risorse del sistema, senza limitazioni. In realtà pochissime limitazioni esistono, ad esempio neppure un processo dell’utente root può scrivere nella memoria riservata di un altro processo, pena essere brutalmente terminato.
Ma a parte ciò, cosa significa precisamente “risorse del sistema”? In un sistema Unix significa file. Uno dei principi cardine di Unix è proprio “tutto è un file”. Un disco attaccato al sistema è un file (ad esempio /dev/sda). Anche le partizioni in esso contenuto sono file (/dev/sda1, /dev/sda2, ecc.). La scheda audio è un file (precisamente /dev/dsp0  nel caso degli Unix classici che usano OSS, non di Linux che usa ALSA e al limite emula OSS). Anche la webcam è un file, /dev/video0 nel caso di Linux. Persino i programmi in esecuzione sono file: stanno tutti dentro /proc, ognuno è rappresentato da una directory il cui nome è il numero del processo. Per ogni processo i file rappresentano la memoria utilizzata, lo stack, i file aperti, ecc.
Esistono anche file che rappresentano i parametri di funzionamento del sistema, ad esempio il file /proc/sys/vm/swappiness contiene un numero che rappresenta la “predisposizione” del kernel ad utilizzare lo swap. Se ci scrivo 10, il kernel swappa poco, se ci scrivo 90 swappa di più.
File simili esistono per accendere o spegnere i led, per modificare la velocità di una scheda di rete ed altro ancora.

L’uso dei file per rappresentare (quasi) tutto in un sistema è molto comodo ed elegante. Significa poter usare le stesse istruzioni nei programmi (e spesso anche gli stessi programmi) sia che si voglia scrivere un “vero” file su disco, sia che si voglia invece mandare un file in stampa o sul video o addirittura se si vuole configurare al volo un driver.

Se quindi tutto è un file, posso delegare agli utenti alcuni poteri su questi file, creando quindi dei “quasi-root”. Utenti normali in tutto e per tutto, ma che hanno avuto il permesso di modificare file che in realtà rappresentano qualcosa nel sistema.
Facciamo l’esempio della webcam:

ls -l /dev/video0
crw-rw---- 1 root video 81, 0 2011-04-08 18:30 /dev/video0

Come vedete la webcam “appartiene” all’utente root e al gruppo “video”. Gli altri utenti non possono né leggere né scrivere su questo file. L’utente standard nel mio caso fa parte del gruppo video, di fatti se do il comando id ottengo:

uid=1000(guido) gid=1000(guido) ... 44(video),46(plugdev) ...

per cui ho sulla webcam gli stessi poteri dell’utente root, pur non essendo root.
Ora creiamo un utente di prova:

sudo adduser prova

chiudiamo la sessione e logghiamoci con l’utente prova. Se proviamo ad accedere alla webcam, ad esempio con gstreamer-properties, non ci riusciremo e otterremo un errore del genere:

Bene, fin qui avete letto, ma se avete Ubuntu, provate davvero a fare questa operazione. Vedrete che, al contrario, riuscirete lo stesso ad accedere alla webcam. Il motivo? Il solito: la sicurezza è nemica della facilità d’uso. Gli sviluppatori di Ubuntu hanno infatti deciso di assegnare al device /dev/video0 dei permessi non standard, chiamati ACL, che vanno a sovrapporsi ai normali permessi utente. Lo stesso hanno fatto per i CD/DVD, le fotocamere, stampanti e tutti gli altri dispositivi rimovibili. Ho già parlato delle ACL in passato ma tornerò a farlo nelle puntate successive (per cui non vi metto il link al vecchio articolo🙂 ).

Al di là del caso particolare di Ubuntu, che permette agli utenti di compiere azioni comuni anche se non fanno parte di gruppi particolari, altre distribuzioni si comportano in maniera standard, per cui è possibile con facilità impedire a certi utenti di fare qualcosa (usare webcam ma anche dispositivi esterni, l’audio, caratteristiche avanzate delle schede video come il 3D, ecc.) semplicemente aggiungendoli o togliendoli dai gruppi che possiedono i permessi su quei file coinvolti in quelle determinate azioni.

In questo modo, raffinato sempre di più nel tempo anche grazie ai demoni come hal e udev che si occupano di creare automaticamente i file virtuali necessari, sui sistemi Unix è possibile creare degli utenti che pur non essendo root ne possiedono alcuni poteri.

  1. PerryGi
    10 aprile 2011 alle 23:34

    Non ci hai fatto aspettare molto per questo capitolo, bravo Guido, ottimo come sempre.

    P.S.: È da quando conosco Ubuntu e Gnu/Linux che sento dire e lèggo che in questi tutto è un file, ma negli altri OS come funziona?

    • telperion
      11 aprile 2011 alle 10:41

      Su win c’è il policy editor
      http://support.microsoft.com/kb/307882
      E anche i permessi granulari, su cartelle e file.
      Di solito sono disabilitati nelle Home edition OEM.

    • 11 aprile 2011 alle 10:52

      come funziona cosa? per quanto riguarda la protezione degli oggetti, l’ha spiegato qui sopra Telperion.

  2. telperion
    11 aprile 2011 alle 10:37

    Chi conosce queste cose, ha ben pochi problemi di sicurezza, virus eccetera, sia che usi gnu/linux, windows, osx.
    Per gli altri, c’è …. “il formattone riparatore” (cit. Il Pastore TGM)

  3. PerryGi
    11 aprile 2011 alle 11:58

    No, intendevo come vedono gli altri OS i vari componenti HW, periferiche ecc.
    I sistemi Unix-like vedono tutto come file di testo, e gli altri sistemi?

    • Emanuele Poggi
      11 aprile 2011 alle 18:38

      Attenzione il fatto che sembrino file non implica che siano file di testo.

    • 11 aprile 2011 alle 19:08

      Vengono visti come come strutture di dati in memoria. Ma questo vale anche per i sistemi Unix, si possono usare entrambi gli approcci.

  4. 11 aprile 2011 alle 23:17

    davvero un ottima rubrica, ancora complimenti😀

  5. shouldes
    25 aprile 2011 alle 23:15

    @Telperion: non è questione di abilitati disabilitati…
    Io ho comprato un pc con W7 HP e il modulo GPE non c’è proprio.
    L’unico supporto che ho da parte di microsoft è un foglio exel con le chiavi da inserire manualmente nel registro e spiegazioni grossolane sul loro significato.
    Al momento sono costretto tramite disattivazioni/limitazioni a mantenere un po’ sicuro il sistema, pure l’antenna della scheda wifi ho staccato, così non capta più nulla da fuori e spero che non venga captata.
    Il prossimo pc lo assemblo (quindi senza os) e ci metto una versione business “gratuita”, pirla una volta…

  6. 13 maggio 2013 alle 4:24

    Hello! I simply wish to give a huge thumbs up for the good info
    you’ve got right here on this post. I will likely be coming back to
    your blog for more soon.

  1. No trackbacks yet.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: