गैर-सुपरसर्स को किसी भी फाइल सिस्टम को माउंट करने की अनुमति कैसे दें?


47

क्या लिनक्स पर सुपरसुसर विशेषाधिकारों के बिना किसी भी फाइल सिस्टम को माउंट करने के लिए कुछ विशेष उपयोगकर्ताओं (जैसे समूह के सदस्य) को अनुमति देना संभव है ?

एक अन्य सवाल यह हो सकता है कि "किस तरह से उपयोगकर्ता बढ़ते फाइल सिस्टम द्वारा किसी सिस्टम को नुकसान पहुंचा सकता है?"


हो सकता हैgvfs-mount-d /dev/sdX
KrisWebDev

जवाबों:


44

युगल दृष्टिकोण हैं, उनमें से कुछ ज्यादातर सुरक्षित हैं, अन्य बिल्कुल नहीं।

असुरक्षित तरीका

किसी भी उपयोग को चलाने दें mount, जैसे, sudo के माध्यम से। आप उन्हें जड़ भी दे सकते हैं; एक ही बात है। उपयोगकर्ता एक फाइल सिस्टम को तेज रूट कॉपी के साथ माउंट कर सकता है - bashजो कि तुरंत रूट देता है (संभवतया बिना किसी लॉगिंग के, इस तथ्य से परे कि mountवह चला गया था)।

वैकल्पिक रूप से, एक उपयोगकर्ता अपनी खुद की फाइल /etcकॉपी अपने ऊपर रख सकता है , जिसमें उसकी खुद की कॉपी हो, /etc/shadowया /etc/sudoersतो रूट प्राप्त suकर सकता है sudo। या संभवतः mount --bindउन दो फाइलों में से एक पर बाँध-माउंट ( )। या में एक नई फ़ाइल /etc/sudoers.d

इसी तरह के हमलों को /etc/pam.dकई अन्य स्थानों पर खींचा जा सकता था ।

याद रखें कि फाइल सिस्टम को एक डिवाइस पर भी नहीं होना चाहिए, -o loopएक फाइल को माउंट करेगा जो कि उपयोगकर्ता के स्वामित्व (और इस प्रकार परिवर्तनीय) है।

ज्यादातर सुरक्षित तरीका है: udisks या समान

उपयोगकर्ताओं को हटाने योग्य मीडिया को माउंट करने की अनुमति देने के लिए विभिन्न डेस्कटॉप वातावरण वास्तव में पहले ही इसका समाधान बना चुके हैं। वे /mediaकेवल उपनिर्देशिका में बढ़ते हुए और कर्नेल विकल्पों के माध्यम से सेट-उपयोगकर्ता / समूह-आईडी समर्थन को बंद करके काम करते हैं। यहाँ विकल्पों में शामिल हैं udisks, udisks2, pmount, usbmount,

यदि आपको चाहिए, तो आप कुछ ऐसा ही करने के लिए अपनी खुद की स्क्रिप्ट लिख सकते हैं, और इसे sudo के माध्यम से लिख सकते हैं — लेकिन आपको इस स्क्रिप्ट को लिखने के लिए वास्तव में सावधान रहना होगा। यदि आप नहीं चाहते कि आपके उपयोगकर्ता को sudo को याद रखना है, तो आप स्क्रिप्ट में कुछ ऐसा कर सकते हैं:

#!/bin/bash
if [ $UID -ne 0 ]; then       # or `id -u`
    exec sudo -- "$0" "$@"
fi

# rest of script goes here 

किसी दिन सुरक्षित होगा: उपयोगकर्ता नामस्थान

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

इसके अलावा, कई डिस्ट्रो कर्नेल के पास (सुरक्षा कारणों से) बिना नाम वाले उपयोगकर्ताओं को उपयोगकर्ता नामस्थानों का उपयोग करने की अनुमति नहीं देने के लिए डिफ़ॉल्ट है; उदाहरण के लिए डेबियन की एक kernel.unprivileged_userns_cloneचूक है 0. अन्य डिस्ट्रोस की समान सेटिंग्स हैं, हालांकि अक्सर थोड़ा अलग नामों के साथ।

उपयोगकर्ता नामस्थान के बारे में मुझे जो सबसे अच्छा दस्तावेज पता है , वह ऑपरेशन में एक LWN लेख नामस्थान है, भाग 5: उपयोगकर्ता नामस्थान

अभी के लिए, मैं udisks2 के साथ जाऊँगा।


आपके उत्तर के लिए धन्यवाद! BTW, क्या आप यह मानते हैं कि समूह में उपयोगकर्ताओं को mountरूट सिस्टम की तरह फाइलसिस्टम माउंट करने में सक्षम होना सुरक्षित है? मैं आपके द्वारा लिंक किए गए नामस्थान दस्तावेज़ को पढ़ूंगा, और इस माउंट समूह चीज़ को लागू करने का प्रयास करूंगा, कम से कम एक अभ्यास के रूप में।

@gkya मुझे आशा है कि मेरे पहले खंड ने यह स्पष्ट कर दिया है कि अनुमति देना (क) बिना नाशिद [और नित्वा] को मजबूर किए बिना एक फाइलसिस्टम को बढ़ाना; या (बी) एक मनमाने स्थान पर मूल रूप से मूल दे रहा है। यदि आप किसी को मनमाना mountकमांड चलाने की अनुमति देते हैं, तो यह रूट देने के समान है।
derobert

एक और जवाब पर प्रत्येक "टिप्पणी पर कई विभाजन के साथ आपके" कई हटाने योग्य ड्राइव से @gkya, मुझे लगता है कि आप "udisks या समान" दृष्टिकोण चाहते हैं।
derobert

1
@derobert जब से आप यूजर नेमस्पेस के बारे में बात कर रहे थे, आप बेल लैब्स (यह उसी लोगों द्वारा बनाया गया UNIX का उत्तराधिकारी है) से प्लान 9 की जांच कर सकते हैं। यह फ़ाइल ट्री को प्रति-प्रक्रिया नामस्थान के रूप में मॉडल करता है (और रूट जैसी कोई चीज नहीं है)। आकर्षक सामान।
स्ट्रूजी

1
@ ओमन ओके, मैंने इसे अपडेट कर दिया है। अगर कुछ भी हो, तो मुझे लगता है कि इसके लिए यूजर नेमस्पेस का उपयोग करना भविष्य में और भी अच्छा लगता है।
derobert

16

आप इसे कर सकते हैं, लेकिन आपको इस प्रविष्टि में /etc/fstabध्वज userको जोड़ने के लिए इच्छित फ़ाइल सिस्टम के अनुरूप प्रविष्टि को संशोधित करने की आवश्यकता है । गैर-विशेषाधिकार वाले उपयोगकर्ता तब इसे माउंट करने में सक्षम होंगे।

man mountअधिक जानकारी के लिए देखें।


1
यह एकमात्र उत्तर है जिसे मैं गुग्लिंग के साथ पा सकता हूं। मुझे पता चला है कि FreeBSD पर, कोई उपयोगकर्ताओं को चर (अर्थात् vfs.usermount) सेट करने के साथ फाइल सिस्टम को माउंट करने की अनुमति दे सकता है । मुझे sth चाहिए। उसी के अनुरूप। मैं प्रत्येक पर कई विभाजनों के साथ कई हटाने योग्य ड्राइव का उपयोग करता हूं और उनमें से प्रत्येक के लिए एक दर्जन या दो प्रविष्टियों को fstab में जोड़ना बोझिल होगा।

बदसूरत वर्कअराउंड udevप्रविष्टियों को प्रबंधित करने के लिए हो सकता है क्योंकि नए उपकरण दिखाई देते हैं और गायब हो जाते हैं।
जेस्टर

मुझे यह मिंट या उबंटू पर काम करने के लिए नहीं मिला है। हां, डिफ़ॉल्ट उपयोगकर्ता खाता बिना रूट के माउंट हो सकता है, लेकिन 'मानक' / 'डेस्कटॉप' उपयोगकर्ता इसे माउंट नहीं कर सकते।
जॉनी क्यों

6

यहाँ विन्यस्त करने के लिए विकी है polkit के लिए नियमों को udisks / udisks2 क्रम में गैर-मूल से विभाजन (जैसे उपयोगकर्ता) समूह माउंट करने के लिए।

नीचे दिए गए कोड को /etc/polkit-1/rules.d/50-udisks.rules पर सहेजें

polkit.addRule(function(action, subject) {
  var YES = polkit.Result.YES;
  var permission = {
    // only required for udisks1:
    "org.freedesktop.udisks.filesystem-mount": YES,
    "org.freedesktop.udisks.filesystem-mount-system-internal": YES,
    "org.freedesktop.udisks.luks-unlock": YES,
    "org.freedesktop.udisks.drive-eject": YES,
    "org.freedesktop.udisks.drive-detach": YES,
    // only required for udisks2:
    "org.freedesktop.udisks2.filesystem-mount": YES,
    "org.freedesktop.udisks2.filesystem-mount-system": YES,
    "org.freedesktop.udisks2.encrypted-unlock": YES,
    "org.freedesktop.udisks2.eject-media": YES,
    "org.freedesktop.udisks2.power-off-drive": YES,
    // required for udisks2 if using udiskie from another seat (e.g. systemd):
    "org.freedesktop.udisks2.filesystem-mount-other-seat": YES,
    "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES,
    "org.freedesktop.udisks2.eject-media-other-seat": YES,
    "org.freedesktop.udisks2.power-off-drive-other-seat": YES
  };
  if (subject.isInGroup("users")) {
    return permission[action.id];
  }
});

मान लें कि आप "उपयोगकर्ता" समूह में हैं, विभाजन को माउंट करने के लिए निम्न आदेश का उपयोग कर रहे हैं (कोई ज़रूरत नहीं है sudo)।

# udisks2
udisksctl mount --block-device /dev/sda1

# udisks
udisks --mount /dev/sda1

2
जाने के रास्ते की तरह लगता है लेकिन मेरे लिए काम नहीं किया।
स्टीफन गौरिचोन

5

1 जहाँ देखो वहाँ काम करता है

एक्सूबंटू पर यह यूएसबी मास स्टोरेज, हार्ड डिस्क विभाजन, सीडी / डीवीडी और शायद अधिक को माउंट और बेदखल करने के लिए बॉक्स से बाहर काम करता है।

चलिए मान लेते हैं कि पॉलिसीबिट का उपयोग करके उबंटू ने जो समाधान चुना, वह पर्याप्त सुरक्षित है।

2 संबंधित भाग चुनें

डेबियन 8.3 पर एक्सएफसीई पर मुझे उपयोगकर्ता को पासवर्ड के बिना थूनर से फाइल सिस्टम को माउंट करने और बाहर निकालने की अनुमति देने की आवश्यकता थी। मेरे लिए जो काम किया है वह उबंटू से एक अनुमति फ़ाइल को चेरी करना है।

नीचे दी गई पंक्तियों को रूट के रूप में एक फ़ाइल में जोड़ना /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pklaचाहिए जिसे ट्रिक करना चाहिए:

[Mounting, checking, etc. of internal drives]
Identity=unix-group:admin;unix-group:sudo
Action=org.freedesktop.udisks.filesystem-*;org.freedesktop.udisks.drive-ata-smart*;org.freedesktop.udisks2.filesystem-mount-system;org.freedesktop.udisks2.encrypted-unlock-system;org.freedesktop.udisks2.filesystem-fstab;
ResultActive=yes

3 लाभ!

(क्या मैंने वास्तव में उबंटू 16.04 पर एक ही नाम वाली फ़ाइल से कुछ अधिक लिया था और यह मेरे लिए काम करता है। यदि आपको इसकी आवश्यकता है, तो यह ज्यादातर https://gist.github.com/kafene/5b4aa4eb4dd9229fa2e73 की सामग्री की तरह दिखता है) )


केवल यह सिस्टम की तरह डेबियन में काम करता है, पता नहीं क्यों नियम डाल रहा है / etc / काम नहीं किया।
अनवर

डेबियन खिंचाव पर काम नहीं करता है।
फिलिप लुडविग

1
XFCE पर डेबियन बस्टर पर काम करता है! धन्यवाद!
मैक्सवेल लेइट

3

आप कमांड sudoचलाने के लिए उपयोगकर्ताओं के एक सेट को अनुमति देने के लिए कॉन्फ़िगर कर सकते हैं mount

अद्यतन करें : आप बढ़ते हुए सिस्टम को कैसे नुकसान पहुंचा सकते हैं? उदाहरण के लिए, आप एक फाइल सिस्टम पर एक सेतु रूट खोल बना सकते हैं जिसे आप रूट विशेषाधिकार प्राप्त करने के लिए माउंट और निष्पादित कर सकते हैं।


मैंने इसके बारे में सोचा है, लेकिन क्या इसके साथ उपयोगकर्ता को कमांड चलाने की आवश्यकता नहीं होगी sudo? इसके अलावा, क्या यह रूट सिस्टम फाइल सिस्टम को परदे के पीछे से केवल इस विधि के साथ बढ़ते हुए नहीं है?

हां, उन्हें सुडो की जरूरत होगी और हां यह रूट के नाम से चलेगा। पहला मुद्दा उर्फ हल, तुम सकता है करने के लिए mountकरने के लिए sudo mountया एक आवरण स्क्रिप्ट का उपयोग।
जस्टर

रूट यूजर की एजेंसी के बिना फाइलसिस्टम को माउंट करने के लिए मुझे क्या करना होगा। इस एजेंसी को किसी भी चीज़ से जोड़ना ऐसा नहीं है जो मैं आखिर हूँ।

ध्यान दें कि यहां तक ​​कि userfstab को जोड़ने से ही काम होता mountहै क्योंकि सेतु जड़ है। कर्नेल रूट या CAP_SYS_ADMINक्षमता के लिए जाँच कर रहा है ताकि आप वास्तव में रूट को शामिल न कर सकें।
जस्टर

आप कॉन्फ़िगर कर सकते हैं, कैसे? यह मदद नहीं करता है।
नाज़ोलिलो

0

कोष्ठक में आपके प्रश्न का उत्तर देने के लिए, चूंकि फाइलसिस्टम फ़ाइलों के लिए एक प्लेसहोल्डर है, तो उपयोगकर्ता संभावित रूप से उस फाइल सिस्टम पर हानिकारक संचालन कर सकता है, जैसे कि फाइलें हटाना।

अन्य 2 प्रश्नों का संक्षेप में मैं यह कहूंगा:

  • fstabबूट समय स्थायी भंडारण पर बढ़ते के लिए महान है । जब आप USB ड्राइव में प्लग करना चाहते हैं या कभी-कभी कुछ नेटवर्क शेयर माउंट करना चाहते हैं तो यह बहुत अच्छा नहीं है।

  • sudo mountयह भी ठीक है अगर आप ubuntu * सिस्टम पर हैं। आपको अभी भी एक पासवर्ड टाइप करना होगा।

  • udev उबंटू * सिस्टम में यूएसबी स्टिक, कैमरा और फ्लैश कार्ड जैसी बढ़ती चीजों का ध्यान रखेंगे (लेकिन कम उपयोगकर्ता के अनुकूल डिस्ट्रोस जैसे कि डेबियन, स्लैकवेयर आदि) नहीं

मैं जोड़ूंगा, ऐतिहासिक रूप से, कुछ उपयोगकर्ताओं (या समूहों) को सामान करने का अधिकार देने का यूनिक्स तरीका sudoersफ़ाइल के माध्यम से है।

वहाँ इसे बाहर का उपयोग करने के लिए कई गाइड हैं तो मैं किसी भी विशेष का सुझाव नहीं दूंगा। मैं कहूंगा कि मैंने इसके बारे में जानने के लिए लिनक्स प्रलेखन परियोजना वेबसाइट का उपयोग किया।

इसके साथ और क्या है sudoersकि आप डिवाइस और शेयरों को पारदर्शी रूप से माउंट कर सकते हैं - यहां तक ​​कि अगर आप ऐसा करने के लिए चुनते हैं तो भी पासवर्ड प्रदान किए बिना (अतिरिक्त सावधान रहें)।

मैं आमतौर पर एक नियंत्रण वातावरण में क्या करता हूं क्या मैं sudoersकुछ समूहों के उपयोगकर्ताओं को पारदर्शी तरीके से नेटवर्क शेयर माउंट करने की अनुमति देने के लिए फ़ाइल का उपयोग करता हूं । इसलिए मैं कमांड mount.nfsऔर mount.cifssudoers फ़ाइल में जोड़ देता हूं , जो "जैसे नेटवर्क फ़ाइल सर्वर से उपयोगकर्ता के होम फ़ोल्डर को माउंट करने की अनुमति देता है, जब उपयोगकर्ता क्लाइंट टर्मिनल पर लॉग ऑन करता है" और उसी तरह स्टड करता है।


1
यदि आप उपयोगकर्ता के लॉगिन पर अपने होम फोल्डर को माउंट करने के लिए sudo का उपयोग कर रहे हैं, तो आपको ऑटोफॉक्स को देखना चाहिए।
derobert

मैं इनका एक साथ उपयोग करता हूं; मैं यह पता नहीं लगा सका कि क्लाइंट पीसी पर स्थान के लिए, फाइलरवर से autofsमाउंट करने के लिए अपने दम पर कैसे उपयोग किया जाए । /home/$USER/home/$USER/fromFS/
nass

0

guestmount कामचलाऊ चालबाजी

sudo apt-get install libguestfs-tools

# Workarounds for Ubuntu 18.04 bugs.
# https://serverfault.com/questions/246835/convert-directory-to-qemu-kvm-virtual-disk-image/916697#916697
sudo rm -rf /var/cache/.guestfs-*
echo dash | sudo tee /usr/lib/x86_64-linux-gnu/guestfs/supermin.d/zz-dash-packages
sudo chmod +r /boot/vmlinuz-*

# Create a test image.
mkdir sysroot
dd if=/dev/urandom of=sysroot/myfile bs=1024 count=1024
virt-make-fs --format=raw --type=ext2 sysroot sysroot.ext2

# Mount it, have fun, unmount!
mkdir -p mnt
# /dev/sda becuase we have a raw filesystem.
guestmount -a sysroot.ext2.qcow2 -m /dev/sda mnt
cmp sysroot/myfile mnt/myfile
guestunmount mnt

पर निर्भर करता है:

  • फाइल सिस्टम के उपयोगकर्ता कार्यान्वयन
  • फ्यूज

डॉक्स: http://libguestfs.org/guestmount.1.html

Ubuntu 18.04 पर परीक्षण किया गया, libguestfs-tools 1: 1.36.13-1ubuntu3।

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