आलेखीय अनुप्रयोगों को शुरू करने के लिए उपयोगकर्ताओं को सामान्य सूडो का उपयोग क्यों नहीं करना चाहिए?


114

मैंने कॉमुटिटी "रूटसूडो" प्रलेखन पढ़ा है और इस पंक्ति में दिलचस्पी रखता हूं:

रूट के रूप में आलेखीय अनुप्रयोगों को शुरू करने के लिए आपको सामान्य सूडो का उपयोग कभी नहीं करना चाहिए ।

क्यों? अंतर क्या है? कृपया एक साधारण विवरण प्रदान करें, क्योंकि मैं एक सामान्य डेस्कटॉप उपयोगकर्ता हूं।



दरअसल, मैंने हाल ही में MATLAB को / usr / लोकल पर इंस्टॉल करने में काफी मेहनत की थी। यह लिखने के लिए / usr / स्थानीय लिखने के लिए मूल विशेषाधिकारों की आवश्यकता होती है, लेकिन इंस्टॉलर को gksu के उपयोग से चलाने से किसी तरह स्थापित प्रोग्राम को बिना रूट के चलाना असंभव हो जाता है। सुडो का उपयोग करके इंस्टॉलर को चलाना सब कुछ ठीक काम करता है।
बिब-खो

जवाबों:


129

ग्राफ़िकल एप्लिकेशन अक्सर उपयोगकर्ता के होम फ़ोल्डर के अंदर लिखी गई कॉन्फ़िगरेशन फ़ाइलों में सेटिंग्स और अन्य उपयोगकर्ता-विशिष्ट डेटा संग्रहीत करते हैं । मुख्य तंत्र अनुप्रयोग यह निर्धारित करने के लिए उपयोग करते हैं कि उन्हें उपयोगकर्ता के होम फ़ोल्डर के रूप में क्या उपयोग करना चाहिए HOME पर्यावरण चर है । (आप इसे स्वयं के साथ निरीक्षण कर सकते हैं echo $HOME)।

मान लीजिए कि आप gedit(चित्रमय पाठ संपादक) के रूप में चल रहे हैं root। आप चलाते हैं sudo gedit, HOMEकी ओर इंगित करने के लिए जारी रहेगा अपने घर निर्देशिका, भले ही कार्यक्रम चल रहा है के रूप मेंroot । नतीजतन, अपने घर निर्देशिका के रूप में geditविन्यास फाइल लिखेंगे । यह कभी-कभी कॉन्फ़िगरेशन फ़ाइलों के स्वामित्व में होगा और इस तरह आपके लिए अप्राप्य होगा (जब आप बाद में कार्यक्रम को खुद के रूप में चलाते हैं और जैसा नहीं )। यह मुख्य रूप से तब होता है जब एप्लिकेशन को एक नई कॉन्फ़िगरेशन फ़ाइल बनानी होती है। नई बनाई गई फ़ाइलें, डिफ़ॉल्ट रूप से, उपयोगकर्ता द्वारा बनाई जाती हैं, जो उन्हें बनाता है (जो इस मामले में है , आप नहीं)।rootrootrootroot

यही प्राथमिक कारण है कि आपको sudoसीधे के बजाय ग्राफ़िकल फ्रंटेंड के साथ ग्राफ़िकल एप्लिकेशन चलाना चाहिए sudo। उबंटू और इसके अधिकांश डेरिवेटिव (जुबांट और लुबंटू सहित) में, मानक ग्राफिकल फ्रंटेंड gksu/ हैgksudo । कुबंटु में यह है kdesudo। (यह उपयोग किए जा रहे डेस्कटॉप वातावरण पर निर्भर करता है।)

यदि आप एक ग्राफिकल एप्लिकेशन को चलाने के लिए सीधे उपयोग करना चाहतेsudo हैं gedit, तो आप चला सकते हैं:

sudo -H gedit

-Hझंडा बनाता sudoसेट HOMEकरने के लिए बात करने के लिए rootघर फ़ोल्डर (जो /root)।

यह अभी भी स्वचालित रूप से .Xauthorityइसे एक अस्थायी फ़ोल्डर में कॉपी करके स्वामित्व को संभाल नहीं करेगा (यह दूसरी बात है कि चित्रमय sudoदृश्य आपके लिए ध्यान रखते हैं)। लेकिन उस अपरिहार्य घटना में जो .Xauthorityदुर्गम है, आपको यह कहते हुए एक त्रुटि मिलेगी और फिर आप इसे हटाकर ( sudo rm ~/.Xauthority) को हटाकर समस्या को ठीक कर सकते हैं , क्योंकि यह स्वचालित रूप से पुनर्जीवित है। इस प्रकार, .Xauthorityकॉन्फ़िगरेशन फ़ाइलों के स्वामित्व और अनुमतियों की सुरक्षा की तुलना में स्वामित्व और अनुमतियों की सुरक्षा कम महत्वपूर्ण है।

एक rootविख्यात के विपरीत .Xauthority, जब कॉन्फ़िगरेशन फ़ाइलों के स्वामित्व में हो जाता है root, तो यह हमेशा स्पष्ट नहीं होता है कि समस्या क्या है (क्योंकि चित्रमय कार्यक्रम अक्सर चलेंगे, लेकिन बहुत अच्छी तरह से काम नहीं करते हैं, और कंसोल के लिए किसी भी उपयोगी त्रुटियों को आउटपुट करते हैं)। और कभी-कभी इसे ठीक करने के लिए एक बड़ा झंझट होता है, खासकर यदि आप ऐसी स्थिति में हैं जहां आप चाहते हैं कि आपके घर की निर्देशिका में एक या एक से अधिक फाइलें आपके अलावा किसी और के पास हों (क्योंकि तब आप इसे केवल chownअपनी सभी फ़ाइलों को पुन: प्राप्त करने से ठीक नहीं कर सकते हैं अपने आप से वापस)।

इसलिए, जब तक आप एप्लिकेशन के आंतरिक कामकाज से अत्यधिक परिचित नहीं होते हैं और यह सुनिश्चित करने के लिए जानते हैं कि यह किसी भी कॉन्फ़िगरेशन फ़ाइलों को लिखने का प्रयास नहीं करता है, तब तक ग्राफ़िकल एप्लिकेशन को चलाने के लिए sudo(कम से कम बिना -H) का उपयोग नहीं किया जाना चाहिए ।


क्या मैं अपने होम डायरेक्टरी पर सभी कॉन्फ़िगरेशन फ़ाइलों (या किसी भी फाइल) का मालिक बन सकता हूं, अगर ये फाइल रूट के स्वामित्व में है?
नूर

मान लिया जाये कि @Nur देखते हैं कोई अपने घर निर्देशिका में फ़ाइलों है कि आप चाहते हैं किसी भी अन्य उपयोगकर्ता द्वारा स्वामित्व के लिए या कि आप (साझा करने के लिए) किसी भी अन्य दल सदस्यता करना चाहते हैं :, आप चला सकते हैं sudo chmod -R $USER:$USER ~दुर्भाग्य से, उन मानदंडों को हमेशा लागू नहीं है। यदि आपके पास कोई फ़ाइल है जहाँ आपको समूह के स्वामी को संरक्षित करने की आवश्यकता है, तो आप चला सकते हैं sudo chmod -R $USER ~। यह आमतौर पर पर्याप्त है। (यदि आपके पास फ़ाइलों को आपके घर निर्देशिका में किसी अन्य उपयोगकर्ता के स्वामित्व की आवश्यकता है, तो भी यह एक समस्या होगी।)
एलियाह कगन

1
@EliahKagan chmodवास्तव में क्या करता है? मैंने हमेशा सोचा था chownकि यह किया है। chmodमेरे लिए यह कभी नहीं किया।
व्याट8740

2
@ व्याट8740 मुझे ऊपर की टिप्पणियों के chownबजाय निश्चित रूप से लिखना चाहिए था chmod। इसके बारे में क्षमा करें - और इसे इंगित करने के लिए धन्यवाद!
एलियाह कगन

2
@ TheQuark में sudo -H echo $HOME, आपका शेल - आप के रूप में चल रहा है, रूट के रूप में नहीं है - अपने होम डायरेक्टरी के पथ को प्राप्त करने पर पैरामीटर विस्तार करता है , फिर उसे पास करता है , जो बदले में पहले से विस्तारित मूल्य को पास करता है , जो इसे प्रिंट करता है। , और सभी प्रिंट । यह वैचारिक रूप से समान है - हालांकि एक अलग तंत्र द्वारा - कैसे नहीं प्रिंट होता है (जब तक कि पहले से ही मूल्य नहीं था )। $HOMEsudoechosudo -H printenv HOMEsudo -H bash -c 'echo $HOME'sudo -H sh -c 'echo $HOME'/rootx=a echo "$x"axa
एलियाह कगन

25

सीधे शब्दों में कहें:

यह आपके होम डायरेक्टरी की फाइलों को रूट के स्वामित्व में आने से रोकता है।

इसे यहाँ पढ़ें । इसके अलावा, संभवतः "gksudo nautilus" और "sudo nautilus" में क्या अंतर है?


gksudo उबंटू और डेबियन इंस्टॉल के साथ शामिल नहीं है। देखें itsfoss.com/gksu-replacement-ubuntu जानकारी के लिए। askubuntu.com/a/1047413/197910 अब बेहतर समाधान है।
K7AAY

5

ऐड-ऑन का उपयोग करने का एक विकल्प gksu nautilusऔर gksu geditहै nautilus-admin। यह आपको Nautilus के साथ फ़ाइलों और निर्देशिकाओं को ब्राउज़ करने और फिर उन्हें रूट (प्रशासक) के रूप में खोलने की अनुमति देता है ।

स्थापना सीधे आगे है:

sudo apt install nautilus-admin

अब जब आप nautilus में हैं, तो आपके पास व्यवस्थापक के रूप में संपादित करने के लिए एक अतिरिक्त विकल्प होगा:

nautilus admin.gif


gedit जैसा कि रूट वरीयताओं को अनुमति नहीं देता है

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

इसे हल करने के लिए मैंने sgeditउपयोगकर्ता प्राथमिकताओं को विरासत में लेने के लिए स्क्रिप्ट लिखी है और उन्हें रूट पर लागू किया है: मैं अपने उपयोगकर्ता के gedit की प्राथमिकताओं के साथ अपने रूट gedit को कैसे सिंक कर सकता हूं?

  • का उपयोग कर कॉल करें sgedit filename1 filename2 ...
  • टैब स्टॉप, फोंट, लाइन-रैप, आदि के लिए उपयोगकर्ता की gedit सेटिंग्स हो जाती हैं।
  • sudo -Hजड़ शक्तियों को प्राप्त करते हुए फ़ाइल के स्वामित्व को संरक्षित करने के लिए ऊंचाई ।
  • अनुरोध पासवर्ड यदि अंतिम sudoसमय समाप्त हो गया है।
  • सूडो की गेदित सेटिंग हो जाती है
  • उपयोगकर्ता और sudo gedit सेटिंग्स के बीच अंतर की तुलना करता है
  • केवल अंतर पर सेट किए गए रनिंग gsettings (174 सेट कमांड को एक दर्जन या उससे कम कर देता है। अगली बार जब इसे चलाया जाता है तो शायद केवल एक या दो परिवर्तन होते हैं लेकिन अक्सर कोई परिवर्तन नहीं होता है।
  • geditएक पृष्ठभूमि कार्य के रूप में कॉल करता है कि टर्मिनल प्रॉम्प्ट तुरंत फिर से दिखाई देता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.