उपयोगकर्ता को sudo के साथ पर्यावरण को संरक्षित करने की अनुमति कैसे दें?


17

मैं निम्नलिखित त्रुटि में चल रहा हूं जब कुछ पर्यावरण चर नए वातावरण में गुजरने की अनुमति देता है sudo:

sudo: sorry, you are not allowed to preserve the environment

कुछ जानकारी जो डीबग करने में सहायक हो सकती है:

[deploy@worker1 ~]$ sudo -l
    Matching Defaults entries for deploy on this host:
    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
    XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin, env_keep+="GIT_WORK_TREE GIT_DIR", !requiretty

User deploy may run the following commands on this host:
    (ALL) NOPASSWD: /usr/bin/git, (ALL) /etc/init.d/httpd*, (ALL) /sbin/service, (ALL) /usr/bin/make, (ALL) /bin/echo

मेरा चल उदाहरण:

[deploy@worker1 ~]$ export GIT_DIR="/home/ashinn/testing"
[deploy@worker1 ~]$ sudo -E sh -c 'echo "$GIT_DIR"'
sudo: sorry, you are not allowed to preserve the environment

इस विशिष्ट विन्यास के लिए मेरा sudoers.d फ़ाइल:

Defaults:deploy         env_keep += "GIT_WORK_TREE GIT_DIR", !requiretty
deploy  ALL=(ALL)       NOPASSWD: /usr/bin/git, /etc/init.d/httpd*, /sbin/service, /usr/bin/make, /bin/echo

मैंने !env_resetडिफॉल्ट्स को भी जोड़ने की कोशिश की है और यह अभी भी उसी त्रुटि के साथ विफल है। मुझे ऐसा लगता है कि मुझे कुछ स्पष्ट याद आ रहा है और आँखों के दूसरे सेट की आवश्यकता है। मुझे यहां क्या समझ नहीं आ रहा है?


1
मेरा मानना ​​है कि लगभग 93% लोग आपके प्रश्न के बिंदु को समझते हैं, लेकिन आपका उदाहरण कमांड बहुत अच्छा नहीं है।  , यदि यह एकमुश्त विफल नहीं होता है, तो पूर्व- मान प्रदर्शित करेगा , क्योंकि शेल कमांड लाइन में चर का विस्तार करता है, इससे पहले कि इसे भी लागू किया जाए। बेहतर परीक्षण कर रहे हैं या या जहाँ हम वास्तव में है कि विशेषाधिकार प्राप्त चलने वाली प्रक्रिया का वातावरण देख रहे हैं,। sudo (option(s)) echo $GIT_DIRsudo$GIT_DIRsudosudo printenv GIT_DIRsudo env | grep GIT_DIRsudo sh -c 'echo "$GIT_DIR"'
जी-मैन का कहना है कि 'मोनिका' को

जवाबों:


27

आप SETENVअपनी sudoersफ़ाइल में "टैग" का उपयोग कर सकते हैं , जैसे:

deploy  ALL=(ALL)       SETENV: /usr/bin/git, /etc/init.d/httpd*, /sbin/service, /usr/bin/make, /bin/echo

या, इसे NOPASSWD के साथ संयोजित करने के लिए:

deploy  ALL=(ALL)       NOPASSWD:SETENV: /usr/bin/git, /etc/init.d/httpd*, /sbin/service, /usr/bin/make, /bin/echo

सूदर्स मैन से प्रासंगिक अंश:

SETENV और NOSETENV

ये टैग सेट-ऑप्शन के मूल्य को प्रति-कमांड आधार पर ओवरराइड करते हैं। ध्यान दें कि यदि SETENV एक कमांड के लिए सेट किया गया है, तो उपयोगकर्ता कमांड लाइन से -E विकल्प के माध्यम से env_reset विकल्प को अक्षम कर सकता है। साथ ही, वातावरण चर कमांड लाइन पर सेट द्वारा लगाए गए प्रतिबंध के अधीन नहीं हैं env_check, env_deleteया env_keep। जैसे, केवल विश्वसनीय उपयोगकर्ताओं को इस तरीके से चर सेट करने की अनुमति दी जानी चाहिए। यदि कमांड का मिलान ALL है, तो SETENV टैग उस कमांड के लिए निहित है; यह डिफ़ॉल्ट NOSETENV टैग के उपयोग से ओवरराइड हो सकता है।


1

-Eविकल्प निर्दिष्ट न करें । का उपयोग करते हुए -Eyou're कह रही है कि उपयोगकर्ता के लिए सभी वातावरण चर deployसंरक्षित किया जाना चाहिए, न केवलGIT_DIR

रनिंग sudo echo $GIT_DIRको काम करना चाहिए क्योंकि आपने सूची में जोड़ा GIT_DIRहैenv_keep

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