(Jak) mogę utworzyć tmpfs jako zwykły użytkownik (inny niż root)?


39

Dystrybucja to serwer Ubuntu z jądrem Linux 2.6.35-30.

Chciałbym mieć katalog, który jest całkowicie w pamięci. Czy jest to możliwe bez uprawnień roota?

Odpowiedzi:


49

Linux dostarcza urządzenie tmpfs które każdy użytkownik może korzystać, /dev/shm. Domyślnie nie jest on montowany w określonym katalogu, ale nadal można go używać jako jednego.

Wystarczy utworzyć katalog w, /dev/shma następnie dowiązać symbolicznie do dowolnego miejsca. Możesz nadać utworzonemu katalogowi dowolne wybrane uprawnienia, aby inni użytkownicy nie mieli do niego dostępu.

Jest to urządzenie z pamięcią RAM, więc domyślnie jest to, co jest w pamięci. Możesz utworzyć dowolne katalogi, których potrzebujesz/dev/shm

Oczywiście umieszczone tutaj pliki nie przetrwają ponownego uruchomienia, a jeśli maszyna zacznie się zamieniać, /dev/shmnie pomoże.

Równolegle do Solaris /dev/shmjest /tmppartycją typu „swap”, a także opartą na pamięci. Podobnie jak w przypadku /dev/shm, dowolni użytkownicy mogą tworzyć pliki w /tmpsystemie Solaris.

OpenBSD ma również możliwość korzystania z montowania opartego na pamięci, ale domyślnie nie jest dostępne. Polecenie mount_mfs jest dostępne dla superużytkownika.

Nie jestem pewien co do innych * BSD.


1
Dowiązanie symboliczne może rozwiązać problem gdzie .
enzotib,

D'oh ... zapomniałem o tych nieznośnych małych dowiązaniach symbolicznych.
Gabe.

@enzotib naprawił to!
Gabe.

Wydaje się, że nie ma /dev/tmpfsw systemie (podobnie jak mój własny system z jądrem 3.0.0). Czy na pewno nie jest to coś stworzonego przez twoją dystrybucję?
maska ​​bitowa

1
Nie jestem pewien, czy dotyczy to również innych, ale w mojej obecnej wersji ubuntu wydaje się, że to się zmieniło /runi być może /run/shmmuszę to zbadać przed zaktualizowaniem mojej odpowiedzi.
Gabe.

14

/ dev / shm jest niepewny

... w systemach z aktywną zamianą ! Szanse są bardzo duże, że Twój komputer ma włączony.

Istnieje lepsza, bezpieczna , standardowa alternatywa - ramfs. Możesz użyć tej opcji, ramfsjeśli planujesz używać miejsca z pamięcią RAM do tymczasowego przechowywania poufnych danych, takich jak klucze prywatne, portfele Bitcoin lub Ethereum i tym podobne.

ramfsjest lepszy niż w tmpfsprzypadku bezpieczeństwa, ponieważ ramfsdane nigdy nie są zamieniane (zapisywane na fizycznym dysku), ale tmpfs mogą zostać zamienione. Strony trzecie mogą następnie sprawdzić przestrzeń wymiany i wyodrębnić poufne dane .

Rozwiązanie

Możesz przygotować ramfsmount, aby każdy nieuprzywilejowany użytkownik mógł zamontować / odmontować go na żądanie.

Aby to zrobić, trzeba będzie główny przywilej raz . Poproś administratora swojego systemu, aby skonfigurował to dla ciebie, jeśli nie masz uprawnień roota.

Najpierw musisz dodać linię do /etc/fstab. Linia w fstab może wyglądać następująco:

none    /mnt/ramfs    ramfs    noauto,user,size=1024M,mode=0770    0    0
  • /mnt/ramfsto punkt montowania, w którym zostanie zamontowany system plików ramfs. Katalog powinien istnieć.
  • noauto opcja zapobiega automatycznemu montowaniu (np. podczas uruchamiania systemu).
  • user czyni to możliwym do zamontowania przez zwykłych użytkowników.
  • sizeustawia rozmiar „ramdysku” (możesz użyć Mi Gtutaj).
  • modejest bardzo ważne , ponieważ w kodzie ósemkowym 0770tylko root i użytkownik, który zamontował ten system plików, będą mogli go czytać i zapisywać, a nie inne (możesz użyć innego kodu, który wybierzesz, ale bądź tego pewny! ).

Gdy to zrobisz, każdy użytkownik będzie mógł zamontować to na żądanie.

Gdy jakiś użytkownik to zamontuje, nowy ramfssystem plików 1024 MB jest tworzony i montowany w /mnt/ramfs/. Będzie własnością root:user. Gdy on / ona odmontuje go lub system zostanie zrestartowany, ten system plików oparty na pamięci RAM zniknie wraz ze wszystkimi danymi. Co jest fajne.

Ponadto ten system plików może być zamontowany przez kilku użytkowników niezależnie, ale nie w tym samym czasie , tzn. Aby był gotowy do zamontowania przez następnego użytkownika, poprzedni użytkownik powinien odmontować ten system plików.

zamontować:

mount /mnt/ramfs/

odmontować:

umount /mnt/ramfs/

PS Jeśli próbujesz rsyncutworzyć pliki do katalogu głównego nowo zamontowanych / utworzonych ramfs jako użytkownik inny niż root, możesz napotkać rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]błąd. Jest to całkowicie w porządku i oczekiwane, ponieważ użytkownik nie jest właścicielem katalogu głównego systemu plików RAM. Rozwiązanie jest proste, po prostu stwórz tam /mnt/ramfs/copied/na przykład jakiś katalog i rsyncdo niego.

Testy PPS na Debianie 9. Jestem pewien, że zadziała również na Ubuntu.



5

Zasadniczo nie, systemy plików mogą być montowane tylko przez root. Jeśli pozwalasz użytkownikowi na dowolne umieszczanie systemów plików, to w zasadzie daje to rootowi. (Łatwy sposób: zamontuj jeden nad / etc, umieść tam własne hasło i cień, su z nowym hasłem roota, odinstaluj)

Jeśli chcesz tmpfs w określonej lokalizacji, możesz go dodać /etc/fstab, z flagami, noauto,usera następnie użytkownik będzie mógł go zamontować (ale nie jest szczególnie jasne, dlaczego nie chcesz go po prostu automatycznie montować)

Jeśli użytkownicy potrzebują dowolnych plików tmpfs, masz kilka opcji:

  • użyj podkatalogów jednego tmpfs. Prawdopodobnie najlepsze podejście. Naprawdę prawdopodobnie nie potrzebujesz więcej niż jednego tmpfs.
  • utwórz skrypt, który utworzy katalog i zamontuje na nim tmpfs, a następnie wydrukuje tam, gdzie go umieści. Użyj, sudoaby zezwolić użytkownikom na uruchomienie. Upewnij się, że nie pozwalasz użytkownikowi wybierać dowolnych ścieżek.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.