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

39

Дистрибутив представляет собой сервер Ubuntu с ядром Linux 2.6.35-30.

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

битовая
источник

Ответы:

49

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

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

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

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

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

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

Я не уверен насчет других * BSD.

Гейб.
источник
1
Симлинк может решить проблему где .
энзотиб
Д'о ... забыл про эти надоедливые маленькие символические ссылки.
таращиться
@enzotib исправил это!
таращиться
Похоже, что /dev/tmpfsв системе нет (как и моя собственная система с ядром 3.0.0). Вы уверены, что это не то, что создано вашим дистрибутивом?
битовая
1
Не уверен, относится ли это также и к другим, но в моей текущей версии Ubuntu это, похоже, изменилось на /runи, возможно, /run/shmнеобходимо продолжить расследование, прежде чем обновлять мой ответ.
таращиться
14

/ dev / shm небезопасен

... в системах с активной заменой ! Скорее всего , очень высоко ваш компьютер должен быть включено.

Существует лучшая, безопасная , стандартная альтернатива ramfs. Возможно, вы захотите использовать это, ramfsесли планируете использовать пространство с оперативной памятью для временного хранения конфиденциальных данных, таких как закрытые ключи, кошельки Bitcoin или 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" (вы можете использовать Mи Gздесь).
  • modeЭто очень важно , поскольку восьмеричный код 0770только root и пользователь, который смонтировал эту файловую систему, сможет читать и писать в нее, а не другие (вы также можете использовать другой код по вашему выбору, но будьте уверены в этом! ).

Когда это будет сделано, любой пользователь сможет смонтировать его по требованию.

После того, как это ramfsустановит какой-либо пользователь, будет создана и смонтирована новая файловая система на 1024 МБ /mnt/ramfs/. Это будет принадлежать root:user. Как только он / она отключит его или система перезагрузится, эта файловая система на основе ОЗУ исчезнет со всеми своими данными. Что круто.

Кроме того, эта файловая система может быть смонтирована несколькими пользователями независимо, но не одновременно , то есть, чтобы быть готовым к монтированию следующим пользователем, предыдущий пользователь должен отключить эту файловую систему.

установить:

mount /mnt/ramfs/

размонтировать:

umount /mnt/ramfs/

PS Если вы пытаетесь заархивировать rsyncфайлы в корневой каталог вновь смонтированных / созданных ramfs от имени пользователя без полномочий root, вы можете столкнуться с rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]ошибкой. Это вполне нормально и ожидаемо, потому что ваш пользователь не владеет корнем файловой системы оперативной памяти. Решение простое, просто создайте какой-нибудь каталог там, /mnt/ramfs/copied/например, и rsyncв него.

PPS протестирован на Debian 9. Я уверен, что он будет работать и на Ubuntu.

TranslucentCloud
источник
10

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

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

Жиль "ТАК - перестань быть злым"
источник
5

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

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

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

  • использовать подкаталоги из одного tmpfs. Наверное, лучший подход. Вам действительно, вероятно, не нужно больше, чем одна TMPFs.
  • создайте сценарий, который создаст каталог и смонтирует над ним tmpfs, а затем распечатает, где он находится. Используйте, sudoчтобы позволить пользователям запускать его. Убедитесь, что вы не позволяете пользователю выбирать произвольные пути.
derobert
источник