रूट विशेषाधिकार के बिना एक सामान्य उपयोगकर्ता के रूप में जो भी आप चाहते हैं, उसे कम या ज्यादा माउंट करना वास्तव में बहुत आसान है, बशर्ते सही प्रविष्टि बनाई गई हो /etc/fstab।
बेशक, /etc/fstabरूट विशेषाधिकारों की आवश्यकता के लिए संशोधन । लेकिन एक एकल प्रविष्टि का उपयोग बहुत अधिक लचीलेपन के साथ किया जा सकता है (यू) बिना किसी और संपादन के विभिन्न माउंट बिंदुओं पर कई अलग-अलग फ़ाइलों को माउंट करें /etc/fstab।
यहाँ दो बहुत छोटी (5 लाइनें + टिप्पणियां) बैश स्क्रिप्ट हैं जो काम करेगी:
बढ़ते के लिए
#!/bin/sh
# usage: usmount device dir
# author: babou 2013/05/17 on https://unix.stackexchange.com/questions/32008/mount-an-loop-file-without-root-permission/76002#76002
# Allows normal user to mount device $1 on mount point $2
# Use /etc/fstab entry :
# /tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto 0 0
# and directory /tmp/UFS/
# Both have to be created (as superuser for the /etc/fstab entry)
rm -f /tmp/UFS/drive /tmp/UFS/mountpoint
ln -s `realpath -s $1` /tmp/UFS/drive
ln -s `realpath -s $2` /tmp/UFS/mountpoint
mount /tmp/UFS/drive || mount /tmp/UFS/mountpoint
# The last statement should be a bit more subtle
# Trying both is generally not useful.
और विघटन के लिए
#!/bin/sh
# usage: usumount device dir
# author: babou 2013/05/17 on https://unix.stackexchange.com/questions/32008/mount-an-loop-file-without-root-permission/76002#76002
# Allows normal user to umount device $1 from mount point $2
# Use /etc/fstab entry :
# /tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto 0 0
# and directory /tmp/UFS/
# Both have to be created (as superuser for the /etc/fstab entry)
rm -f /tmp/UFS/drive /tmp/UFS/mountpoint
ln -s `realpath -s $1` /tmp/UFS/drive
ln -s `realpath -s $2` /tmp/UFS/mountpoint
umount /tmp/UFS/drive || umount /tmp/UFS/mountpoint
# One of the two umounts may fail because it is ambiguous
# Actually both could fail, with careless mounting organization :-)
निर्देशिका /tmp/UFS/लिंक को अलग करने और झड़प से बचने के लिए बनाई गई है। लेकिन उपयोगकर्ता स्थान में सहानुभूति कहीं भी हो सकती है, जब तक वे एक ही स्थान (एक ही पथ) में रहते हैं। /etc/fstabप्रवेश या तो कभी नहीं बदलता।
महत्वपूर्ण चेतावनी:
अच्छे सुरक्षा कारणों से माउंटिंग प्रतिबंधित है। इसे और अधिक लचीला बनाने से दुर्भावनापूर्ण सॉफ़्टवेयर के लिए दरवाजे खुल सकते हैं। मैं एक सुरक्षा विशेषज्ञ नहीं हूं और मैं आपको सलाह दूंगा कि आप दरवाजे बिल्कुल नहीं खोलना चाहिए ... विकल्प का उपयोग करके प्रतिबंधित कर सकते हैं कि फाइल सिस्टम के साथ क्या किया जा सकता है जो इस प्रकार माउंट किया जा सकता है। यदि कोई जानकार योगदानकर्ता सुरक्षा मुद्दों पर आगे टिप्पणी कर सकता है, तो यह उपयोगी हो सकता है।
माउंट किए गए फ़ाइल सिस्टम के उपयोग को प्रतिबंधित करने के लिए विभिन्न विकल्प उपलब्ध हैं, जैसे कि noexecबायनेरिज़ के निष्पादन को रोकता है, या nosuidइस प्रकार सुरक्षा में योगदान देता है। दरअसल, इन विकल्पों को विकल्प userया usersउपयोग किए जाने पर डिफ़ॉल्ट विकल्पों के रूप में जोड़ा जाता है, जो कि जरूरी है कि हम नीचे क्या करते हैं। इन चूक को ओवरराइड करने से पहले दो बार सोचें। http://en.wikipedia.org/wiki/Fstab
अन्य विकल्प आगे की सुरक्षा के लिए जोड़े जा सकते हैं। उदाहरण के लिए, प्रविष्टि owner में विकल्प /etc/fstab उपयोगकर्ताओं को केवल उन फ़ाइलों या उपकरणों से निपटने देगा जो उनके पास हैं। देखें man mount : विकल्पों की सूची के लिए http://linux.die.net/man/8/mount ।
इस /etc/fstabप्रविष्टि का उपयोग उपयोगकर्ता के माध्यम से भी प्रतिबंधित किया जा सकता है। डायरेक्टरी (या निर्देशिका) के उपयोगकर्ता समूह के स्वामित्व में सहानुभूति होती है।
व्याख्या
यह स्पष्टीकरण लिखने से पहले मैंने महसूस किया कि मैं उपरोक्त दो लिपियों के लिए चीजों को सरल बना सकता हूं। मैंने उनके बारे में अभी आंशिक रूप से नहीं सोचा क्योंकि मेरे पास थोड़ी अधिक जटिल समस्या है जिसे वे कुछ अतिरिक्त मशीनरी के बिना हल नहीं करते हैं। इस प्रकार मेरी व्याख्या थोड़ी अधिक जटिल होनी चाहिए, लेकिन मुझे यह सब स्क्रैच से फिर से लिखने की हिम्मत नहीं है।
मूल विचार /etc/fstabइसमें प्रविष्टियाँ बनाना है, जिसमें विकल्प शामिल है userया usersइसलिए कि कोई उपयोगकर्ता mountउस प्रविष्टि में निर्दिष्ट माउंटिंग को तर्क के रूप में कर सकता है जो फ़ाइल को माउंट किया जाए या माउंट पॉइंट का उपयोग करने के लिए (लेकिन मेरी समाप्ति में दोनों नहीं) ।
आपको एक उचित प्रविष्टि भी चाहिए umount(जो थोड़ी अलग समस्या है - नीचे देखें)। विकल्प userआमतौर पर बेहतर है usersक्योंकि यह umountउस उपयोगकर्ता के लिए अनुमति को प्रतिबंधित करता है जिसने फ़ाइल सिस्टम को माउंट किया है, जबकि usersवह सभी को अनुमति देगा। दुर्भाग्य से विकल्प userहमेशा काम नहीं करता है, और काम करने के लिए कुछ अन्य चरणों की आवश्यकता हो सकती है। यह माउंट के लिए विकल्प "उपयोगकर्ता" कार्य में चर्चा की गई है , umount के लिए नहीं ।
सबसे पहले आप /etc/fstabएक प्रविष्टि में जोड़ते हैं जैसे:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
और /tmp/UFS/driveजिस भी डिवाइस या फ़ाइल को माउंट करने की इच्छा हो, उसे एक आईएसओ लिंक सिस्टम की छवि वाली फ़ाइल के रूप में एक प्रतीकात्मक लिंक (या सिमलिंक) के रूप में उपयोग करें /home/johndoe/john-image-file.iso।
आप /tmp/UFS/mountpointजिस माउंट बिंदु का उपयोग करना चाहते हैं, उसे एक सिम्लिंक के रूप में भी परिभाषित करते हैं, कहते हैं /mnt/iso।
फिर आप john-image-file.isoकमांड के साथ माउंट कर सकते हैं :
$ mount /tmp/UFS/drive
यह मेरे मगिया लिनक्स पर पर्याप्त है, क्योंकि लूप उपकरणों का उपयोग अब निहित कर दिया गया है, और अब -o loopस्पष्ट रूप से उपयोग करने की आवश्यकता नहीं है । मुझे नहीं पता कि वह आज कितना सामान्य है। देखें कि
बढ़ते समय, मुझे लूप डिवाइस का उपयोग कब करना चाहिए?
यह माउंटिंग टेबल और कमांड में दिखाई देती है:
$ df | tail -1
/dev/loop0 5,1G 5,1G 0 100% /mnt/iso
$ tail -1 /etc/mtab
/dev/loop0 /mnt/iso udf ro,nosuid,nodev,noexec,relatime,utf8 0 0
$ mount | tail -1
/home/johndoe/john-image-file.iso on /mnt/iso type udf (ro,nosuid,nodev,noexec,relatime,utf8)
$ tail -1 /proc/mounts
/dev/loop0 /mnt/iso udf ro,nosuid,nodev,noexec,relatime,utf8 0 0
$ tail -1 /proc/self/mountinfo
46 22 7:0 / /mnt/iso rw,nosuid,nodev,noexec,relatime - udf /dev/loop0 ro,utf8
$ tail -1 /proc/self/mountstats
device /dev/loop0 mounted on /mnt/iso with fstype udf
माउंटिंग ऑपरेशन किसी भी फाइल या ड्राइव के लिए काम कर सकता है और केवल /tmp/UFS/driveउस फाइल से या ड्राइव के लिए डिवाइस के लिए एक प्रतीकात्मक लिंक बनाने की आवश्यकता होती है । बेशक, एक और नाम और स्थान प्रतीकात्मक लिंक के लिए चुना जा सकता है, जब तक कि यह कभी नहीं बदलता है।
फ़ाइल को खारिज करना प्रतीकात्मक लिंक के उचित उपयोग पर उसी तरह निर्भर करता है। कुछ हार्ड ड्राइव के अनुरूप एक सामान्य डिवाइस के मामले में, आप बस उसी लिंक का उपयोग करते हैं।
हालाँकि, फ़ाइल सिस्टम की छवि वाली फ़ाइलों को एक विशेष प्रकार के डिवाइस के माध्यम से माउंट किया जाता है जिसे लूप डिवाइस कहा जाता है, जब आप फ़ाइल को माउंट करते हैं तो स्वचालित रूप से आवंटित किया जाता है।
फ़ाइल को हटाने के लिए, आपको लूप डिवाइस को संदर्भित करना होगा, न कि फ़ाइल को। इसलिए आपको /etc/fstabएक प्रविष्टि की आवश्यकता है जो कि /etc/mtabयहां /dev/loop0, और माउंट बिंदु, में उपयोग किए गए दोनों लूप डिवाइस से मेल खाती है
/mnt/iso।
लूप डिवाइस अलग-अलग होने के कारण आप अग्रिम में ऐसी प्रविष्टि नहीं बना सकते, क्योंकि उन्हें गतिशील रूप से आवंटित किया गया है। ध्यान दें कि एक निश्चित लूप डिवाइस का उपयोग करना भी संभव है, लेकिन यह अन्य तरीकों से असुविधाजनक है। देखें
http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a-regular-user/ ( इस ब्लॉग वास्तव में जबाब यहाँ प्रेरित )।
हालांकि, आप लूप डिवाइस का नाम पा सकते हैं, यहां /dev/loop0, सिस्टम से पूछकर, जैसे हमने कई अलग-अलग तरीकों से ऊपर किया था। फिर हमारी मानक /etc/fstabप्रविष्टि को सही लूप डिवाइस को सिम्लिंक के माध्यम से /tmp/UFS/drive, और माउंट बिंदु के साथ पहले से किए गए बिंदु के रूप में बनाया जा सकता है /tmp/UFS/mountpoint। ऐसा किया गया, फ़ाइल को निम्न में से किसी भी आदेश के साथ विघटित किया जा सकता है (बशर्ते कि कोई अस्पष्टता न हो /etc/mtab, जो एक अलग समस्या है):
$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint
चूँकि दोनों सिम्बलिंक की आवश्यकता तभी होती है जब कमांड जारी किए जाते हैं, उन्हें गतिशील रूप से बदला जा सकता है। तो हमारी एकल /etc/fstabप्रविष्टि किसी भी संख्या में फ़ाइलों को माउंट करने की अनुमति देती है, और उन्हें बिना किसी विशेषाधिकार के किसी भी क्रम में umounting।
अन्य संदर्भ:
mountबाइनरी को SUID की अनुमति की आवश्यकता नहीं है, तो आपको समस्याओं के बिना फ़ेकरूट का उपयोग करने में सक्षम होना चाहिए ।