रूट अनुमति के बिना छवि फ़ाइल कैसे माउंट करें?


41

क्या मैं रूट अनुमति के बिना फाइल सिस्टम इमेज माउंट कर सकता हूं? आम तौर पर मैं करता:

mount -o loop DISK_IMAGE FOLDER

सुडो का उपयोग किए बिना या सूट को सेट mountकरने के लिए, क्या ऐसा करने का कोई उपयुक्त तरीका है?

मुझे पता है कि मैं fusermountकुछ आईएसओ छवियों के साथ उपयोग कर सकता हूं , लेकिन यह बहुत सीमित है, यहां तक ​​कि आईएसओ छवियों के लिए भी, मेरी कुछ छवियों को माउंट नहीं किया जा सकता है, लेकिन mountहमेशा काम करता है।


1
यदि आपके mountबाइनरी को SUID की अनुमति की आवश्यकता नहीं है, तो आपको समस्याओं के बिना फ़ेकरूट का उपयोग करने में सक्षम होना चाहिए ।
साकिन

5
@faif fakerootयहां मदद करने के लिए नहीं जा रहा है: यह दिखावा करता है कि फ़ाइल स्वामित्व अलग है, लेकिन यह आपको अनुमति नहीं दे सकता है जो आपके पास नहीं है, जैसे कि mount(2)जब आप रूट नहीं होते हैं तो कॉल करें ।
गिल्स एसओ- बुराई को रोकना '

@faif माउंट बिल्कुल जड़ अनुमति की आवश्यकता नहीं। संभावित परिणाम अन्यथा बहुत विनाशकारी होंगे।
शादुर

जवाबों:


25

आप कुछ भी माउंट नहीं कर सकते हैं जिसे व्यवस्थापक ने किसी भी तरह से आपको माउंट करने की अनुमति नहीं दी है। केवल रूट कॉल कर सकते हैं mountसिस्टम कॉल। इसका कारण यह है कि बढ़ते माध्यम से विशेषाधिकारों को बढ़ाने के कई तरीके हैं, जैसे कि किसी सिस्टम स्थान पर कुछ बढ़ाना, फ़ाइलें किसी अन्य उपयोगकर्ता से संबंधित होना और प्रोग्राम का शोषण करना जो फ़ाइल स्वामित्व पर निर्भर करता है, सेतु फ़ाइलों को बनाना, या बग का शोषण करना फाइलसिस्टम ड्राइवरों में।

mountआदेश setuid जड़ है। लेकिन यह आपको केवल उन चीजों को माउंट करने देता है, जिनका उल्लेख किया गया है fstab

fusermountआदेश setuid जड़ है। यह आपको केवल FUSE चालक के माध्यम से चीजों को माउंट करने देता है, और इस तरह से मनमाने ढंग से स्वामित्व या अनुमतियों के साथ फाइल प्रदान करने के लिए आपकी क्षमताओं को प्रतिबंधित करता है (अधिकांश सेटअप के तहत, FUSE माउंट पर सभी फाइलें आपके अधीन हैं)।

आपका सबसे अच्छा शर्त एक FUSE फाइल सिस्टम को खोजना है जो आपकी डिस्क छवि को पढ़ने में सक्षम है। आईएसओ 9660 छवियों के लिए, फ्यूज़िसो और यूएमफ्यूज़ के आईएसओ 9660 समर्थन ( fuseiso9660पैकेज के रूप में डेबियन के तहत उपलब्ध ) दोनों का प्रयास करें ।


+1 sudoयह समझाने के लिए कि (हालांकि इसमें SUID बिट सेट है) केवल fstabप्रविष्टियों को माउंट करने की अनुमति देता है । इस से यह इस प्रकार है कि (ए) SUID बिट समझ में आता है, क्योंकि एक नियमित उपयोगकर्ता fstabप्रविष्टियों को माउंट कर सकता है (और mountsyscall प्रदर्शन करने की अनुमति है ) और (b) यह mountउपयोगिता का प्रतिबंध है कि केवल fstabप्रविष्टियों को गैर द्वारा माउंट किया जा सके- रूट उपयोगकर्ता।
डेविड

यदि आप फ्लॉपी डिस्क छवियों के साथ काम कर रहे हैं, तो आप केवल छवि पर डेटा लिखने के लिए mtools का उपयोग कर सकते हैं। देखें: stackoverflow.com/questions/11202706/…
गाइल्स बाथगेट

@ डेविड, क्या अब यह बदल गया है? मेरे पास एकमात्र प्रविष्टियां fstabरूटफुट और बूट के लिए हैं। USB ड्राइव माउंट करने के लिए मैं lsblkऔर उसके mountअनुसार देखता हूं । मुझे ऐसा करने में कोई समस्या नहीं हुई।
sherrellbc

16

डेबियन विकी ऐसा करने के कई तरीके को दर्शाता है। यहाँ एक तरीका है। (इसके लिए udisks2पैकेज की आवश्यकता है ।)

प्रथम

$ udisksctl loop-setup -f $PATH_TO_IMAGE
Mapped file $PATH_TO_IMAGE as /dev/loop0.

/dev/loop0 निम्नलिखित के लिए उपयोग किया जाएगा।

लेकिन अगर udisksctl loop-setupकमांड वापस आ गया होता /dev/loop1, तो /dev/loop1निम्न के लिए उपयोग किया जाता।

यदि लूपबैक डिवाइस (पहले बनाया गया) स्वचालित रूप से माउंट नहीं है, तो आपको चलाने की आवश्यकता हो सकती है:

$ udisksctl mount -b /dev/loop0
Mounted /dev/loop0 at /media/$USER/$IMAGE_NAME

आप डिस्क पर फ़ाइलों को देख सकते हैं

$ ls -l /media/$USER/$IMAGE_NAME/

जब आप पूरा कर लें, तो आप इसे अनमाउंट कर सकते हैं

$ udisksctl unmount -b /dev/loop0
Unmounted /dev/loop0.

और यदि आवश्यक हो:

$ udisksctl loop-delete -b /dev/loop0

1
udvil अधिक सुविधाजनक विकल्प था
अनवर

यह Ubuntu 16.04 पर काम किया, लेकिन कैसे? यह लूप उपकरणों का उपयोग करने के लिए लगता है जो मैं sudoकेवल होने की उम्मीद करूंगा । सेटिड या संबंधित शेंनिगन ?
सिरो सेंटिल्ली 新疆 i iro i 事件 '10

1
@CiroSantilli 新疆 改造 ill ill ill sure मुझे यकीन नहीं है। उपकरण का स्रोत कोड यहाँ है । यह एक डेमन से बात करने के लिए DBus का उपयोग करने के लिए लगता है, लेकिन मैं DBus या Glib कि अच्छी तरह से पता नहीं है।
निक ओडेल

1
ध्यान दें कि -rविकल्प का udisksctl loop-setupअर्थ केवल-पढ़ने के लिए है, जिसे ओपी ने नहीं पूछा था, इसलिए इसे लिखने योग्य माउंट प्राप्त करने के लिए छोड़ दें।
पेले निल्सन

15

आप कई प्रकार की डिस्क छवियों को माउंट करने के लिए FUSE मॉड्यूल गेस्टमाउंट का उपयोग कर सकते हैं। यह अतिथि एफएस प्रणाली का हिस्सा है और इसे रूट अनुमति की आवश्यकता नहीं होगी।

पर एक नजर डालें आदमी पेज अधिक जानकारी के लिए।

उदाहरण

1. एक विशिष्ट विंडोज अतिथि के लिए जिसका पहला विभाजन पर मुख्य फाइल सिस्टम है:

guestmount -a windows.img -m /dev/sda1 --ro /mnt

2. एक विशिष्ट लिनक्स अतिथि के लिए जिसमें पहले विभाजन पर / बूट फाइल सिस्टम है, और एक तार्किक वॉल्यूम पर रूट फाइल सिस्टम:

guestmount -a linux.img -m /dev/VG/LV -m /dev/sda1:/boot --ro /mnt

1
वार्षिक रूप से, उबंटू में अतिथि-कक्ष चलाने के लिए अब कर्नेल छवियों को पढ़ने के लिए कुछ रूट एक्सेस की आवश्यकता होती है: Bugs.launchpad.net/ubuntu/+ource/linux/+bug/759725
Clément

@ क्लेमेंट मैं यह समझना चाहूंगा कि libguestfs को अपनी नौकरी के लिए एक कर्नेल इमेज की आवश्यकता क्यों है ...
Ciro Santilli Sant would would would ''

1
@CiroSantilli 新疆 改造 ill ill gu gu क्योंकि libguestfs एक qemu वर्चुअल मशीन के अंदर एक न्यूनतम लिनक्स सिस्टम शुरू करके रूट की आवश्यकता से बचते हैं (कोई भी रूट के बिना qemu वर्चुअल मशीन शुरू कर सकता है)। उस मशीन को बूट करने के लिए, यह कुछ कर्नेल और initrd की आवश्यकता है।
जोश

3

जिस तरह /etc/fstabसे 'उपयोगकर्ता' पैरामीटर के साथ आईएसओ के लिए एक प्रविष्टि जोड़ना संभव होगा , जैसे

/test.iso /mnt/iso auto defaults,user 0 1

लेकिन आपको इस फ़ाइल को संपादित करने के लिए आमतौर पर रूट एक्सेस की आवश्यकता होती है, इसलिए यह बहुत उपयोगी नहीं है।


2

रूट विशेषाधिकार के बिना एक सामान्य उपयोगकर्ता के रूप में जो भी आप चाहते हैं, उसे कम या ज्यादा माउंट करना वास्तव में बहुत आसान है, बशर्ते सही प्रविष्टि बनाई गई हो /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।

अन्य संदर्भ:


जब fstab प्रविष्टियाँ सिम्बलिंक की ओर इशारा करती हैं, तो क्या केवल सिम्बल बनाकर, रूट के बिना कुछ भी माउंट करने के लिए उनका शोषण नहीं किया जा सकता है? अप्रत्यक्ष रूप से, क्या यह mountहर सामान्य उपयोगकर्ता के लिए सिर्फ कमांडिंग कमांड नहीं है ?, और इसलिए सुरक्षा से जुड़े मुद्दे? यदि मैं गलत हूं तो मुझे सही करों।
Bharat G

और जीएनयू / लिनक्स डिस्ट्रोस (डेबियन जेसी कहते हैं) के हाल के संस्करण एक gui लॉगिन प्रदान नहीं करेंगे जब यह fstab में एक अमान्य प्रविष्टि का पता लगाता है। यदि लॉगस्टब deviceका mountpointखंड मान्य प्रविष्टि के लिए इंगित नहीं करता है , तो यह लॉगिन सत्र को सांत्वना देने के लिए वापस आता है । उपयोगकर्ता को कंसोल सत्र के माध्यम से लॉगिन करना होगा startxऔर स्पष्ट रूप से प्रदर्शन प्रबंधक शुरू करना होगा।
Bharat G

0

पैकेज libguestfs-tools-c में गेस्टमाउंट कमांड है

mkdir dvd    
guestmount -a image.iso -r -i dvd 

df इमेज दिखाएगा ।iso मुहिम शुरू की

df

हमारे पास है:

guestunmount dvd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.