`/ etc / sudoers` - केवल एक आदेश के लिए` env_keep` निर्दिष्ट करें?


23

क्या यह निर्दिष्ट करने का कोई तरीका है कि sudoकेवल निर्दिष्ट आदेशों के लिए कुछ पर्यावरण चर को संरक्षित करना चाहिए? कुछ उद्देश्यों के लिए मैं अपने $HOMEenv को पसंद करूँगा । जब मैं कुछ आदेश चलाता हूं तो चर संरक्षित रहता है। अन्य उद्देश्यों और अन्य आदेशों के लिए, मैं इसे रीसेट करना चाहता हूं। क्या इसके साथ किया जा सकता है /etc/sudoers?

संपादित करें:

उत्तर देने के लिए आपको धन्यवाद। मुझे आश्चर्य है कि अगर मैं एक अनुवर्ती प्रश्न पूछ सकता हूं, जो "क्यों, फिर, यह काम नहीं करता है?"

उदाहरण में, मैं काम करने की कोशिश कर रहा हूं, मैं sudo nanoअपना पढ़ना चाहता हूं $HOME/.nanorc। अगर मैं इसका उपयोग करता हूं:

Defaults:simon env_keep=HOME

यह पूरी तरह से काम करता है। अगर मैं इसका उपयोग करता हूं:

Defaults!/bin/nano env_keep=HOME

या यह:

Cmnd_Alias      NANO = /usr/bin/nano,/bin/nano,/bin/rnano
Defaults!NANO   env_keep=HOME

यह बिल्कुल काम नहीं कर रहा है। किसी भी सुझाव के रूप में क्यों? (मैं डेबियन परीक्षण पर हूँ, btw।)

(ध्यान दें: मुझे नहीं लगता कि यह nanoविशिष्ट है, btw - मैं एक-लाइन बैश स्क्रिप्ट के साथ व्यवहार को पुन: पेश कर सकता हूं जो बस echoएस है $HOME)।


1
इसके बजाय उसी कॉन्फिग फाइल का उपयोग करने के लिए सुडो के माध्यम से नैनो को चलाने की कोशिश करें, sudoeditइसके बजाय उपयोग करें । sudoeditकिसी फ़ाइल की सामग्री को tmp फ़ाइल में कॉपी करेगा और आपकी पसंद के संपादक को आपके उपयोगकर्ता के रूप में चलाएगा, जब संपादक बाहर निकलता है तो यह जाँच करेगा कि क्या आपने कुछ बदला है और यदि ऐसा है तो संपादित किए गए के साथ मूल को बदलें। आप चुन सकते हैं कि आप कौन सा संपादक चाहते हैं $EDITORया $ VISUAL` env var सेट करके चलाएं।
एरोमास्टर

@ एरोमास्टर - धन्यवाद, यह एक बेहतर दृष्टिकोण की तरह लगता है कि मैं जिस के साथ गड़बड़ कर रहा था। चूंकि मैं पहले से ही sudoअपने खुद के एक समारोह के साथ लपेट रहा हूं , मैंने बस एक if [ "$1" == "$EDITOR" ]; thenब्लॉक जोड़ा है और अब sudoeditइसके बजाय कॉल कर रहा हूं :)
सिमोन

जवाबों:


21

env_keepकेवल /path/to/command(किसी भी उपयोगकर्ता द्वारा किसी भी नियम के माध्यम से आह्वान किए जाने पर) और उपयोगकर्ता के लिए ओवरराइड करने के लिए ( joeकोई फर्क नहीं पड़ता कि वह कौन सी कमांड चला रहा है):

Defaults!/path/to/command env_keep=HOME
Defaults:joe env_keep=HOME

आप सूची में प्रविष्टि को हटाने या हटाने के लिए उपयोग कर सकते हैं -=या +=जोड़ सकते हैं env_keep


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

1
@ साइमन: मूर्ख मत समझिए, मुझे भी sudoersमैन पेज में वाक्यविन्यास का विवरण कठिन लगता है, औपचारिक विवरण और उदाहरणों से पता लगाना आसान है कि क्या आप पहले से ही उन्हें लिखना जानते हैं।
गिलेस एसओ- बुराई को रोकना '17

हम्म - शायद मैंने जल्द ही बात की। अब जब मैं यह कोशिश करता हूं, तो मैं वास्तव में इसे काम करने के लिए नहीं पा सकता हूं। क्या मैं आपको अपने संशोधन पर एक नज़र डालने के लिए परेशान कर सकता हूँ?
सिमोन

1
@ साइमन: मेरा अनुमान है कि आपके पास एक प्रविष्टि भी है जो आपको सब कुछ करने देती है और उस env_keepसेटिंग ( simon ALL = ALL) में नहीं है। सूडो अंतिम मिलान प्रविष्टि का उपयोग करता है ।
गिल्स एसओ- बुराई को रोकें '17

सावधान, अगर Secure_path सेट है, तो आपको Defaults भी जोड़ना होगा: joe! Safe_path
Jistanidiot

6
Cmnd_Alias      PBUILDER = /usr/sbin/pbuilder,/usr/sbin/cowbuilder
Defaults!PBUILDER       env_keep+=HOME

उन पंक्तियों को अपने उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइल के लिए दिखने वाली /etc/sudoersसमस्या को ठीक करने के लिए मेरे स्वयं के हैं, लेकिन रूट के रूप में चलाया जाना चाहिए (इसे थोड़े में स्थानांतरित करना सिस्टम और उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइल दोनों के उद्देश्य को हराता है)।pbuilder$HOME/root


हाँ, यह एक बहुत ही समान मामला है जो मेरे मन में था, धन्यवाद!
सिमोन

क्या आपके पास कोई विचार है कि मेरे संशोधन में उदाहरण क्यों काम नहीं करते?
सिमोन

@simon sudo अपने कॉन्फिग में प्रविष्टियों के क्रम के बारे में बहुत उपयुक्त है, बाद में प्रविष्टियाँ पिछले वाले को अधिलेखित कर देंगी। आपके कॉन्फिग में ऐसा कुछ संघर्ष हो सकता है।
एरोमास्टर

1

आदमी सूदखोर:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller’s environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

इसलिए हाँ, आप ऐसा कर सकते हैं env_reset, env_keepऔर env_checkआपके / etc / sudoers में।

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