(कैसे) मैं एक नियमित (गैर-रूट) उपयोगकर्ता के रूप में एक tmpfs बना सकता हूं?


39

वितरण एक Ubuntu सर्वर है जो 2.6.35-30 लिनक्स कर्नेल चला रहा है।

मैं एक निर्देशिका लेना चाहूंगा जो पूरी तरह से स्मृति में बैठे। क्या यह रूट विशेषाधिकार के बिना संभव है?

जवाबों:


49

लिनक्स एक tmpfs उपकरण है जो किसी भी उपयोगकर्ता उपयोग कर सकते हैं प्रदान करता है, /dev/shm। यह डिफ़ॉल्ट रूप से एक विशिष्ट निर्देशिका पर आरूढ़ नहीं है, लेकिन आप अभी भी इसे एक के रूप में उपयोग कर सकते हैं।

बस में एक निर्देशिका बनाएँ /dev/shmऔर फिर जहाँ भी आप चाहते हैं, उसे सिमिलिंक करें। आप बनाई गई निर्देशिका को आपके द्वारा चुनी गई कोई भी अनुमति दे सकते हैं, ताकि अन्य उपयोगकर्ता इसे एक्सेस न कर सकें।

यह एक रैम समर्थित डिवाइस है, इसलिए डिफ़ॉल्ट रूप से मेमोरी में क्या है। आप अपने अंदर कोई भी निर्देशिका बना सकते हैं/dev/shm

स्वाभाविक रूप से, यहां रखी गई फाइलें रिबूट से बच नहीं पाएंगी, और यदि आपकी मशीन स्वैप करना शुरू कर देती है, /dev/shmतो यह आपकी मदद नहीं करेगा।

सोलारिस समानांतर /dev/shmहै /tmpजो एक "स्वैप" प्रकार का विभाजन है, और स्मृति आधारित भी है। जैसा कि /dev/shm, मनमाने ढंग से उपयोगकर्ता /tmpसोलारिस पर फाइल बना सकते हैं ।

OpenBSD में मेमोरी आधारित माउंट का उपयोग करने की क्षमता है, लेकिन डिफ़ॉल्ट रूप से उपलब्ध नहीं है। Mount_mfs कमांड सुपर उपयोगकर्ता के लिए उपलब्ध है।

मैं अन्य * बीएसडी के बारे में निश्चित नहीं हूं।


1
एक सहिष्णु जहां समस्या को हल कर सकता है।
enzotib

D'oh ... उन pesky के बारे में छोटी सी सहानुभूति भूल गया।
गाबे

@enzotib ने इसे ठीक किया!
गाबे

/dev/tmpfsसिस्टम पर ऐसा प्रतीत नहीं होता है (न ही मेरा अपना सिस्टम है जिसमें 3.0.0 कर्नेल है)। क्या आप सुनिश्चित हैं कि आपके वितरण द्वारा कुछ बनाया नहीं गया है?
बिटमैस्क

1
सुनिश्चित नहीं है कि यह दूसरों के लिए भी लागू होता है, लेकिन ubuntu के मेरे वर्तमान संस्करण पर यह मेरे उत्तर को अपडेट करने से पहले /runऔर संभवतः /run/shmजांच करने की आवश्यकता है।
गाबे

14

/ देव / शम असुरक्षित है

... सक्रिय स्वैप के साथ सिस्टम पर ! संभावना बहुत अधिक है आपके कंप्यूटर ने इसे सक्षम किया है।

एक बेहतर, सुरक्षित , मानक विकल्प है - ramfsramfsयदि आप राम-समर्थित स्थान का उपयोग अस्थायी स्टोर संवेदनशील डेटा, जैसे कि निजी कुंजी, बिटकॉइन या एथेरम वॉलेट और ऐसे करने के लिए करना चाहते हैं, तो आप इसका उपयोग करना चाह सकते हैं ।

ramfstmpfsजब सुरक्षा की बात की जाए तो बेहतर है , क्योंकि ramfsडेटा कभी स्वैप नहीं होता (भौतिक संग्रहण ड्राइव में सहेजा जाता है), जबकि स्वैप tmpfs हो सकता है । तीसरे पक्ष तब स्वैप स्थान का निरीक्षण कर सकते हैं और संवेदनशील डेटा निकाल सकते हैं

समाधान

आप ramfsमाउंट तैयार कर सकते हैं ताकि कोई भी गैर-विशेषाधिकार प्राप्त उपयोगकर्ता इसे ऑन-डिमांड पर माउंट / अनमाउंट कर सके।

ऐसा करने के लिए, आपको एक बार रूट विशेषाधिकार की आवश्यकता होगी । यदि आपके पास रूट विशेषाधिकारों की कमी है, तो इसे स्थापित करने के लिए अपने सिस्टम के व्यवस्थापक से पूछें।

सबसे पहले, आपको एक पंक्ति जोड़ने की आवश्यकता है /etc/fstab। Fstab में रेखा इस तरह दिख सकती है:

none    /mnt/ramfs    ramfs    noauto,user,size=1024M,mode=0770    0    0
  • /mnt/ramfsएक आरोह बिंदु है, जहां रैमफस फाइलसिस्टम आरोहित किया जाएगा। निर्देशिका मौजूद होनी चाहिए।
  • noauto विकल्प इसे स्वचालित रूप से माउंट होने से रोकता है (जैसे सिस्टम के बूट अप पर)।
  • user यह नियमित उपयोगकर्ताओं द्वारा माउंट करने योग्य बनाता है।
  • sizeयह "रैमडिस्क" का आकार सेट करता है (आप यहां Mऔर Gयहां उपयोग कर सकते हैं)।
  • modeहै बहुत महत्वपूर्ण , अष्टाधारी कोड के साथ 0770ही जड़ और उपयोगकर्ता, जो इस फाइल सिस्टम घुड़सवार, यह करने के लिए पढ़ने के लिए और लिखने में सक्षम हो जाएगा दूसरों को नहीं (आप अच्छी तरह से अपनी पसंद के अलग अलग कोड का उपयोग कर सकते हैं, लेकिन इसके बारे में बहुत सुनिश्चित करें! )।

जब यह किया जाता है, तो कोई भी उपयोगकर्ता इसे मांग पर माउंट करने में सक्षम होगा।

एक बार जब कुछ उपयोगकर्ता यह मान लेते हैं, तो नया 1024 एमबी ramfsफाइल सिस्टम बनाया जाता है और उस पर आरोहित किया जाता है /mnt/ramfs/। इसके स्वामित्व में होगा root:user। एक बार जब वह इसे अनमाउंट कर देता है, या सिस्टम रिबूट हो जाता है, तो यह रैम-आधारित फाइल सिस्टम अपने सभी डेटा के साथ गायब हो जाएगा । जो मस्त हो।

इसके अलावा, इस फाइलसिस्टम को कई उपयोगकर्ताओं द्वारा स्वतंत्र रूप से माउंट किया जा सकता है, लेकिन एक ही समय में नहीं , यानी अगले उपयोगकर्ता द्वारा बढ़ते के लिए तैयार होने के लिए, पिछले उपयोगकर्ता को इस फाइल सिस्टम को अनमाउंट करना चाहिए।

चढ़ना:

mount /mnt/ramfs/

अनमाउंट करने के लिए:

umount /mnt/ramfs/

PS यदि आप rsyncएक गैर-रूट उपयोगकर्ता के रूप में नए माउंट किए गए / बनाए गए रम्फ्स की जड़ में फाइल करने की कोशिश कर रहे हैं , तो आपको एक 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 डेबियन 9 पर परीक्षण किया गया। बहुत यकीन है कि यह उबंटू पर भी काम करेगा।


10

आपके सिस्टम में पहले से ही उपलब्ध हो सकता है; Glibc पर आधारित हाल के लिनक्स सिस्टम में हमेशा एक tmpfs लगा होता है/dev/shm

यदि आपके सिस्टम में एक नहीं है या यह बहुत छोटा है, तो एक फाइल सिस्टम रूट द्वारा आरोहित नहीं है जिसका अर्थ है FUSE । उबंटू पर, आपको fuseFUSE का उपयोग करने के लिए समूह में रहने की आवश्यकता है । उपलब्ध FUSE फाइल सिस्टम के माध्यम से , मैं केवल रामफ्यूज़ को देखता हूं , जो दुर्भाग्य से ऊपर की ओर छोड़ दिया गया है।


5

सामान्य तौर पर, नहीं, फाइल सिस्टम केवल रूट द्वारा माउंट किया जा सकता है। यदि आप किसी उपयोगकर्ता को मनमाने ढंग से फाइलसिस्टम रखने की अनुमति देते हैं, तो यह अनिवार्य रूप से उन्हें रूट दे रहा है। (आसान तरीका: एक ओवर / आदि को माउंट करें, वहां अपना स्वयं का पासवार्ड और छाया डालें, नए रूट पासवर्ड के साथ सु जो आपने अभी-अभी बनाया है, अनराउंट करें)

यदि आप किसी विशेष स्थान पर एक tmpfs चाहते हैं, तो आप इसे /etc/fstabझंडे के साथ जोड़ सकते हैं noauto,userऔर फिर एक उपयोगकर्ता इसे माउंट करने में सक्षम होगा (लेकिन यह विशेष रूप से स्पष्ट नहीं है कि आप इसे ऑटो-माउंट क्यों नहीं करेंगे)

यदि उपयोगकर्ताओं को मनमाने ढंग से tmpfs की आवश्यकता है, तो आपके पास कुछ विकल्प हैं:

  • एक tmpfs की उपनिर्देशिका का उपयोग करें। शायद सबसे अच्छा तरीका। तुम सच में शायद एक से अधिक tmpfs की जरूरत नहीं है।
  • एक स्क्रिप्ट बनाएं जो एक निर्देशिका बनाएगा और उस पर एक tmpfs माउंट करेगा, और फिर इसे बाहर रख देगा जहां इसे रखा गया है। sudoउपयोगकर्ताओं को इसे चलाने की अनुमति देने के लिए उपयोग करें । सुनिश्चित करें कि आप उपयोगकर्ता को मनमाने रास्ते चुनने की अनुमति नहीं देते हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.