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?
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?
Respuestas:
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/shm
y 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/shm
no lo ayudará.
El paralelo de Solaris /dev/shm
es is, /tmp
que es una partición de tipo "swap", y también basada en memoria. Al igual que con /dev/shm
los usuarios arbitrarios, pueden crear archivos en /tmp
Solaris.
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.
/dev/tmpfs
en 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?
/run
y posiblemente /run/shm
necesite investigar más antes de actualizar mi respuesta.
... 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 ramfs
si planea usar espacio respaldado por RAM para almacenar temporalmente datos confidenciales, como claves privadas, billeteras Bitcoin o Ethereum, etc.
ramfs
es mejor que tmpfs
cuando se trata de seguridad, ya que los ramfs
datos 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 .
Puede preparar el ramfs
montaje 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/ramfs
es 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.size
establece el tamaño de este "ramdisk" (puede usar M
y G
aquí).mode
es muy importante , con el código octal 0770
solo 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, ramfs
se 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 rsync
archivos 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 rsync
en él.
PPS probado en Debian 9. Estoy bastante seguro de que también funcionará en Ubuntu.
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 fuse
grupo para usar FUSE. Mirando a través de los sistemas de archivos FUSE disponibles , solo veo Ramfuse , que desafortunadamente se abandona corriente arriba.
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,user
y 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:
sudo
para permitir que los usuarios lo ejecuten. Asegúrese de no permitir que el usuario elija rutas arbitrarias.