sabato 30 marzo 2013

Usare lo stesso UID fra account differenti

Alcuni sistemi Unix, come ad esempio FreeBSD, forniscono effettivamente due utenti root: il classico root e il suo rovesciato toor. Per verificare la presenza di questi due utenti e' sufficiente usare il seguente comando:

% grep "^[rt]oo[rt]:" /etc/passwd
root:*:0:0:Charlie &:/root:/bin/csh
toor:*:0:0:Bourne-again Superuser:/root:

L'idea e' semplice: root e' l'utente impostato all'atto dell'installazione e non dovrebbe mai essere personalizzato (ad esempio modificandone la shell), al fine di garantire che in situazioni estreme (es. single user mode) l'account funzioni come ci si aspetta (o meglio come si aspetta il sistema). Il suo rovescio, toor, e' invece un account che puo' essere personalizzato ad esempio impostando una shell differente (presa da /usr e non disponibile in single user mode).
Si noti che i due account condividono lo stesso UID (0) e quindi sono di fatto lo stesso account, solo con entry differenti nei vari database.

Oggi giorno non esiste piu' la reale necessita' di usare una simile tecnica, grazie a strumenti come sudo che consentono una personalizzazione di account utente normali estrema. Alcune distribuzioni Linux non forniscono nemmeno un account root disponibile, forzando l'utente a configurare sudo.
Ancora oggi pero' qualcuno e' tentato da usare questa tecnica dei doppi account per separare privilegi, personalizzazioni, ecc. La mia risposta breve e': NON FATELO!
In generale potrebbero esserci applicazioni che, stupidamente, ritengono che un UID sia unico. E queste si riveleranno sicuramente come una falla di sicurezza. Dopotutto, la generazione di /etc/passwd da /etc/master.passwd non e' per via di alcune applicazioni "stupide" che richiedono accesso al database degli utenti?
In secondo luogo, il sistema potrebbe confondersi, non facendovi vedere chi ha creato quali file:

# id
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)
root@fb91:/root # touch test.txt
root@fb91:/root # ls -l test.txt
-rw-r--r-- 1 root wheel 0 test.txt

# su - toor
# touch test2.txt
# ls -l test2.txt
-rw-r--r-- 1 root wheel 0 Mar test2.txt

L'ownership dei file viene presa assumendo il primo record che si trova nel database (forse ls e' da considerarsi una applicazione stupida? In realta' non saprebbe come fare a discriminare gli utenti). Quindi condividere utenti/privilegi con questo metodo vi fa perdere, gratis e con effetto immediato, la tracciabilita' di quale utente ha toccato quali file.

La strada corretta per gestire in sicurezza i privilegi e' usare sudo.

Nessun commento: