(Как) я могу создать tmpfs как обычный (не root) пользователь?
Распространение - это сервер Ubuntu с ядром Linux 2.6.35-30.
Я хотел бы иметь каталог, который полностью находится в памяти. Возможно ли это без привилегий root?
4 ответа
Linux предоставляет устройство tmpfs, которое может использовать любой пользователь, /dev/shm
. По умолчанию он не установлен в определенный каталог, но вы все равно можете использовать его как один.
Просто создайте каталог в /dev/shm
, а затем символически привяжите его туда, где хотите. Вы можете предоставить созданному каталогу все разрешения, которые вы выбрали, чтобы другие пользователи не могли получить к нему доступ.
Это устройство с поддержкой RAM, поэтому, по умолчанию, оно есть в памяти. Вы можете создать любые каталоги, которые вам нужны внутри /dev/shm
Естественно, что файлы, размещенные здесь, не будут перезагружены, и если ваш компьютер начнет замену, /dev/shm
не поможет.
Solaris, параллельная /dev/shm
, является /tmp
, который является разделом типа «подкачки», а также на основе памяти. Как и в случае с /dev/shm
, произвольные пользователи могут создавать файлы в /tmp
в Solaris.
OpenBSD также имеет возможность использовать mount на основе памяти, но по умолчанию он не доступен. Команда mount_mfs доступна суперпользователю.
Я не уверен в других BSD.
Ваша система может быть уже доступна; последние Linux-системы на основе Glibc всегда имеют tmpfs, установленный на /dev/shm
.
Если ваша система не имеет одного или слишком маленького размера, то файловая система, не установленная корнем, в значительной степени означает доступные файловые системы FUSE , я вижу только Ramfuse , который, к сожалению, покинут вверх по течению.
В общем случае нет, файловые системы могут монтироваться только root. Если вы разрешаете пользователю произвольно размещать файловые системы, это, по сути, дает им root. (Простой способ: установить один поверх /etc, поместить свой собственный passwd и тень туда, su с новым паролем root, который вы только что создали, отключить)
Если вы хотите tmpfs в определенном месте, вы можете добавить его в /etc/fstab
, с флагами noauto,user
, а затем пользователь сможет его смонтировать (но не совсем понятно, почему вы не просто автомонтируете его)
Если пользователям нужны произвольные tmpfs, у вас есть несколько вариантов:
- используйте подкаталоги одного tmpfs. Вероятно, лучший подход. Вам, вероятно, не нужно больше одного tmpfs.
- создайте скрипт, который создаст каталог и смонтирует tmpfs поверх него, а затем распечатает его. Используйте
sudo
, чтобы позволить пользователям запускать его. Убедитесь, что вы выполняете not , чтобы пользователь мог выбирать произвольные пути.
Использование /dev /shm небезопасно в системах с активными swap а>. Скорее всего, ваш компьютер включен.
Существует более безопасная альтернатива - ramfs
. Вы можете использовать ramfs
, если вы планируете использовать пространство с резервным хранилищем для хранения конфиденциальных данных, таких как личные ключи, биткойн или Ethereum кошельки и т. д.
ramfs
лучше, чем tmpfs
когда безопасность важна, поскольку ramfs
данные никогда не заменяются (сохраняются на физическом диске), а tmpfs
может быть заменен. Третьи стороны, а затем могут проверять пространство подкачки и извлекать конфиденциальные данные .
Решение:
Вы можете подготовить ramfs
, чтобы любой непривилегированный пользователь мог монтировать /отключать его по требованию. Для этого вам потребуется root-привилегия один раз. Попросите вашего администратора настроить это для вас, если вам не хватает привилегий root.
Сначала вам нужно добавить строку в /etc/fstab
. Строка в fstab может выглядеть так:
none /mnt/ramfs ramfs noauto,user,size=1024M,mode=0770 0 0
-
/mnt/ramfs
- точка монтирования, в которой будет монтироваться файловая система ramfs. Каталог должен существовать. -
Параметр
noauto
не позволяет автоматически монтировать его (например, при загрузке системы). -
user
делает этот монтируемый постоянными пользователями -
size
устанавливает этот размер «ramdisk» -
mode
очень важно, с восьмеричным кодом0770
только root и пользователь, который смонтировал эту файловую систему, смогут читать и писать, а не другие (вы также можете использовать другой код по своему выбору, но будьте очень уверены в этом)
Когда это будет сделано, любой пользователь сможет установить это по требованию.
Как только пользователь устанавливает это, новая файловая система ramfs 1024 МБ создается в /mnt/ramfs/
. Он будет принадлежать root:user
. После того, как он отключит его, или система перезагрузится, файловая система исчезнет со всеми своими данными.
Кроме того, эта файловая система может быть смонтирована несколькими пользователями самостоятельно, но не в одно и то же время, то есть быть готовым к установке следующим пользователем, предыдущий пользователь должен отключить эту файловую систему ramfs.
для монтирования:
mount /mnt/ramfs/
, чтобы размонтировать:
umount /mnt/ramfs/
P.S. Если вы пытаетесь использовать rsync
файлы в корне недавно смонтированных /созданных ramfs как пользователь без полномочий root, вы можете столкнуться с ---- +: = 20 =: + ----. Это связано с тем, что ваш пользователь не владеет корнем файловой системы ram. Решение прост, просто создайте там какой-нибудь каталог, rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]
, и rsync к нему.