लिनक्स - "su -" का उपयोग करें, लेकिन वर्तमान निर्देशिका को बनाए रखें


14

जब मैं su -रूट करने के लिए करता हूं, तो मेरी वर्तमान निर्देशिका रूट के घर पर सेट होती है। वैसे भी वर्तमान निर्देशिका को रखने के लिए मैं बहुत कुछ पसंद करता हूं sudo -s। या सुडोल का उपयोग करने का उत्तर है?


5
कृपया ध्यान दें कि मैं अशिष्ट ध्वनि नहीं करना चाहता, लेकिन यह समस्या "आदमी सु" के माध्यम से हल क्यों नहीं हुई है?
मिर्रिडन

1
@ शासन कृपया Myrrdyn टिप्पणी पढ़ें
c4f4t0r

मुझे उपयोग करना पसंद है sudo su -c "zsh", मेरे मामले में, मुझे वर्तमान dir में रखता है और रूट उपयोक्ता के साथ शेल के रूप में zsh लोड करता है। ctrl+dके बाद और आप वर्तमान उपयोगकर्ता पर वापस जाते हैं। डायरेक्ट्री बात के लिए, मेरे लिए सीधे सेंटो पर काम करता है, लेकिन हो सकता है कि `&& cd $ (pwd)` को जोड़कर अंदर की कमांड ट्रिक कर सके।
गेबलेरॉक्स

जब आप जानते हैं कि आप क्या देख रहे हैं @Myrrdyn दस्तावेज़ बहुत बढ़िया हैं। जब आप नहीं पूछते हैं, तो विशेषज्ञों से पूछना कुछ सलाह तेज़ है, और अधिक शिक्षाप्रद है।
रोमेन विंसेंट

जवाबों:


18

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

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

हालाँकि - यदि आप नहीं चाहते हैं तो आपको '-' पैरामीटर का उपयोग करने की आवश्यकता नहीं है। आपको एक शेल मिलेगा रूट के रूप में, यह सिर्फ एक लॉगिन शेल नहीं होगा (इसलिए यह रूट का .profile नहीं चलेगा)।


1
मेरे मामले में मुझे कुछ ऐसा करने के लिए उर्फ ​​की जरूरत थी asuser git reset --hard। लेकिन su - <user> -m -c "git reset --hard"और sudo -u <user> git reset --hardमेरे पर्यावरण को बचाएगा और git वर्तमान उपयोगकर्ता के git config को पढ़ने की कोशिश करेगा । इसलिए मैं केवल यह बताना चाहता था कि कभी-कभी उपयोगकर्ता205705 का समाधान su - <user> -c "cd pwd; bash" का उपयोग करना बेहतर होता है।
प्रतिफल

16

मैं मानता हूँ कि सुडो लगभग हमेशा एक बेहतर उत्तर होता है लेकिन प्रश्न के दूसरे भाग का उत्तर देने के लिए ...

'Su -' में '-' इंगित करता है कि आप एक सुपरयुजर लॉगिन का अनुकरण करना चाहते हैं, बल्कि केवल सुपरयुजर निजीकरण के साथ चलना चाहते हैं।

यदि आप 'सु -' के बजाय सादे 'सु' का उपयोग करते हैं, तो आप उसी निर्देशिका में बने रहेंगे; हालाँकि, आप भी उसी वातावरण में चल रहे होंगे, इसलिए कुछ व्यवस्थापक आदेशों तक पहुँचने के लिए अपने पथ को संशोधित करने की आवश्यकता हो सकती है।


9

यदि आप suबिना उपयोग करते हैं -, तो यह आपको अपनी वर्तमान निर्देशिका में रखना चाहिए। -, -lया --login सु को बताएं:

उपयोगकर्ता को सीधे में लॉग इन होने की अपेक्षा उपयोगकर्ता जैसा वातावरण प्रदान करेगा।

या बस sudo का उपयोग करें, यह कई अन्य लाभ मिला है। या ssh चाबियाँ।


6

आपको सूडो का सेवन जरूर करना चाहिए।

su -m
-m (-p): पर्यावरण चर (आमतौर पर अनुशंसित नहीं) को रीसेट न करें

जब आप रूट में बदलते हैं तो आपको फ़ोल्डर में रखा जाएगा।

सुडो का उपयोग करने के लाभ


1
मैं यह नहीं देख सकता कि यह कैसे अपने आप पर "सु" से अलग है, संभवत: अन्य पाथ वातावरण को रीसेट नहीं कर रहा है, जो कि एक संभावित सुरक्षा समस्या है।
डेविड पशले

उदाहरण के लिए @DavidPashley, यह .bashrcबाहरी उपयोगकर्ता से निष्पादित होता है , रूट नहीं।
phil294

4

यदि आप वास्तव में उपयोग करना चाहते हैं su, तो उसी निर्देशिका में रहने का एक तरीका है।

su - <user> -c "cd `pwd`; bash"

यहाँ क्या चल रहा है:

  • su - <user> = के रूप में लॉगिन करें
  • -c जिसका अर्थ है "नए शेल में कमांड चलाना
  • -c "cd `pwd`" हम जो कमांड देते हैं वह वर्तमान direcotory ( pwd) पर स्विच करने के लिए है - लेकिन क्योंकि हम backticks का उपयोग करते हैं, pwdकमांड का मूल्यांकन इससे पहले suकि हम कमांड चलाते हैं ताकि हम वास्तव में उस निर्देशिका में स्विच करें जो अब हम पुराने उपयोगकर्ता के रूप में कर रहे हैं। यहाँ एकमात्र समस्या यह है कि नया शेल कमांड को चलाने के ठीक बाद बाहर निकलता है, इसलिए हम जोड़ते हैं:
  • -c "cd `pwd`; bash" जिसका अर्थ है "रन bash(नया शेल) cdकमांड को चलाने के बाद और बैश शेल तब तक बाहर नहीं निकलता जब तक हम उससे बाहर नहीं निकल जाते।

1
यह वास्तव में प्रश्न का एकमात्र उत्तर है। बहुत बढ़िया!
काकासाहू फ्रिटो

वास्तव में, su - [user] -c "cd $(pwd); bash"थोड़ा बेहतर हो सकता है (बैकटिक्स को बदलें $())।
काकाहुइते फ्रिटो

3

सुडो का प्रयोग करें :)। गंभीरता से, आपको su की आवश्यकता नहीं है। 'सुडो ’बेहतर है क्योंकि आप इसे केवल विशेषाधिकार प्राप्त आदेशों के लिए उपयोग करते हैं और गलतियों से बचने में मदद कर सकते हैं। आपको जवाबदेही भी मिलती है।


2

यदि आप "सु" का उपयोग करते हैं तो यह एक इंटरैक्टिव शेल करता है। यह "सुडो-एस" के समान है। "su -" एक लॉगिन शेल बनाता है, जो पर्यावरण को ओवरराइड करेगा। "सूदो -इ" सूडो के साथ साम्य है। यदि आप एक इंटरैक्टिव शेल प्राप्त करने की कोशिश कर रहे हैं, तो आपको हमेशा sudo -i (या su -) फॉर्म का उपयोग करना चाहिए, या उपयोगकर्ता के होम डायरेक्टरी में अजीब फ़ाइल अनुमतियों के साथ समाप्त करना संभव है।


0

इस कार्य को करने के लिए आपको su के स्रोत को संशोधित करना होगा। एन्विरोनमेंट वैरिएबल्स को इनिशियलाइज़ करने की प्रक्रिया में एक chdir कॉल है। उन बयानों में टिप्पणी करें जिनमें वह कॉल शामिल हो। और अब, आप "सु -" कर सकते हैं, लेकिन वर्तमान निर्देशिका को बनाए रखता है।

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