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?
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:
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/shm
e 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/shm
non ti aiuterà.
Il parallelo di Solaris /dev/shm
è la /tmp
partizione di tipo "swap" e anche basata sulla memoria. Come nel caso di /dev/shm
utenti arbitrari, è possibile creare file /tmp
su 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.
/dev/tmpfs
nel sistema (né il mio sistema ha un kernel 3.0.0). Sei sicuro che non sia qualcosa creato dalla tua distribuzione?
/run
e possibilmente /run/shm
bisogno di indagare ulteriormente prima di aggiornare la mia risposta.
... 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 ramfs
se 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 tmpfs
alla sicurezza, poiché i ramfs
dati 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 .
È possibile preparare il ramfs
montaggio 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.size
imposta questa dimensione di "ramdisk" (puoi usare M
e G
qui).mode
è molto importante , con il codice ottale 0770
solo 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, ramfs
viene 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 rsync
file 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 rsync
in essa.
PPS testato su Debian 9. Abbastanza sicuro che funzionerà anche su Ubuntu.
Il tuo sistema potrebbe averne già uno disponibile; i recenti sistemi Linux basati su Glibc hanno/dev/shm
sempre un tmpfs montato .
Se il tuo sistema non ne ha uno o è troppo piccolo, un file system non montato da root significa praticamente FUSE . Su Ubuntu, devi essere nel fuse
gruppo per usare FUSE. Osservando i filesystem FUSE disponibili , vedo solo Ramfuse , che purtroppo viene abbandonato a monte.
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,user
e 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:
sudo
per consentire agli utenti di eseguirlo. Assicurati di non consentire all'utente di scegliere percorsi arbitrari.