(¿Cómo) puedo crear un tmpfs como usuario normal (no root)?

39

La distribución es un servidor Ubuntu que ejecuta el núcleo Linux 2.6.35-30.

Me gustaría tener un directorio que se encuentre completamente en la memoria. ¿Es esto posible sin privilegios de root?

máscara de bits
fuente

Respuestas:

49

Linux proporciona un dispositivo tmpfs que cualquier usuario puede utilizar, /dev/shm. No está montado en un directorio específico de forma predeterminada, pero aún puede usarlo como uno.

Simplemente cree un directorio /dev/shmy luego haga un enlace simbólico a donde desee. Puede otorgar al directorio creado los permisos que elija, para que otros usuarios no puedan acceder a él.

Este es un dispositivo respaldado por RAM, por lo que hay en la memoria de forma predeterminada. Puedes crear cualquier directorio que necesites dentro/dev/shm

Naturalmente, los archivos colocados aquí no sobrevivirán a un reinicio, y si su máquina comienza a intercambiarse, /dev/shmno lo ayudará.

El paralelo de Solaris /dev/shmes is, /tmpque es una partición de tipo "swap", y también basada en memoria. Al igual que con /dev/shmlos usuarios arbitrarios, pueden crear archivos en /tmpSolaris.

OpenBSD también tiene la capacidad de usar un montaje basado en memoria, pero no tiene uno disponible por defecto. El comando mount_mfs está disponible para el superusuario.

No estoy seguro acerca de otros * BSD.

gabe
fuente
1
Un enlace simbólico podría resolver el problema where .
enzotib
D'oh ... se olvidó de esos pequeños enlaces simbólicos molestos.
Gabe.
@enzotib lo arregló!
Gabe.
No parece haber un /dev/tmpfsen el sistema (tampoco mi propio sistema que tiene un núcleo 3.0.0). ¿Estás seguro de que no es algo creado por tu distribución?
bitmask
1
No estoy seguro si esto también se aplica a otros, pero en mi versión actual de ubuntu esto parece haber cambiado /runy posiblemente /run/shmnecesite investigar más antes de actualizar mi respuesta.
Gabe.
14

/ dev / shm es inseguro

... en sistemas con intercambio activo ! Hay muchas posibilidades de que su computadora la tenga habilitada.

Hay una alternativa mejor, segura y estándar ramfs. Es posible que desee usar ramfssi planea usar espacio respaldado por RAM para almacenar temporalmente datos confidenciales, como claves privadas, billeteras Bitcoin o Ethereum, etc.

ramfses mejor que tmpfscuando se trata de seguridad, ya que los ramfsdatos nunca se intercambian (guardan en una unidad de almacenamiento físico), mientras que tmpfs pueden intercambiarse. Los terceros pueden inspeccionar el espacio de intercambio y extraer datos confidenciales .

La solución

Puede preparar el ramfsmontaje para que cualquier usuario no privilegiado pueda montarlo / desmontarlo a pedido.

Para hacer esto, necesitará el privilegio de root , una vez . Solicite al administrador de su sistema que lo configure por usted, si carece de privilegios de root.

Al principio, debe agregar una línea al /etc/fstab. La línea en fstab puede verse así:

none    /mnt/ramfs    ramfs    noauto,user,size=1024M,mode=0770    0    0
  • /mnt/ramfses un punto de montaje, donde se montará el sistema de archivos ramfs. El directorio debería existir.
  • noauto La opción evita que esto se monte automáticamente (p. ej. al arrancar el sistema).
  • user hace que los usuarios habituales puedan montarlo.
  • sizeestablece el tamaño de este "ramdisk" (puede usar My Gaquí).
  • modees muy importante , con el código octal 0770solo la raíz y el usuario, que montaron este sistema de archivos, podrán leerlo y escribirlo, no los demás (también puede usar un código diferente de su elección, ¡pero esté muy seguro! )

Cuando se hace esto, cualquier usuario podrá montar esto a pedido.

Una vez que un usuario monta esto, ramfsse crea y monta un nuevo sistema de archivos de 1024 MB /mnt/ramfs/. Que será propiedad de root:user. Una vez que él / ella lo desmonta, o el sistema se reinicia, este sistema de archivos basado en RAM desaparecerá con todos sus datos. Lo cual es genial.

Además, este sistema de archivos puede ser montado por varios usuarios de forma independiente, pero no al mismo tiempo , es decir, para que el siguiente usuario lo pueda montar, el usuario anterior debe desmontar este sistema de archivos.

a montar:

mount /mnt/ramfs/

desmontar:

umount /mnt/ramfs/

PD: si está tratando de enviar rsyncarchivos a la raíz de los ramfs recién montados / creados como usuario no root, puede encontrar un rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]error. Esto es completamente correcto y esperado, porque su usuario no posee la raíz del sistema de archivos ram. La solución es simple, solo cree un directorio allí, /mnt/ramfs/copied/por ejemplo, y rsyncen él.

PPS probado en Debian 9. Estoy bastante seguro de que también funcionará en Ubuntu.

Nube translúcida
fuente
10

Su sistema puede tener uno ya disponible; Los sistemas Linux recientes basados ​​en Glibc siempre tienen un tmpfs montado/dev/shm .

Si su sistema no tiene uno o es demasiado pequeño, un sistema de archivos no montado por root significa FUSIBLE . En Ubuntu, debe estar en el fusegrupo para usar FUSE. Mirando a través de los sistemas de archivos FUSE disponibles , solo veo Ramfuse , que desafortunadamente se abandona corriente arriba.

Gilles 'SO- deja de ser malvado'
fuente
5

En general, no, los sistemas de archivos solo se pueden montar por root. Si permites que un usuario coloque sistemas de archivos de forma arbitraria, eso esencialmente le dará raíz. (Forma fácil: monte uno sobre / etc, coloque su propio passwd y shadow allí, su con la nueva contraseña de root que acaba de crear, desmonte)

Si desea un tmpfs en una ubicación en particular, puede agregarlo /etc/fstab, con los indicadores de noauto,usery luego un usuario podrá montarlo (pero no está particularmente claro por qué no lo montaría automáticamente)

Si los usuarios necesitan tmpfs arbitrarios, entonces tiene un par de opciones:

  • use subdirectorios de un tmpfs. Probablemente el mejor enfoque. Probablemente no necesites más de un tmpfs.
  • cree un script que creará un directorio y montará un tmpfs sobre él, y luego imprima donde lo colocó. Úselo sudopara permitir que los usuarios lo ejecuten. Asegúrese de no permitir que el usuario elija rutas arbitrarias.
derobert
fuente