(Come) posso creare un tmpfs come utente normale (non root)?


39

La distribuzione è un server Ubuntu che esegue il kernel Linux 2.6.35-30.

Vorrei avere una directory che si trova completamente nella memoria. È possibile senza i privilegi di root?

Risposte:


49

Linux fornisce un dispositivo tmpfs cui qualsiasi utente può utilizzare, /dev/shm. Non è montato su una directory specifica per impostazione predefinita, ma è comunque possibile utilizzarlo come uno.

Basta creare una directory /dev/shme quindi collegarla simbolicamente dove vuoi. Puoi assegnare alla directory creata tutte le autorizzazioni che scegli, in modo che altri utenti non possano accedervi.

Questo è un dispositivo con backup RAM, quindi cosa c'è in memoria per impostazione predefinita. Puoi creare qualsiasi directory di cui hai bisogno all'interno/dev/shm

Naturalmente, i file inseriti qui non sopravvivranno al riavvio e se il tuo computer inizia a scambiare, /dev/shmnon ti aiuterà.

Il parallelo di Solaris /dev/shmè la /tmppartizione di tipo "swap" e anche basata sulla memoria. Come nel caso di /dev/shmutenti arbitrari, è possibile creare file /tmpsu Solaris.

OpenBSD ha anche la capacità di usare un mount basato sulla memoria, ma non ne ha uno disponibile per impostazione predefinita. Il comando mount_mfs è disponibile per il superutente.

Non sono sicuro di altri * BSD.


1
Un collegamento simbolico potrebbe risolvere il problema di dove .
enzotib,

D'oh ... ho dimenticato quei fastidiosi piccoli collegamenti simbolici.
gabe.

@enzotib l'ha risolto!
gabe.

Non sembra esserci un /dev/tmpfsnel sistema (né il mio sistema ha un kernel 3.0.0). Sei sicuro che non sia qualcosa creato dalla tua distribuzione?
Maschera di bit

1
Non sono sicuro che questo valga anche per gli altri, ma sulla mia attuale versione di Ubuntu sembra che sia cambiato /rune possibilmente /run/shmbisogno di indagare ulteriormente prima di aggiornare la mia risposta.
gabe.

14

/ dev / shm non è sicuro

... su sistemi con swap attivo ! Le probabilità che il tuo computer sia abilitato sono molto alte .

Esiste un'alternativa migliore, sicura e standard - ramfs. Potrebbe essere utile ramfsse si prevede di utilizzare lo spazio supportato dalla RAM per archiviare temporaneamente dati sensibili, come chiavi private, portafogli Bitcoin o Ethereum e simili.

ramfsè migliore rispetto tmpfsalla sicurezza, poiché i ramfsdati non vengono mai scambiati (salvati su un'unità di archiviazione fisica), mentre tmpfs potrebbero essere scambiati. Terze parti possono quindi ispezionare lo spazio di swap ed estrarre dati sensibili .

La soluzione

È possibile preparare il ramfsmontaggio in modo che qualsiasi utente non privilegiato possa montarlo / smontarlo su richiesta.

Per fare ciò, avrai bisogno del privilegio di root , una volta . Chiedi all'amministratore del tuo sistema di configurarlo per te, se non hai i privilegi di root.

All'inizio, è necessario aggiungere una riga a /etc/fstab. La linea in fstab potrebbe apparire così:

none    /mnt/ramfs    ramfs    noauto,user,size=1024M,mode=0770    0    0
  • /mnt/ramfsè un mount point, dove verrà montato il filesystem ramfs. La directory dovrebbe esistere.
  • noauto L'opzione impedisce il montaggio automatico (ad es. all'avvio del sistema).
  • user rende questo montabile da utenti regolari.
  • sizeimposta questa dimensione di "ramdisk" (puoi usare Me Gqui).
  • modeè molto importante , con il codice ottale 0770solo root e l'utente, che hanno montato questo filesystem, saranno in grado di leggere e scrivere su di esso, non sugli altri (puoi usare anche un codice diverso a tua scelta, ma devi esserne sicuro! ).

Al termine, qualsiasi utente sarà in grado di montarlo su richiesta.

Una volta che alcuni utenti lo montano, ramfsviene creato e montato il nuovo filesystem da 1024 MB /mnt/ramfs/. Sarà di proprietà di root:user. Una volta smontato o riavviato il sistema, questo filesystem basato su RAM svanirà con tutti i suoi dati. È fantastico.

Inoltre, questo filesystem può essere montato da più utenti in modo indipendente, ma non allo stesso tempo , cioè per essere pronto per essere montato da un utente successivo, l'utente precedente dovrebbe smontare questo filesystem.

montare:

mount /mnt/ramfs/

per smontare:

umount /mnt/ramfs/

PS Se stai tentando di rsyncfile nella root dei ramfs appena montati / creati come utente non root, potresti riscontrare un rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]errore. Questo è completamente corretto e previsto, poiché l'utente non possiede la radice del filesystem ram. La soluzione è semplice, basta creare una directory lì, /mnt/ramfs/copied/per esempio, e rsyncin essa.

PPS testato su Debian 9. Abbastanza sicuro che funzionerà anche su Ubuntu.



5

In generale, no, i filesystem possono essere montati solo da root. Se si consente a un utente di posizionare i filesystem in modo arbitrario, ciò sta essenzialmente dando loro il root. (Modo semplice: montane uno su / etc, inserisci lì il tuo passwd e shadow, su con la nuova password di root che hai appena creato, smonta)

Se si desidera un tmpfs in una determinata posizione, è possibile aggiungerlo a /etc/fstab, con i flag di noauto,usere quindi un utente sarebbe in grado di montarlo (ma non è particolarmente chiaro il motivo per cui non lo si dovrebbe montare automaticamente)

Se gli utenti hanno bisogno di tmpfs arbitrari, allora hai un paio di opzioni:

  • usa le sottodirectory di un tmpfs. Probabilmente l'approccio migliore. Probabilmente non hai davvero bisogno di più di un tmpfs.
  • creare uno script che creerà una directory e monterà un tmpfs su di esso, quindi stampa dove lo ha inserito. Utilizzare sudoper consentire agli utenti di eseguirlo. Assicurati di non consentire all'utente di scegliere percorsi arbitrari.
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.