(อย่างไร) ฉันสามารถสร้าง tmpfs ในฐานะผู้ใช้ปกติ (ที่ไม่ใช่รูท) ได้อย่างไร


39

การแจกจ่ายเป็นเซิร์ฟเวอร์ Ubuntu ที่ใช้เคอร์เนล 2.6.35-30

ฉันต้องการไดเรกทอรีที่อยู่ในหน่วยความจำอย่างสมบูรณ์ เป็นไปได้หรือไม่หากไม่มีสิทธิ์รูท

คำตอบ:


49

ลินุกซ์ยังมีอุปกรณ์ tmpfs /dev/shmซึ่งผู้ใช้สามารถใช้งานได้ มันไม่ได้เมานต์ไปยังไดเรกทอรีที่ระบุโดยค่าเริ่มต้น แต่คุณยังสามารถใช้มันเป็นหนึ่งเดียว

เพียงสร้างไดเรกทอรี/dev/shmจากนั้นเชื่อมโยงไปยังทุกที่ที่คุณต้องการ คุณสามารถให้สิทธิ์สร้างไดเรกทอรีใด ๆ ที่คุณเลือกเพื่อให้ผู้ใช้รายอื่นไม่สามารถเข้าถึงได้

นี่คืออุปกรณ์ที่สำรอง RAM ดังนั้นสิ่งที่มีอยู่ในหน่วยความจำโดยค่าเริ่มต้น คุณสามารถสร้างไดเรกทอรีใด ๆ ที่คุณต้องการภายใน/dev/shm

โดยปกติแล้วไฟล์ที่วางไว้ที่นี่จะไม่สามารถรีบูตได้และหากเครื่องของคุณเริ่มทำการแลกเปลี่ยน/dev/shmจะไม่ช่วยคุณ

โซลาริขนานไปกับการ/dev/shmมีที่/tmpซึ่งเป็น "แลกเปลี่ยน" พาร์ทิชันชนิดและยังหน่วยความจำตาม เช่นเดียวกับ/dev/shmผู้ใช้เองอาจสร้างไฟล์ใน/tmpบน Solaris

OpenBSD มีความสามารถในการใช้หน่วยความจำที่ยึดตามเช่นกัน แต่ไม่มีค่าเริ่มต้นให้ใช้งาน คำสั่ง mount_mfs นั้นไม่มีประโยชน์สำหรับผู้ใช้ขั้นสูง

ฉันไม่แน่ใจเกี่ยวกับ * BSD อื่น


1
symlink สามารถแก้ที่ปัญหา
enzotib

D'oh ... ลืมเกี่ยวกับ symlinks เล็กน้อยที่น่ารำคาญเหล่านั้น
เกบ

@enzotib แก้ไขได้!
เกบ

ดูเหมือนว่าจะไม่มี/dev/tmpfsในระบบ (ไม่มีระบบของตัวเองซึ่งมีเคอร์เนล 3.0.0) คุณแน่ใจหรือว่าไม่ใช่สิ่งที่สร้างขึ้นโดยการแจกจ่ายของคุณ
bitmask

1
ไม่แน่ใจว่าสิ่งนี้ใช้ได้กับคนอื่นด้วยหรือไม่ แต่ใน Ubuntu เวอร์ชันปัจจุบันของฉันดูเหมือนว่าจะมีการเปลี่ยนแปลง/runและอาจ/run/shmต้องตรวจสอบเพิ่มเติมก่อนที่จะอัปเดตคำตอบของฉัน
เกบ

14

/ dev / shm ไม่ปลอดภัย

... ในระบบที่มีการสลับที่ใช้งานอยู่! มีโอกาสสูงที่คอมพิวเตอร์ของคุณเปิดใช้งาน

มีที่ดีกว่าคือการรักษาความปลอดภัยทางเลือกมาตรฐาน ramfs- คุณอาจต้องการใช้ramfsถ้าคุณวางแผนที่จะใช้ RAM ที่สำรองไว้เพื่อเก็บข้อมูลสำคัญชั่วคราวเช่นกุญแจส่วนตัว Bitcoin หรือกระเป๋าเงิน Ethereum และอื่น ๆ

ramfsดีกว่าtmpfsเมื่อคำนึงถึงความปลอดภัยเนื่องจากramfsข้อมูลไม่เคยถูกเปลี่ยน (บันทึกไปยังไดรฟ์จัดเก็บข้อมูลจริง) ในขณะที่tmpfs อาจถูกเปลี่ยน บุคคลที่สามสามารถตรวจสอบพื้นที่สว็อปและดึงข้อมูลที่ละเอียดอ่อนได้

การแก้ไขปัญหา

คุณสามารถเตรียมramfsเมาท์เพื่อให้ผู้ใช้ที่ไม่มีสิทธิพิเศษสามารถเมานต์ / เลิกเมานต์ได้ตามต้องการ

การทำเช่นนี้คุณจะต้องรากสิทธิ์ครั้งเดียว ขอให้ผู้ดูแลระบบของคุณตั้งค่าให้คุณหากคุณไม่มีสิทธิ์รูท

/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เท่านั้นที่รูทและผู้ใช้ซึ่งติดตั้งระบบไฟล์นี้จะสามารถอ่านและเขียนได้ไม่ใช่อื่น ๆ (คุณสามารถใช้รหัสที่แตกต่างกันตามที่คุณเลือกได้ แต่ต้องแน่ใจด้วย! )

เมื่อดำเนินการเสร็จแล้วผู้ใช้จะสามารถติดตั้งได้ตามต้องการ

เมื่อบางม้าผู้ใช้นี้ใหม่ 1024 MB ระบบแฟ้มถูกสร้างขึ้นและติดตั้งที่ramfs มันจะเป็นของ/mnt/ramfs/ root:userเมื่อเขา / เธอ unmounts มันหรือระบบได้รับการรีบูตนี้ระบบแฟ้ม RAM-based จะหายไปกับทุกข้อมูล อันไหนเท่ห์

นอกจากนี้ระบบไฟล์นี้สามารถติดตั้งโดยผู้ใช้หลายคนได้อย่างอิสระ แต่ไม่พร้อมกันนั่นคือเพื่อให้พร้อมสำหรับการติดตั้งโดยผู้ใช้คนต่อไปผู้ใช้ก่อนหน้านี้ควร unmount ระบบไฟล์นี้

เพื่อเมานต์:

mount /mnt/ramfs/

เป็น unmount:

umount /mnt/ramfs/

ป.ล. หากคุณกำลังพยายามที่จะ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เสมอ

หากระบบของคุณไม่ได้มีหนึ่งหรือมันมีขนาดเล็กเกินไปแล้วระบบแฟ้มไม่ได้ติดตั้งโดย root หมายถึงสวยมากFUSE บน Ubuntu คุณต้องอยู่ในfuseกลุ่มเพื่อใช้ FUSE เมื่อมองดูระบบไฟล์ FUSE ที่มีอยู่ฉันเห็นเฉพาะRamfuseซึ่งน่าเสียดายที่ถูกปล่อยปละละเลย


5

โดยทั่วไปไม่สามารถติดตั้งระบบไฟล์โดยรูทเท่านั้น หากคุณอนุญาตให้ผู้ใช้วางระบบไฟล์ตามอำเภอใจนั่นเป็นหลักให้พวกเขารูท (วิธีที่ง่าย: ติดหนึ่งตัว / etc ใส่รหัสผ่านของคุณเองและเงาที่นั่นเช่นเดียวกับรหัสผ่านรูทใหม่ที่คุณเพิ่งสร้างขึ้น unmount)

หากคุณต้องการ tmpfs ในสถานที่เฉพาะคุณสามารถเพิ่มเข้าไป/etc/fstabได้ด้วยธงของnoauto,userแล้วผู้ใช้จะสามารถเมานได้ (แต่ไม่ชัดเจนโดยเฉพาะอย่างยิ่งว่าทำไมคุณไม่เพียงติดตั้งอัตโนมัติ)

หากผู้ใช้ต้องการ tmpfs โดยพลการคุณมีตัวเลือกสองสามอย่าง:

  • ใช้ไดเรกทอรีย่อยของหนึ่ง tmpfs อาจเป็นวิธีที่ดีที่สุด คุณอาจไม่ต้องการ tmpfs มากกว่าหนึ่ง
  • สร้างสคริปต์ที่จะสร้างไดเรกทอรีและติดตั้ง tmpfs เหนือมันจากนั้นพิมพ์ออกมาที่ใดก็ได้ ใช้sudoเพื่ออนุญาตให้ผู้ใช้เรียกใช้ ตรวจสอบให้แน่ใจว่าคุณไม่อนุญาตให้ผู้ใช้เลือกเส้นทางโดยพลการ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.