(Как) я могу создать tmpfs как обычный (не root) пользователь?

Распространение - это сервер Ubuntu с ядром Linux 2.6.35-30.

Я хотел бы иметь каталог, который полностью находится в памяти. Возможно ли это без привилегий root?

28 голосов | спросил bitmask 9 FriEurope/Moscow2011-12-09T02:23:00+04:00Europe/Moscow12bEurope/MoscowFri, 09 Dec 2011 02:23:00 +0400 2011, 02:23:00

4 ответа


35

Linux предоставляет устройство tmpfs, которое может использовать любой пользователь, /dev/shm. По умолчанию он не установлен в определенный каталог, но вы все равно можете использовать его как один.

Просто создайте каталог в /dev/shm, а затем символически привяжите его туда, где хотите. Вы можете предоставить созданному каталогу все разрешения, которые вы выбрали, чтобы другие пользователи не могли получить к нему доступ.

Это устройство с поддержкой RAM, поэтому, по умолчанию, оно есть в памяти. Вы можете создать любые каталоги, которые вам нужны внутри /dev/shm

Естественно, что файлы, размещенные здесь, не будут перезагружены, и если ваш компьютер начнет замену, /dev/shm не поможет.

Solaris, параллельная /dev/shm, является /tmp, который является разделом типа «подкачки», а также на основе памяти. Как и в случае с /dev/shm, произвольные пользователи могут создавать файлы в /tmp в Solaris.

OpenBSD также имеет возможность использовать mount на основе памяти, но по умолчанию он не доступен. Команда mount_mfs доступна суперпользователю.

Я не уверен в других BSD.

ответил gabe. 9 FriEurope/Moscow2011-12-09T02:31:49+04:00Europe/Moscow12bEurope/MoscowFri, 09 Dec 2011 02:31:49 +0400 2011, 02:31:49
8

Ваша система может быть уже доступна; последние Linux-системы на основе Glibc всегда имеют tmpfs, установленный на /dev/shm .

Если ваша система не имеет одного или слишком маленького размера, то файловая система, не установленная корнем, в значительной степени означает доступные файловые системы FUSE , я вижу только Ramfuse , который, к сожалению, покинут вверх по течению.

ответил Gilles 9 FriEurope/Moscow2011-12-09T02:40:31+04:00Europe/Moscow12bEurope/MoscowFri, 09 Dec 2011 02:40:31 +0400 2011, 02:40:31
3

В общем случае нет, файловые системы могут монтироваться только root. Если вы разрешаете пользователю произвольно размещать файловые системы, это, по сути, дает им root. (Простой способ: установить один поверх /etc, поместить свой собственный passwd и тень туда, su с новым паролем root, который вы только что создали, отключить)

Если вы хотите tmpfs в определенном месте, вы можете добавить его в /etc/fstab, с флагами noauto,user, а затем пользователь сможет его смонтировать (но не совсем понятно, почему вы не просто автомонтируете его)

Если пользователям нужны произвольные tmpfs, у вас есть несколько вариантов:

  • используйте подкаталоги одного tmpfs. Вероятно, лучший подход. Вам, вероятно, не нужно больше одного tmpfs.
  • создайте скрипт, который создаст каталог и смонтирует tmpfs поверх него, а затем распечатает его. Используйте sudo, чтобы позволить пользователям запускать его. Убедитесь, что вы выполняете not , чтобы пользователь мог выбирать произвольные пути.
ответил derobert 9 FriEurope/Moscow2011-12-09T02:36:36+04:00Europe/Moscow12bEurope/MoscowFri, 09 Dec 2011 02:36:36 +0400 2011, 02:36:36
2

Использование /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 к нему.

ответил TranslucentCloud 23 32016vEurope/Moscow11bEurope/MoscowWed, 23 Nov 2016 15:34:04 +0300 2016, 15:34:04

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132