क्या Vim sudo के साथ संयोजन में उपयोग करना सुरक्षित है?


25

जैसा कि इस लिंक पर बताया गया है , sudoचित्रमय अनुप्रयोग के साथ उपयोग करना उचित नहीं है । तदनुसार, मैं के साथ उपयोग करने के लिए प्रवृत्ति है ।geditvimsudo

हाल ही में मैंने देखा कि मेरे ~/.viminfoस्वामित्व में उबंटू 16.04 (ज़ेनियल ज़ेरुस) की एक काफी ताज़ा स्थापना थी, इसलिए इसने मुझे आश्चर्यचकित किया था कि क्या विम को ग्राफ़िकल माना जाता है या अगर इनवॉइस करने के साथ कुछ अन्य समस्या है sudo vim। खुद के माध्यम से स्वामित्व बदलने के बाद:

sudo find $HOME -not -user $USER -exec chown $USER:$(id -g) {} +

और बाद में sudo vimमैं ~/.viminfo रूट के स्वामित्व में असमर्थ था । हालाँकि, मुझे यकीन है कि यह हाल ही में रूट के स्वामित्व में था।

क्या आह्वान करना अनुचित है sudo vim?



1
आप बिना :w !sudo tee %
सूडो के भी वीम का

जवाबों:


22

हां, यह सुरक्षित है।

इसके साथ समस्या sudo geditयह है कि GUI एप्लिकेशन कुछ फ़ाइलों का उपयोग करते हैं, जैसे कि ~/.cache/dconf, और उन्नत होने के बाद geditवह फ़ाइल रूट-स्वामित्व वाली हो जाती है। खैर, उस विशेष फ़ाइल में जीयूआई अनुप्रयोगों के लिए उपयोगकर्ता-विशिष्ट सेटिंग्स शामिल हैं, जिसमें डेस्कटॉप भी शामिल है, इसलिए यदि सिस्टम उन सेटिंग्स को नहीं पढ़ सकता है - यह खराब है। IIRC एक उपयोगकर्ता एक विशेष डेस्कटॉप शुरू नहीं कर सकता है। उपयोगकर्ता का हालिया फ़ाइल डेटा recently-used.xbelभी प्रभावित होता है।

दूसरी ओर, विम को यह समस्या नहीं है। यह कोई GUI से संबंधित डेटाबेस का उपयोग नहीं करता है और इसमें कुछ भी नहीं डालता है recently-used.xbel। यह केवल कंसोल के उद्देश्य से बनाया गया था, हालांकि जीवीएम भी मौजूद है। वास्तव में, कुछ प्रणालियों पर विम आपके संपादक का एकमात्र विकल्प है। तो यह एक ही समस्याओं का कारण नहीं होने के आधार पर gedit से अधिक सुरक्षित है। आप अभी भी दोनों मामलों में रूट के रूप में संपादन कर रहे हैं, इसलिए आप अनुचित संपादन के साथ समस्याएं पैदा कर सकते हैं।

इस ब्लॉग पोस्ट के अनुसार :

पहली बार जब आप vim का उपयोग करते हैं, तो फ़ाइल ~/.viminfoबनाई जाती है, और यदि आप sudo vimपहली बार किसी नए सिस्टम पर इसे इंस्टॉल करने के बाद vim का उपयोग करते हैं, तो अनुमतियों के ~/.viminfoपास डिफ़ॉल्ट उपयोगकर्ता के बजाय रूट करने के लिए स्वामी सेट होगा।

हालांकि लेखक यह बताता है कि यह मुद्दों को जन्म दे सकता है, कुछ भी जटिल नहीं है - बस chownअपने आप को फ़ाइल वापस।

यह भी देखें:


6
ध्यान दें कि विम एक बहु-उपयोगकर्ता प्रणाली पर सुरक्षित नहीं है जहाँ आप अन्य उपयोगकर्ताओं की प्रशासनिक अनुमतियों को सीमित करने का प्रयास कर रहे हैं। एक उपयोगकर्ता sudo vimरूट के रूप में चल रहे विम की एक प्रति प्राप्त करने के लिए उपयोग कर सकता है, फिर :!/bin/shएक रूट शेल प्राप्त करने के लिए।
मार्क

3
@ मार्क और क्या उपयोगकर्ता को केवल करने से रोकता है sudo /bin/sh? व्यावहारिक रूप से, यदि उपयोगकर्ता के पास पहले से ही रूट एक्सेस है, तो उन्हें विस्तृत ट्रिक्स का उपयोग करने की आवश्यकता नहीं है।
सेर्गेई कोलोडियाज़नी

7
/etc/sudoersफ़ाइल। आपको करने की आवश्यकता नहीं है %wheel ALL=(ALL) ALL- sudoकॉन्फ़िगरेशन उससे कहीं अधिक अति सूक्ष्म अंतर की अनुमति देता है।
मार्क

1
@ मार्क ओके, अच्छा बिंदु - हर सिस्टम में एक जैसी सेटिंग्स नहीं होती हैं।
सेर्गेई कोलोडियाज़नी

उम्म ... क्या फाइल मौजूद होने पर भी अनुमति बदल जाएगी? मान लीजिए कि मैं एक गैर-व्यवस्थापक उपयोगकर्ता खाते में हैक करता हूं, लेकिन मुझे इसका पासवर्ड नहीं पता है (शायद मैं एक शेल खोलने में कामयाब रहा)। मैं कॉपी कर सकते हैं कि इसका मतलब यह है /bin/bashकरने के लिए ~/.viminfoउपयोगकर्ता को चलाने के लिए, यह और प्रतीक्षा पर एक setuid डाल sudo vimयह जड़ तक chowned की है?
चैट्टरने

15

इसे sudoeditप्राप्त करने के लिए उपयोग करना भी संभव है ; यह आपके संपादक में फ़ाइल की एक अस्थायी प्रतिलिपि खोलता है, आपके संपादक के रूप में आपके साथ चल रहा है। से आदमी पेज :

  1. अस्थायी प्रतियाँ उन फ़ाइलों से बनी होती हैं, जिन्हें स्वामी के द्वारा आमंत्रित उपयोगकर्ता के साथ संपादित किया जाता है।

  2. पॉलिसी द्वारा निर्दिष्ट संपादक अस्थायी फ़ाइलों को संपादित करने के लिए चलाया जाता है। Sudoers नीति का उपयोग करता है SUDO_EDITOR, VISUALऔर EDITORवातावरण चर (इसी क्रम में)। में से कोई भी अगर SUDO_EDITOR, VISUALया EDITORस्थापित कर रहे हैं, पहले संपादक में सूचीबद्ध कार्यक्रम sudoers(5)विकल्प प्रयोग किया जाता है।

  3. यदि उन्हें संशोधित किया गया है, तो अस्थायी फ़ाइलों को उनके मूल स्थान पर वापस कॉपी किया जाता है और अस्थायी संस्करण हटा दिए जाते हैं।

यह विम के साथ ठीक काम करता है (यह वही है जो मैं आमतौर पर करता हूं) और मुझे लगता है कि यह आपको गेडिट का भी उपयोग करने देगा। हैं कुछ सुरक्षा प्रतिबंधों


4
यह बेहतर है यदि आप रूट के बजाय अपने स्वयं के विम कॉन्फ़िगरेशन का उपयोग करेंगे।
NieDzejkob

2
यह भी सुरक्षित है यदि आप यादृच्छिक प्लगइन कोड को रूट के रूप में नहीं चलाना चाहते हैं (हालांकि, प्लगइन्स चल रहे हैं क्योंकि आप दुर्भावनापूर्ण होने पर भी बहुत नुकसान कर सकते हैं, इसलिए उन प्लगइन्स का उपयोग न करें जिन पर आपको भरोसा नहीं है। पहले स्थान पर)।
केविन

2

लिंक बहुत पुराना है (2013)। यह ग्राफ़िकल अनुप्रयोगों के लिए gksudoया उनके उपयोग की अनुशंसा gksuकरता है लेकिन दोनों अप्रचलित हो रहे हैं। बाद में स्वीकार किए गए उत्तर पर भी सुझाव देते हैं sudo -H

हाल ही में उपयोग करने के लिए पूछो Ubuntu समुदाय में आम सहमति है :

sudo -H gedit /path/to/filename

एकमात्र समस्या यह है कि sudoटैब सेटिंग, एक्सटेंशन, वर्ड रैप, फ़ॉन्ट नाम, फ़ॉन्ट आकार, आदि के लिए एक प्रोफ़ाइल नहीं है। आप इसे अपने उपयोगकर्ता प्रोफ़ाइल से इनहेरिट कर सकते हैं, हालांकि इस तरह की एक रैपर स्क्रिप्ट के साथ: मैं अपनी जड़ को कैसे सिंक कर सकता हूं मेरे उपयोगकर्ता के साथ gedit की प्राथमिकताएँ?


2

हां, यह उपयोग करने के लिए सुरक्षित है sudo vim। मुझे जो समस्याएं आती हैं, वे हैं

  • फ़ाइल को छोड़ने और sudo vimसंपादित करने में सक्षम होने के साथ फिर से खोलें ।

  • मूल vimrcडिफ़ॉल्ट एक होने के नाते, मेरे अनुकूलित उपयोगी सामान नहीं।

bashrcयदि आप फ़ाइल को सामान्य रूप से संपादित नहीं कर सकते हैं, तो एक फ़ंक्शन आप अपने आप को वीमो को अनुमति देने के लिए डाल सकते हैं।

vim() {
    #only good for auto-sudo. delete if no sudo privileges.
    #If you're not just opening a single file, let's not use this.
    if [[ "$#" -ne 1 ]]; then
        command vim "$@"
    #cases: if we can write to the file, or the file doesn't exist and we can make new files in that directory
    elif [[ -w "$1" || ( -w $(dirname "$1") && ! -f "$1" ) ]]; then
        # \vim or 'vim' only escape aliases, not functions
        command vim "$1"
    else
        sudo env HOME="$HOME" vim -u $HOME/.vimrc "$1"
    fi
}

sudoडिफ़ॉल्ट रूप से Ubuntu पर $HOMEपर्यावरण चर को संरक्षित करता है, जिसका अर्थ है कि आपके अनुकूलित .vimrc का उपयोग sudo vim करेगा , और इसका यह भी अर्थ है कि रूट sudo vimके स्वामित्व को बदल देगा ~/.viminfo: रूट और आपको कुछ असुविधा का कारण होगा।
मारियस गेदमिनस

स्वीकृत उत्तर आपके बारे में असहमत है viminfo
jeremysprofile

1

Vi को रूट के रूप में उपयोग करना ठीक है। ऐसा समय हो सकता है जब आपको किसी ऐसी फ़ाइल को संपादित करने की आवश्यकता होती है जिसमें sudo या रूट विशेषाधिकारों की आवश्यकता होती है, जैसे कि आपके नेटवर्क इंटरफ़ेस फ़ाइल को बदलना, या शायद आपकी sshd config फ़ाइल को संपादित करना। ग्राफिकल सामान के लिए रूट का उपयोग करना बुरा है क्योंकि लोग आईआरसी से जुड़ेंगे या वेब को रूट के रूप में ब्राउज़ करेंगे। यदि ऐसा करते समय उन्हें वायरस मिला, तो इसकी पूरी जड़ तक पहुंच होगी।


2
Vi को रूट के रूप में उपयोग करने के लिए कम से कम एक विशिष्ट अपवाद है। फ़ाइल जो sudo पाथ (/ etc / sudoers) को नियंत्रित करती है, उसे कभी भी vi के साथ संपादित नहीं किया जाना चाहिए। उस फ़ाइल के लिए, कमांड विडोको का उपयोग किया जाना चाहिए। आप यह भी निर्दिष्ट नहीं करते हैं कि किस फ़ाइल को संपादित किया जा रहा है, यह केवल विशेष मामला है।
user628388

1

अन्य उत्तरों में जो कुछ उल्लेख नहीं किया गया है, वह यह है कि रूट के साथ vim चलाने से आपके द्वारा इंस्टॉल किए गए प्लगइन्स को रूट निजीकृत किया जाएगा। इसलिए, रूट के रूप में चलाने के लिए सुरक्षित है या नहीं, इस सवाल पर निर्भर करता है कि आप उन प्लगइन डेवलपर्स (या उनके प्रोजेक्ट में योगदानकर्ताओं) पर भरोसा करते हैं जो आपके सिस्टम को उसके मूल में नहीं रखते हैं।

Vim को आमतौर पर सभी linux वितरण में पैकेज मेंटेनर्स द्वारा वीटेट किया जाता है, इसलिए इस पर भरोसा करना आसान है। हालांकि, विम प्लग आमतौर पर सीधे GitHub रेपो से इंस्टॉल किए जाते हैं और आमतौर पर उपयोगकर्ताओं की ऑडिटिंग (शायद शून्य) बहुत कम होती है। दूसरे शब्दों में, उनके साथ पशु चिकित्सक प्रक्रिया नहीं है।

यदि आप रूट करते समय प्लगइन्स लोड नहीं करते हैं, तो मुझे लगता है कि रूट के रूप में चलना इस बात पर निर्भर करता है कि क्या आप विम डेवलपर्स पर भरोसा करते हैं। आप उन पर भरोसा करना छोड़ सकते हैं, हालांकि, sudoedit का उपयोग करके जो कि sudo के समान डेवलपर्स द्वारा बनाया गया है, ऐसे लोग जिन्हें हमने पहले से ही रूट एक्सेस वैसे पर भरोसा किया है। GKFX और NieDzejkob पहले ही उल्लेख कर चुके हैं कि क्यों सूडोइट आदर्श है। इस बिंदु के अलावा कि आपको sudo के डेवलपर्स के अलावा किसी और के लिए रूट एक्सेस पर भरोसा नहीं करना है, आप उन सभी प्लगइन्स को लोड कर सकते हैं जिन्हें आपने अपने सामान्य उपयोगकर्ता खाते के साथ पहले से भरोसा किया है।


विभिन्न डेवलपर्स पर भरोसा नहीं करने पर यह चर्चा थोड़ी अधूरी लगती है; यदि आप sudoedit /etc/apt/sources.listएक स्थापित प्लगइन के साथ हैं, तो यह संभवत: एक दुर्भावनापूर्ण रिपॉजिटरी को सम्मिलित कर सकता है और अगली बार जब भी आप अपडेट चलाते हैं, तो रूट एक्सेस प्राप्त कर सकते हैं। मुझे यकीन है कि रूट-संरक्षित फ़ाइलों की एक लंबी सूची है, जिसके लिए कुछ समान लागू होता है। और हां, हर वायरस को जड़ की आवश्यकता नहीं है; कोई आपके बैंक विवरण को एक ब्राउज़र एक्सटेंशन से अधिक नहीं पकड़ सकता है।
GKFX
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.