domenica 12 ottobre 2014

Ripristinare i permessi e l'owner in var su Debian

Vi potrebbe capitare di eseguire un comando errato via console e cambiare i permessi a un gruppo di directory o di file. 
L'errore classico  è trovarsi dentro /var/www e lanciare:  
chown -R www-data:www-data .*
L'intento iniziale probabilmente era quello di cambiare l'owner dei file nascosti. Tuttavia questo comando oltre a modificare l'owner dei file contenuti nella directory corrente modifica anche l'owner della directory padre (/var in questo caso). Il comando corretto era:
chown -R /var/www/.[^.]*
La prima soluzione che vi verrà in mente è reinstallare il sistema. Tuttavia esistono alcune soluzioni.

Soluzione 1: Da una copia pulita

Installate Debian dentro una macchina virtuale. Salvate i permessi corretti dentro un file:
find /var -printf "%m:%u:%g:%p\n" > /tmp/var.permissions.txt

Li ripristinate facilmente sul vostro sistema di partenza con:
#!/bin.bash
while IFS=":" read perms user group file; do 
chmod -R $perms $file > /dev/null 2>&1
chown -R $user:$group $file > /dev/null 2>&1
done < /tmp/var.permissions.txt
 

Soluzione 2: Reinstallare i pacchetti

È possibile reinstallare tutti i pacchetti con aptitude:
dpkg --get-selections \* | awk '{print $1}' | xargs -l1 aptitude reinstall

La prima soluzione la consiglio se avete combinato dei danni "limitati" ad una zona del vostro sistema (esempio /var), se il danno è più grosso usate la seconda.