NPM e il bug che crasha Linux
NPM possiede un bug da non sottovalutare. Scoperto a fine Febbraio dallo sviluppatore Jared Tiala, il problema è comparso con l’ultimo update.
La versione problematica è la 5.7.0, rilasciata il 21 del mese scorso. Il bug causa il crash di molti programmi, e a volte dell’intero sistema, in maniera irreversibile. Scopriamo di cosa si tratta e come funziona.
Cos’è NPM?
NPM è il principale package manager per JavaScript, ed è quello di default per l’environment runtime Node.js. Si compone di un client a linea di comando (chiamato appunto npm) e un database online di packages pubblici e privati, chiamato npm registry.
Esso viene utilizzato, ad esempio, per incorporare dei moduli nelle applicazioni durante lo sviluppo, oppure per scaricare dei tool standalone.
Con 3 miliardi di download a settimana e più di 600.000 package disponibili, npm viene utilizzato da migliaia di sviluppatori, sia per condividere pacchetti che per utilizzarne di già presenti.
È molto utilizzato per la parte server – side, in quanto qui si necessita di numerosi moduli per il corretto funzionamento delle applicazioni. La versione rilasciata a fine Febbraio, però, ha messo in difficoltà tantissimi sviluppatori, causando problemi a server di produzione e cancellando il contenuto piattaforme di cloud computing (come EC2 di Amazon).
Oltre a questo, anche i singoli utenti hanno riscontrato problemi nei loro sistemi, e hanno riportato crash di programmi e di sistema dopo l’esecuzione dei comandi npm.
Il bug
Il problema è stato riscontrato soltanto nei sistemi Linux. Non tutti gli utenti ne sono stati vittime, ma il bug ha comunque colpito un elevato numero di sviluppatori.
Eseguendo il comando “npm install” per installare un nuovo pacchetto, viene eseguito anche il comando “chown r”. Esso, in generale, serve modificare l’owner di una o più sottocartelle (il carattere “r” specifica la ricorsività dell’operazione). Nel caso del bug in npm, avviene la modifica non richiesta dei permessi di cartelle cruciali, quali /etc, /usr e /boot. La prima, ad esempio, possiede tutti i file di configurazione del sistema operativo; /boot contiene invece tutti i file utilizzati per il booting del SO. Andando a modificare l’owner, si possono creare grossi problemi, risolvibili solo tramite reinstallazione dell’intero sistema.
La particolarità del problema è che si presenta quando si esegue il comando sudo npm da un utente che non sia root. È solo in questo caso che i permessi del filesystem vengono pesantemente modificati, causando la modifica del proprietario da root all’utente che ha eseguito il comando. Senza il prefisso sudo, i comandi non sembrano causare alcun problema, così come se si lancia da root. Modificare l’owner di cartelle fondamentali del sistema operativo causa inconsistenze e blocchi, che impediscono al SO di funzionare correttamente, arrivando a corromperlo.
Un altro caso riscontrato è stato quello relativo alla modifica dell’owner della cartella dei binari /usr/bin. Come conseguenza, i file binari contenuti hanno smesso di funzionare in quanto il proprietario era stato modificato. La maggior parte degli utenti vittima di questo bug sono stati costretti a reinstallare completamente il sistema operativo.
La risoluzione del problema
La notifica del problema da parte degli utenti è stata immediata. Il già nominato Tiala è stato uno dei primi ad aprire un issue su Github, seguito e supportato da una vasta community.
Inizialmente, l’unico consiglio era quello di non utilizzare il prefisso sudo per il comando. Ciò non è sempre possibile, in quanto alcuni pacchetti hanno bisogno di essere installati come super user, utilizzando quindi sudo.
La risposta degli sviluppatori npm è stata però pronta, e la versione 5.7.1, priva del bug, è già disponibile.
Consigliamo quindi a tutti i Linux-user che utilizzano npm di scaricare la versione aggiornata, evitando danneggiamenti del sistema operativo.