Quali sono le directory scrivibili del mondo per impostazione predefinita?


14

In un filesystem standard di Linux, quali di queste directory comuni sono scrivibili dal mondo per impostazione predefinita ?

 /tmp 
 /etc
 /var 
 /proc 
 /bin 
 /boot
 /....
 ....

Perché sono scrivibili dal mondo? Ciò rappresenta un rischio per la sicurezza?

Risposte:


16

Le uniche directory obbligatorie per FHS che sono comunemente scrivibili in tutto il mondo sono /tmpe /var/tmp. In entrambi i casi, è perché sono destinati alla memorizzazione di file temporanei che possono essere creati da chiunque.

Inoltre è comune /dev/shm, come tmpfs (filesystem supportato da RAM), per un rapido accesso ai dati di medie dimensioni condivisi tra i processi, o semplicemente la creazione di file che sono garantiti per essere distrutti al riavvio.

Potrebbero esserci anche una /var/mailo /var/spool/mail, e talvolta altre directory di spooler. Vengono utilizzati per trattenere temporaneamente la posta prima che venga elaborata. Non sono sempre scrivibili dal mondo, a seconda degli strumenti in uso. Quando lo sono, è perché i file possono essere creati lì da strumenti utente per l'elaborazione da demoni.

Tutte queste directory di solito hanno il bit sticky ( t) impostato, il che significa che solo il proprietario di un file o della directory può spostare o eliminare i file in esso.

Qualsiasi programma in esecuzione come qualsiasi utente può creare file in queste directory, e spetta al programma di creazione fare la cosa giusta per quanto riguarda la sicurezza per i suoi dati particolari. Non esiste alcun problema di sicurezza generale diverso da qualcuno che potrebbe riempire il filesystem, ma ha un ampio margine di errore per un programma.

Ci sono stati alcuni passi verso /tmpdirectory specifiche del servizio . Questi evitano alcuni dei potenziali bug che possono emergere, quindi non è vitale per il programma essere privo di bug nel modo in cui utilizza la directory.


Puoi trovare le directory scrivibili dal mondo sul tuo sistema con:

find / -maxdepth 3 -type d -perm -777

8

/tmp, /var/tmpe /var/locksono scrivibili dal mondo per impostazione predefinita. Potrebbero esserci collegamenti simbolici, come /usr/tmp/var/tmp, forniti per la compatibilità con applicazioni precedenti.

/tmpe /var/tmpscrivibili in tutto il mondo perché sono pensati per essere utilizzati da qualsiasi utente per qualsiasi archiviazione temporanea. /var/lockè scrivibile in tutto il mondo in modo che qualsiasi processo, in esecuzione come qualsiasi utente, possa creare file di blocco in una posizione centrale.

C'è un rischio per la sicurezza? No, ma in qualche modo sì.

I permessi per tutte quelle directory sono 1777, con il primo che 1è il bit appiccicoso . Ciò significa che mentre chiunque può creare un file in quelle directory scrivibili in tutto il mondo, solo il proprietario può eliminare i propri file (e ovviamente anche l'utente root può farlo).

Il possibile rischio per la sicurezza può derivare dalla creazione di file temporanei non sicuri. Poiché tali directory sono gratuite, gli utenti devono prendere precauzioni per assicurarsi che i file che creano siano in realtà nuovi file, piuttosto che aprire un file esistente o un collegamento simbolico che potrebbe essere stato installato lì da un utente malintenzionato. Se i file vengono creati utilizzando tecniche adeguate, come open(…, O_EXCL)o mkstemp(3), quindi tale rischio viene evitato.


1
Sui sistemi moderni, uno di questi symlink di compatibilità è /var/lock/run/lock
camh

2

/tmp

È rischioso, perché è necessario aggiungere un codice aggiuntivo per usarlo in sicurezza. Ovviamente questo viene trascurato.

Un recente esempio è dato da Steve Kemp. http://blog.steve.org.uk/sometimes_reading_code_makes_you_scream_.html

./mgmt/tools/SysAPI.cc:  tmp = fopen("/tmp/shadow", "w");
./mgmt/tools/SysAPI.cc:    system("/bin/mv -f /tmp/shadow /etc/shadow");

Se tu (l'attaccante) sostituisci / tmp / shadow prima della seconda riga, puoi sostituire la password di tutti. (Suppongo che l'attacco richieda di creare il file prima della prima riga e di renderlo scrivibile in tutto il mondo).

Systemd su Linux consente di mitigare tali vulnerabilità isolando / tmp per molti servizi di sistema. (Tranne quelli che "abusano di / tmp come posizione per socket IPC e altre primitive di comunicazione").

In Fedora Linux - http://fedoraproject.org/wiki/Features/ServicesPrivateTmp

Spiegazione di Systemd - http://0pointer.de/blog/projects/security.html


"Suppongo che l'attacco richieda la creazione del file prima della prima riga" - In effetti. Se il file non esiste già, la prima riga lo creerà come utente in esecuzione (presumibilmente root) e un altro utente malintenzionato non avrà le autorizzazioni per sostituirlo prima della seconda riga. Se il file esiste già, lo fopensovrascrive ma non reimposta le autorizzazioni, quindi l'utente malintenzionato può ancora apportare modifiche. Inoltre, un utente malintenzionato avrebbe potuto fare qualcosa come ln -s /bin/bash /tmp/shadowprima della prima riga, in modo che un binario di sistema essenziale venisse sovrascritto.
hvd,

2

Per trovare directory scrivibili dal mondo, puoi usare

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Per i file cambiare tipo in f

Per i collegamenti simbolici digitare a l

Per impostare il bit appiccicoso:

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print0| xargs -0 chmod +t
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.