(Bagaimana) saya bisa membuat tmpfs sebagai pengguna biasa (non-root)?

39

Distribusi adalah server Ubuntu yang menjalankan kernel Linux 2.6.35-30.

Saya ingin memiliki direktori yang sepenuhnya berada di memori. Apakah ini mungkin tanpa hak root?

bitmask
sumber

Jawaban:

49

Linux menyediakan perangkat tmpfs yang dapat digunakan oleh setiap pengguna /dev/shm,. Ini tidak dipasang ke direktori tertentu secara default, tetapi Anda masih dapat menggunakannya sebagai satu.

Cukup buat direktori di /dev/shmdan kemudian symlink ke mana pun Anda inginkan. Anda dapat memberikan direktori yang dibuat izin apa pun yang Anda pilih, sehingga pengguna lain tidak dapat mengaksesnya.

Ini adalah perangkat yang didukung RAM, jadi apa yang ada di memori secara default. Anda dapat membuat direktori yang Anda butuhkan di dalamnya/dev/shm

Biasanya, file yang ditempatkan di sini tidak akan selamat dari reboot, dan jika mesin Anda mulai bertukar, /dev/shmtidak akan membantu Anda.

Solaris sejajar dengan /dev/shmyaitu /tmpyang merupakan "Swap" tipe partisi, dan juga memori berbasis. Seperti halnya /dev/shm, pengguna sewenang-wenang dapat membuat file di /tmpSolaris.

OpenBSD memiliki kemampuan untuk menggunakan mount berbasis memori juga, tetapi tidak memilikinya secara default. Perintah mount_mfs tersedia untuk pengguna super.

Saya tidak yakin tentang * BSD lainnya.

gabe
sumber
1
Symlink dapat memecahkan masalah di mana .
enzotib
Doh ... lupa tentang symlink kecil sial itu.
gabe.
@enzotib memperbaikinya!
gabe.
Sepertinya tidak ada /dev/tmpfspada sistem (juga sistem saya sendiri yang memiliki kernel 3.0.0). Apakah Anda yakin itu bukan sesuatu yang dibuat oleh distribusi Anda?
bitmask
1
Tidak yakin apakah ini berlaku untuk orang lain juga, tetapi pada versi ubuntu saya saat ini tampaknya telah berubah /rundan mungkin /run/shmperlu menyelidiki lebih lanjut sebelum memperbarui jawaban saya.
gabe.
14

/ dev / shm tidak aman

... pada sistem dengan swap aktif ! Peluangnya sangat tinggi untuk mengaktifkan komputer Anda.

Ada alternatif yang lebih baik, aman , standar - ramfs. Anda mungkin ingin menggunakan ramfsjika Anda berencana untuk menggunakan ruang yang didukung RAM untuk menyimpan data sensitif sementara , seperti kunci pribadi, dompet Bitcoin atau Ethereum dan semacamnya.

ramfslebih baik daripada tmpfsketika keamanan terkait, karena ramfsdata tidak pernah ditukar (disimpan ke drive penyimpanan fisik), sementara tmpfs mungkin ditukar. Pihak ketiga kemudian dapat memeriksa ruang swap dan mengekstrak data sensitif .

Solusinya

Anda dapat menyiapkan ramfspemasangan sehingga pengguna yang tidak memiliki hak istimewa dapat memasang / melepas pemasangan sesuai permintaan.

Untuk melakukan ini, Anda perlu root privilege, sekali . Mintalah administrator sistem Anda untuk mengatur ini untuk Anda, jika Anda tidak memiliki hak root.

Pada awalnya, Anda perlu menambahkan baris ke /etc/fstab. Baris di fstab mungkin terlihat seperti ini:

none    /mnt/ramfs    ramfs    noauto,user,size=1024M,mode=0770    0    0
  • /mnt/ramfsadalah titik mount, di mana sistem file ramfs akan dipasang. Direktori harus ada.
  • noauto Opsi mencegah ini tidak dipasang secara otomatis (misalnya saat boot sistem).
  • user membuat ini dapat dipasang oleh pengguna biasa.
  • sizesetel ukuran "ramdisk" ini (bisa Anda gunakan Mdan di Gsini).
  • modeadalah sangat penting , dengan kode oktal 0770hanya root dan user, yang dipasang filesystem ini, akan dapat membaca dan menulis untuk itu, bukan yang lain (Anda dapat menggunakan kode yang berbeda pilihan Anda juga, tapi sangat yakin tentang hal itu! ).

Ketika ini selesai, setiap pengguna akan dapat me-mount ini sesuai permintaan.

Setelah beberapa pengguna memasang ini, ramfssistem file 1024 MB baru dibuat dan dipasang di /mnt/ramfs/. Ini akan dimiliki oleh root:user. Setelah dia melepasnya, atau sistem reboot, sistem file berbasis RAM ini akan lenyap dengan semua datanya. Itu keren.

Selain itu, sistem file ini dapat dipasang oleh beberapa pengguna secara independen, tetapi tidak pada saat yang sama , yaitu agar siap untuk dipasang oleh pengguna berikutnya, pengguna sebelumnya harus meng-unmount sistem file ini.

untuk memasang:

mount /mnt/ramfs/

untuk melepas:

umount /mnt/ramfs/

PS Jika Anda mencoba rsyncfile ke root ramf yang baru dipasang / dibuat sebagai pengguna non-root, Anda mungkin menghadapi rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]kesalahan. Ini benar-benar baik dan diharapkan, karena pengguna Anda tidak memiliki root dari sistem file ram. Solusinya sederhana, cukup buat beberapa direktori di sana, /mnt/ramfs/copied/misalnya, dan rsyncmasuk ke dalamnya.

PPS Diuji pada Debian 9. Cukup yakin itu akan bekerja di Ubuntu juga.

TranslucentCloud
sumber
10

Sistem Anda mungkin sudah memiliki satu; sistem Linux terbaru berbasis Glibc selalu memiliki tmpfs yang terpasang/dev/shm .

Jika sistem Anda tidak memilikinya atau terlalu kecil, maka sistem file yang tidak di-mount oleh root berarti FUSE . Di Ubuntu, Anda harus berada dalam fusegrup untuk menggunakan FUSE. Melihat melalui filesystem FUSE yang tersedia , saya hanya melihat Ramfuse , yang sayangnya ditinggalkan di hulu.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
5

Secara umum, tidak, filesystem hanya bisa dipasang oleh root. Jika Anda mengizinkan pengguna untuk menempatkan sistem file secara sewenang-wenang, itu intinya memberi mereka root. (Cara mudah: pasang satu di atas / etc, letakkan passwd Anda sendiri dan bayangan di sana, su dengan kata sandi root baru yang baru saja Anda buat, unmount)

Jika Anda ingin tmpfs di lokasi tertentu, Anda dapat menambahkannya ke /etc/fstab, dengan bendera noauto,userdan kemudian pengguna dapat memasangnya (tetapi tidak terlalu jelas mengapa Anda tidak hanya memasang otomatisnya)

Jika pengguna membutuhkan tmpfs sembarang, maka Anda memiliki beberapa opsi:

  • gunakan subdirektori dari satu tmpfs. Mungkin pendekatan terbaik. Anda mungkin benar-benar tidak perlu lebih dari satu tmpfs.
  • buat skrip yang akan membuat direktori dan me-mount tmpfs di atasnya, dan kemudian cetak di mana ia meletakkannya. Gunakan sudountuk memungkinkan pengguna menjalankannya. Pastikan Anda tidak mengizinkan pengguna untuk memilih jalur yang sewenang-wenang.
derobert
sumber