(Як) я можу створити tmpfs як звичайний (некоріозний) користувач?


39

Розподіл - сервер Ubuntu, на якому працює ядро ​​Linux 2.6.35-30.

Я хотів би мати каталог, який повністю сидить у пам'яті. Чи можливо це без привілеїв root?

Відповіді:


49

Linux забезпечує пристрій TMPFS , який може використовувати будь-який користувач, /dev/shm. За замовчуванням він не встановлений у певному каталозі, але ви все одно можете використовувати його як один.

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

Це пристрій з підтримкою оперативної пам’яті, тому те, що є в пам'яті за замовчуванням. Ви можете створювати все необхідні вам каталоги всередині/dev/shm

Звичайно, розміщені тут файли не переживуть перезавантаження, і якщо ваша машина почне мінятися, вам /dev/shmце не допоможе.

Паралель Solaris /dev/shm- /tmpце розділ типу "swap", а також заснований на пам'яті. Як і у випадку /dev/shm, довільні користувачі можуть створювати файли в /tmpSolaris.

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

Я не впевнений в інших * BSD.


1
Симпосилання може вирішити проблему де .
enzotib

Д'о ... забув про ті примхливі маленькі символіки.
габе.

@enzotib виправив це!
габе.

Здається, що в /dev/tmpfsсистемі немає (як і моя власна система, яка має ядро ​​3.0.0). Ви впевнені, що це не щось створене вашим розповсюдженням?
бітмаска

1
Не впевнений, чи це стосується й інших, але в моїй поточній версії ubuntu це, здається, змінилося /runі, можливо, /run/shmпотрібно вивчити далі перед оновленням моєї відповіді.
габе.

14

/ dev / shm є небезпечним

... у системах з активним свопом ! Швидше за все , дуже високо ваш комп'ютер повинен бути включено.

Є краща, безпечна , стандартна альтернатива - ramfs. Ви можете скористатися, ramfsякщо плануєте використовувати захищений оперативною пам’яттю простір для тимчасового зберігання конфіденційних даних, таких як приватні ключі, гаманці Bitcoin або Ethereum тощо.

ramfsє кращим, ніж tmpfsколи йдеться про безпеку, оскільки ramfsдані ніколи не змінюються (зберігаються на фізичному накопичувачі), в той час як tmpfs можуть бути замінені. Потім треті сторони можуть перевірити простір обміну і витягнути конфіденційні дані .

Рішення

Ви можете підготувати ramfsмонтаж, щоб будь-який непривілейований користувач міг змонтувати / відключити його на вимогу.

Для цього вам знадобиться коренева привілей, один раз . Попросіть адміністратора вашої системи встановити це для вас, якщо вам не вистачає привілеїв 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тільки кореневої і користувачем, який змонтований цієї файлової системою, матиме можливість читати і писати до нього, а не іншим (ви можете використовувати інший код за вашим вибором , а також, але бути дуже впевнений в цьому! ).

Коли це буде зроблено, будь-який користувач зможе встановити це на вимогу.

Після того, як якийсь користувач змонтує це, ramfsстворена та встановлена нова файлова система 1024 Мб /mnt/ramfs/. Він буде належати root:user. Після того як він / вона відключить його або перезавантажиться система, ця файлова система на основі ОЗУ зникне з усіма своїми даними. Що класно.

Також цю файлову систему можна монтувати декількома користувачами незалежно, але не одночасно , тобто, щоб бути готовим до монтажу наступним користувачем, попередній користувач повинен відключити цю файлову систему.

для монтажу:

mount /mnt/ramfs/

демонтувати:

umount /mnt/ramfs/

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

PPS Тестовано на Debian 9. Досить впевнений, що він буде працювати і на Ubuntu.


10

У вашій системі може бути вже наявна; останні системи Linux на базі Glibc завжди мають змонтований tmpfs/dev/shm .

Якщо у вашій системі немає такої або вона занадто мала, то файлова система, яка не змонтована кореневим файлом, в значній мірі означає ФУЗИ . Для Ubuntu вам потрібно бути в fuseгрупі, щоб використовувати FUSE. Переглядаючи доступні файлові системи FUSE , я бачу лише Ramfuse , який, на жаль, покинутий вгору за течією.


5

Взагалі, ні, файлові системи можуть бути змонтовані тільки під корінь. Якщо ви дозволяєте користувачеві розміщувати файлові системи довільно, це по суті дає їм корінь. (Простий спосіб: встановити один над / і т.д., покласти туди свій власний пароль та тінь, відповідно до нового пароля, який ви тільки що створили, відключити)

Якщо ви хочете, щоб tmpfs у певному місці ви могли додати його до /etc/fstabпрапорів, noauto,userа потім користувач зможе його встановити (але не особливо зрозуміло, чому ви не просто встановите його автоматично)

Якщо користувачі потребують довільних tmpfs, у вас є пара варіантів:

  • використовувати підкаталоги одного tmpfs. Напевно, найкращий підхід. Вам, ймовірно, не потрібно більше одного tmpfs.
  • створіть скрипт, який створить каталог і змонтуйте над ним tmpfs, а потім роздрукуйте, куди він його поклав. Використовуйте, sudoщоб дозволити користувачам запускати його. Переконайтеся, що ви не дозволяєте користувачеві вибирати довільні шляхи.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.