Permettere a chiunque di montare qualsiasi file system in qualsiasi posizione aprirebbe un certo numero di falle nella sicurezza.
- Un ovvio è che il driver del filesystem accede al dispositivo sottostante. Questo potrebbe essere l'hardware che l'amministratore di sistema non vuole esporre agli utenti.
- Un altro ovvio è che potrebbero esserci file che consentono agli utenti di ottenere privilegi. Una shell radice setuid, per esempio. O un nodo di dispositivo che consente l'accesso non elaborato alla memoria o al disco o altra risorsa hardware. Consentire a un utente di montare un filesystem arbitrario gli consente di creare arbitrari setuid / setgid programmi e nodi del dispositivo .
- Un problema più sottile è che montare un filesystem potrebbe creare file in una posizione inaspettata. Alcune applicazioni leggono i file in posizioni fisse o fidano di file in cui la catena di directory dalla radice al file è interamente di proprietà di un utente. Il montaggio di un diverso filesystem lungo il percorso potrebbe consentire al mounter di sostituire file legittimi con contenuti arbitrari. Ad esempio, puoi quindi montare una copia di
/etc
con un diverso file passwd
con una password di root impostata dall'utente. Oppure puoi montare una directory diversa sulla home directory di un utente e fornire il tuo .ssh/authorized_keys
.
- Un'altra preoccupazione è che i driver del filesystem sono spesso scritti per prestazioni e affidabilità con filesystem ben formati. Se un filesystem è malformato, può attivare un bug nel driver che consente a chiunque controlli il dispositivo sottostante di eseguire codice nel contesto del driver del filesystem, che viene eseguito tradizionalmente nel kernel.
Puoi dichiarare un dispositivo, un punto di montaggio e opzioni di montaggio in /etc/fstab
per montare automaticamente un filesystem su tempo di avvio. È compito dell'amministratore di sistema non mettere nulla di "pericoloso" lì, per esempio nessun montaggio di filesystem sconosciuti nei percorsi di sistema, disabilitare setuid eccetto il filesystem di root, ecc.
Il vecchio modo di permettere agli utenti ordinari di montare filesystem transienti è di mettere l'opzione user
mount su un fstab, in genere combinato con noauto
. user
implica automaticamente altre tre opzioni: nosuid
, nodev
e noexec
. Queste opzioni disabilitano i file setuid / setgid (questi bit non hanno alcun effetto), i file del dispositivo (i nodi del dispositivo non hanno effetto) ei file eseguibili (il bit eseguibile viene ignorato tranne che nelle directory) rispettivamente. Le opzioni nosuid
e nodev
sono fondamentali; noexec
può essere disabilitato (aggiungendo exec
dopo user
) in quasi tutte le situazioni. Ecco una tipica linea fstab per un dispositivo rimovibile:
/dev/cdrom /media/cdrom iso9660 noauto,user,exec
Un metodo più moderno per consentire agli utenti di montare dispositivi rimovibili consiste nell'installare il programma pmount
. Questo programma ha politiche più flessibili di fstab, che consente solo un elenco predefinito. Pmount applica diversi vincoli, tra cui la richiesta che il dispositivo sia dichiarato rimovibile e il punto di montaggio sia una directory vuota sotto /media
.
Per le risorse di rete, l'approccio tradizionale per andare oltre un elenco predefinito è un automounter . L'automounter è in genere configurato per consentire agli utenti di montare solo filesystem di rete (NFS, Samba), solo da host controllati (o almeno solo all'interno di un dominio), con opzioni predefinite che includono nodev
e nosuid
.
Un approccio più moderno per consentire agli utenti di montare i filesystem è di spostare il driver del filesystem fuori dal kernel. FUSE è lo standard di fatto qui (su Solaris, Linux, * BSD, OSX). L'utente deve avere accesso al dispositivo sottostante (se presente) poiché tutti gli accessi al dispositivo sono eseguiti da un processo non privilegiato. Per lo stesso motivo, un bug nel driver del filesystem non comprometterà la sicurezza del sistema operativo. L'utente deve possedere il punto di mount, quindi non sarà in grado di far apparire i file dove altrimenti non potrebbe far apparire i file. I bit Setuid e Setgid vengono ignorati. Tuttavia, è possibile rendere i file di proprietà di qualsiasi utente, non solo l'utente che esegue il montaggio.