Perché mount richiede i privilegi di root?


54

Perché Linux richiede che un utente sia root / usi sudo / specificamente autorizzato per mount per montare qualcosa? Sembra che la decisione se consentire a un utente di montare qualcosa debba essere basata sui propri diritti di accesso al volume di origine / condivisione di rete e al punto di montaggio. Un paio di usi per il montaggio non root sono il montaggio di immagini di file system in una direzione di proprietà dell'utente e il montaggio di una condivisione di rete in una directory di proprietà dell'utente. Sembra che se l'utente ha il controllo su entrambi i lati dell'equazione di mount tutto dovrebbe essere interessante.

Chiarimento della restrizione d'accesso:

Sento che dovrei essere in grado di montare tutto ciò che l'utente avrebbe altrimenti accesso a un punto di montaggio di cui l'utente è il proprietario.

Ad esempio, sul mio computer / dev / sda1 è di proprietà dell'utente root e del disco di gruppo con autorizzazioni brw-rw----. Pertanto gli utenti non root non possono scherzare con / dev / sda1 e chiaramente mount non dovrebbe consentire loro di montarlo. Tuttavia, se l'utente possiede /home/my_user/my_imagefile.img e mount point / home / my_user / my_image / perché non dovrebbero essere in grado di montare quel file di immagine su quel mount point con:

mount /home/my_user/my_imagefile.img /home/my_user/my_image/ -o loop

Come ha sottolineato Kormac, c'è un problema di sussidio. Pertanto, è necessario aggiungere alcune restrizioni per evitare che i sussidi costituiscano un problema, nonché potenzialmente altri problemi. Forse un modo per farlo sarebbe far sì che il sistema operativo tratti tutti i file come appartenenti all'utente che ha effettuato il montaggio. Tuttavia, per leggere / scrivere / eseguire semplicemente, non vedo perché questo sarebbe un problema.

Caso d'uso:

Ho un account in un laboratorio in cui il mio spazio domestico è limitato a 8 GB. Questo è minuscolo e molto molto fastidioso. Vorrei montare un volume nfs dal mio server personale per aumentare sostanzialmente la quantità di spazio che ho. Tuttavia, poiché Linux non consente tali cose, sono bloccato con i file di scansione avanti e indietro per rimanere al di sotto del limite di 8 GB.


4
Sembra che il problema non sia tanto che "Linux non consente tali cose" in quanto non ti è permesso fare tali cose nel tuo laboratorio, poiché il sistema potrebbe essere configurato per permetterti di farlo. Potresti discutere questo problema con le persone che amministrano il sistema; se non sono amichevoli, si tratta di politica e non di computer;)
Riccioli d'oro,

È possibile montare punti di montaggio arbitrari a cui si ha accesso normale? Sembrerebbe che l'amministratore debba aggiungere una riga esplicita a fstab per il mio mount nfs per consentirlo. A sua volta, ciò costituirebbe probabilmente un precedente in cui avrebbero dovuto farlo anche per tutti gli altri che lo richiedessero, che posso capire sarebbe insostenibile. Da qui la domanda sul perché Linux non ti permetta di montare cose arbitrarie che sarebbero sicure (in qualche modo limitato).
CrazyCasta,

10
Ci hai provato sshfs? Monterà una directory remota, attraverso ssh, come te stesso, senza la necessità di accesso root. Ha solo bisogno di installare FUSE (Filesystem in UserSpacE).
Arcege,

1
Hai sentito parlare del problema del disco rigido danneggiato, ecc. Quindi, so di averlo detto un sacco di volte, ma la filosofia è che "montare cose arbitrarie" non può essere messo in sicurezza , ed è per questo che è impostato come è (eccezioni specifiche devono essere organizzate). A proposito, se non hai FUSE, sftpè un po 'più bello da usare di scp.
Riccioli d'oro,

1
Sembra che (una variante di) questo sia già stato chiesto qui prima: montare un file loop senza il permesso di root?
Daniel Pryden,

Risposte:


37

È una restrizione sia storica che di sicurezza.

Storicamente, la maggior parte delle unità non erano rimovibili. Quindi aveva senso limitare il montaggio a persone che avevano un accesso fisico legittimo e che avrebbero probabilmente accesso all'account di root. Le voci fstab consentono agli amministratori di delegare il montaggio ad altri utenti per le unità rimovibili.

Da un punto di vista della sicurezza, ci sono tre problemi principali nel consentire agli utenti arbitrari di montare dispositivi a blocchi arbitrari o immagini di filesystem in posizioni arbitrarie.

  • Il montaggio in una posizione non di proprietà ombreggia i file in quella posizione. Ad esempio: monta un filesystem di tua scelta su /etc, con un /etc/shadowcontenente una password di root che conosci. Questo problema viene risolto consentendo a un utente di montare un filesystem solo su una directory di sua proprietà.
  • I driver del filesystem spesso non sono stati testati così accuratamente con il filesystem non valido. Un driver di file system difettoso potrebbe consentire a un utente che fornisce un file system non valido di iniettare codice nel kernel.
  • Il montaggio di un filesystem può consentire al mounter di far apparire alcuni file che altrimenti non avrebbe il permesso di creare. File eseguibili e dei dispositivi setuid sono gli esempi più evidenti, e sono fissati con le nosuide nodevopzioni che sono implicite avendo userin /etc/fstab.
    Finora far rispettare userquandomountnon è chiamato da root è abbastanza. Ma più in generale riuscire a creare un file di proprietà di un altro utente è problematico: il contenuto di quel file rischia di essere attribuito dal proprietario presunto invece che dal mounter. Una copia casuale che preserva gli attributi per root in un diverso filesystem produrrebbe un file di proprietà del proprietario dichiarato ma non coinvolto. Alcuni programmi verificano che una richiesta di utilizzo di un file sia legittima controllando che il file sia di proprietà di un determinato utente e ciò non sarebbe più sicuro (il programma deve anche verificare che le directory sul percorso di accesso siano di proprietà di quell'utente; se fosse consentito il montaggio arbitrario, dovrebbero anche verificare che nessuna di queste directory sia un punto di montaggio in cui il montaggio non è stato creato né da root né dall'utente desiderato).

Ai fini pratici, al giorno d'oggi è possibile montare un filesystem senza essere root, tramite FUSE . I driver FUSE funzionano come utente di montaggio, quindi non vi è alcun rischio di escalation di privilegi sfruttando un bug nel codice del kernel. I filesystem FUSE possono esporre solo i file che l'utente ha il permesso di creare, il che risolve l'ultimo problema sopra.


24

Se un utente ha accesso diretto in scrittura a un dispositivo a blocchi e può montare quel dispositivo a blocchi, può scrivere un eseguibile suid sul dispositivo a blocchi, montarlo, eseguirlo e quindi eseguire l'accesso root al sistema. Questo è il motivo per cui il montaggio è normalmente limitato a root.

Ora root può consentire agli utenti normali di montare con restrizioni specifiche, ma deve assicurarsi che se l'utente ha accesso in scrittura al dispositivo a blocchi, il mount non consente il suid e anche i devnode, che hanno un problema simile (l'utente può creare un nodo che fornisce loro l'accesso in scrittura a un dispositivo importante a cui non dovrebbero avere accesso in scrittura).


8

Non richiede sempre super-privati. A partire dalman mount

   The non-superuser mounts.
          Normally,  only  the  superuser can mount filesystems.  However,
          when fstab contains the user option on a line, anybody can mount
          the corresponding system.

          Thus, given a line

                 /dev/cdrom  /cd  iso9660  ro,user,noauto,unhide

          any  user  can  mount  the iso9660 filesystem found on his CDROM
          using the command

                 mount /dev/cdrom

          or

                 mount /cd

          For more details, see fstab(5).  Only the user  that  mounted  a
          filesystem  can unmount it again.  If any user should be able to
          unmount, then use users instead of user in the fstab line.   The
          owner option is similar to the user option, with the restriction
          that the user must be the owner of the special file. This may be
          useful e.g. for /dev/fd if a login script makes the console user
          owner of this device.  The group option  is  similar,  with  the
          restriction  that  the  user  must be member of the group of the
          special file.

Sì, hai ragione, ero un po 'impreciso nella mia domanda. Sono consapevole che si può essere specificamente autorizzati in base al montaggio. Ma sembra che il punto di montaggio e il volume siano entrambi di proprietà dell'utente che l'utente dovrebbe essere in grado di montare senza alcuna autorizzazione specifica.

3
@CrazyCasta: il punto di montaggio può essere di proprietà dell'utente, ma il nodo del dispositivo non lo è. Ciò che le proprietà, ecc., Sono sui dati nella partizione è a) inconoscibile, b) irrilevante.
Riccioli d'oro,

Ma cosa succede se il nodo del dispositivo è di proprietà dell'utente.
CrazyCasta,

Quindi dovrebbe esserci un'eccezione parallela fatta in fstab, dal momento che un nodo dispositivo di proprietà dell'utente sarebbe eccezionale per iniziare (provare a crearne uno). Ancora una volta, il principio è che un sistema sicuro è limitato e alle persone vengono concessi privilegi ... se non ti sono stati concessi privilegi, sfortunatamente sei sfortunato. Vedi, * nix non vende riviste ad alta capacità da banco - hai bisogno di un permesso.
Riccioli d'oro,

Per essere chiari, la mount()chiamata di sistema richiede sempre il root. i programmi di utilità suid possono diventare root e consentire agli utenti non root di montare, e se il mountcomando è installato suid, lo farà in base al flag utente in fstab. Altri eseguibili suid sono stati scritti per consentire agli utenti di montare, ad esempio pmount, che consente agli utenti di montare supporti esterni e impone le restrizioni appropriate, come nosuid, nodev.
psusi,

5

Kormac e altri hanno indicato che questo non è il dilemma in cui lo presenti; mi sembra che ciò dipenda dalla filosofia di garantire esplicitamente i privilegi degli utenti rispetto a un sistema in base al quale tutti gli utenti avrebbero il diritto immutabile di montare un filesystem.

Gilles risolve alcuni dei problemi di sicurezza associati al montaggio di filesystem. Eviterò retroattivamente una discussione prologata e tangenziale su potenziali problemi tecnici correlati a questo (vedi commenti) ma penso sia giusto che gli utenti non attendibili non abbiano un diritto immutabile al montaggio di dischi rigidi.

Il problema relativo ai filesystem virtuali e remoti (o filesystem remoti tramite filesystem virtuali, come la FUSE) è meno significativo, ma questo non risolve la domanda di sicurezza (sebbene FUSE potrebbe, e certamente risolverebbe il tuo problema). È anche importante considerare che i dati in tali filesystem sono quasi sempre accessibili senza la necessità di montare un dispositivo, attraverso il trasferimento di file o strumenti che estraggono da immagini senza montaggio, quindi un sistema che non ti consente di montare qualcosa lo fa non rappresentano un problema insormontabile per quanto riguarda l'accesso ai dati che hai inserito in modo bizzarro in un file di immagine o (più comprensibilmente) desideri ottenere da un sistema remoto. Se hai una situazione in cui non è così, potrebbe valere la pena chiedere:

  1. Cosa sto esattamente cercando di fare?

  2. Dove sto cercando di farlo?

Se l'amministrazione del sistema è corretta, il numero 2 spiega perché il numero 1 sia impossibile per te. Se l'amministrazione del sistema non è giusta, questa è politica . La soluzione al problema "Il mio amministratore di sistema non è corretto" non è quella di riprogettare il sistema operativo in modo che gli amministratori di sistema ovunque non possano limitare gli utenti.

Il sistema consente al superutente di limitare le tue attività, esplicitamente o per omissione ("Non forniamo FUSE", ecc.). I privilegi sono un meccanismo attraverso il quale questo viene realizzato. Potrebbe non essere bello sentirsi dire "Non è necessario farlo", ma se è vero ... que sera ... non è necessario farlo. Usa ftp, ecc. Se non è vero, dovresti assillare i responsabili.


La tua risposta è confusa, i volumi stessi (ad esempio / dev / sda1, / dev / sda2, ecc.) Sono protetti dagli utenti che li leggono / scrivono? Mi chiedo perché un utente non possa montare qualcosa a cui altrimenti avrebbe accesso. Per chiarire, se ho un file di immagine che dice ext2 potrei scrivere un'applicazione che mi permette di leggere / scrivere da / a detta immagine (non come parte del filesystem del sistema operativo ovviamente). Tale applicazione non sarebbe in grado di leggere / scrivere dalle partizioni in / dev (a meno che tali partizioni non siano state modificate per consentire all'utente di accedervi, il che di solito non ha senso).
CrazyCasta,

PS Non sono d'accordo sul fatto che gli utenti dovrebbero essere in grado di montare un filesystem a cui altrimenti non avrebbero accesso senza un'autorizzazione specifica poiché solo l'atto del montaggio potrebbe potenzialmente causare una sorta di azione (come il controllo del filesystem) che root non voleva.
CrazyCasta,

Il montaggio di un'immagine comporta comunque nodi di dispositivo (ad esempio, / dev / loop). Hai ragione che questo crea una seccatura, ma "fare accordi" per che sta andando a variare da sistema a sistema (non v'è fornitura limitata di dispositivi di loop, per dirne una), in modo ancora una volta, è per questo che per default è tutto limitato. Ma quel default può ancora essere ignorato, dal superutente, per conto di chiunque altro.
Riccioli d'oro,

Questo è un buon punto sul limite dei nodi di dispositivo loop-back. Non sono davvero chiaro perché ci debba essere un dispositivo di loop-back, tuttavia, sembra un po 'ridondante. So che è perché il montaggio richiede un file a blocchi piuttosto che un file normale. Non capisco perché questo sia però. Puoi offrire qualche idea, come il kernel tratta i dispositivi a blocchi e i file regolari in modo significativamente diverso?
CrazyCasta

1
@goldilocks: Il motivo per cui questa risposta è una mania è perché la tua teoria dietro la restrizione è molto convincente, ma è totalmente sbagliata, il problema a cui ti riferivi non esiste. Consentire la creazione di un filesystem virtuale (come FUSE) non consente di fare tutto ciò che non è già possibile in modo più circolare usando IPC. La nota relativa agli interrupt sui dispositivi è totalmente irrilevante; l'unico interrupt significativo che sta accadendo per il filesystem remoto proviene dalla scheda di rete, che è gestita interamente dal kernel.
Sdraiati Ryan il

5

FYI: I kernel più recenti hanno il supporto "namespace". Gli utenti ordinari possono creare uno spazio dei nomi, e all'interno di quello spazio dei nomi, diventare root e fare cose divertenti come montare i filesystem.

Non ti dà permessi "reali" da superutente - puoi solo fare ciò che ti è già stato permesso di fare (cioè puoi montare solo dispositivi che puoi già leggere).

http://lwn.net/Articles/531114/ Vedi sezione 4.


Gli spazi dei nomi sono più limitati di così. Puoi apparire rootall'interno di uno spazio dei nomi utente, ma non ti consente di montare normali tipi di filesystem anche se puoi leggere e scrivere il dispositivo a blocchi. Vedi l'esperimento 2 qui: unix.stackexchange.com/questions/517317/…
sourcejedi

0

Perché i dati sul filesystem che intendono montare potrebbero compromettere la sicurezza del server, o addirittura bloccarlo (se è stato costruito intenzionalmente in quel modo).


Potresti elaborare? Non sono sicuro di come "i dati sul filesystem che intendono montare" comprometterebbero la sicurezza. Se riesci a leggere / scrivere normalmente il file, dovresti essere in grado di montarlo (è il mio argomento). Se riesco a leggere / scrivere un mount point, allora dovrei essere in grado di montare tutto tranne il montaggio effettivo in una directory. Se non riesci a leggerlo / scriverlo o non riesci a visualizzare la directory in cui si trova per vedere se esiste, allora mount fallirebbe esattamente come farebbe un comando ls o cat type.

Il tuo argomento è valido se "tu" sei il singolo utente; ricorda che Linux (e Unix) sono sistemi multiutente, in cui gli utenti non sono necessariamente fidati.
sendmoreinfo,

i binari suid potrebbero essere aggiunti a un dispositivo, montati sulla tua scatola e usati per sradicare una scatola, motivo per cui di default ownere user(s)impostato nosuid. Non vorresti che qualcuno fosse in grado di aggirare facilmente ciò consentendo loro di rimuovere manualmente ilnosuid
RS

@sendmoreinfo Sono ben consapevole che Linux è un sistema multiutente, non c'è bisogno di patrocinare. Mi chiedo perché non sia possibile montare condivisioni di rete e file di immagine a cui altrimenti avrei molto accesso. La risposta di Kormoc è illuminante, anche se sono curioso di sapere perché determinate bandiere non potrebbero essere costrette su utenti non root (come nosuid) a risolvere questo problema. Sembra che dovrei essere in grado di montare ai fini della semplice lettura / scrittura di un file immagine / condivisione di rete a cui altrimenti avrei accesso su un punto di montaggio che possiedo.
CrazyCasta,

1
@CrazyCasta WRT "facendo crashare il sistema", è certamente possibile montare hardware difettoso che sfrutta le vulnerabilità nell'interfaccia hardware. Chiunque abbia avuto un disco rigido con abbastanza blocchi danneggiati può dirti come può influenzare il kernel (e quindi l'intero sistema) - entra in un circuito occupato e paralizza efficacemente l'intero kit e kaboodle. Presumibilmente c'è una logica alla radice di ciò che rende impossibile risolverlo, poiché si tratta di un problema ben noto che esiste da molto tempo senza soluzione.
Riccioli d'oro,

0

In GNOME, gvfs non richiede root per montare il filesystem remoto (ftp o ssh) e gnome-mount non ha bisogno di root per montare l'archiviazione esterna (unità USB, CD / DVD, ecc.).

La maggior parte dei sistemi probabilmente non vorrebbe avere l'intero GNOME solo per un montaggio remoto, quindi puoi usare lufs , sshfs o ftpfs .

gvfs, lufs, sshfs e ftpfs utilizza FUSE per consentire agli utenti non root di montare il filesystem virtuale; e diversamente dai mount -o user, FUSE non richiede al sysadmin di organizzare specifici mount. Finché si dispone del privilegio per la directory di mount e per qualsiasi risorsa sia necessaria per costruire il filesystem, è possibile creare mount di FUSE.

Perché mount richiede i privilegi di root?

Perché mountè principalmente / originariamente destinato al filesystem locale, che coinvolge quasi sempre un hardware.

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.