डेबियन लिनक्स पर जटिल sudo कमांड की अनुमति दें


13

मुझे एकल उपयोगकर्ता के लिए डेबियन लिनक्स बॉक्स पर एक विशिष्ट कमांड की अनुमति देने की आवश्यकता है। मैंने इसे /etc/sudoersफ़ाइल में आज़माया है :

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

यह अपेक्षा के अनुरूप काम नहीं करता है। यदि मैं sudo के साथ उपयोगकर्ता zabbix के रूप में कमांड चलाता हूं, तो यह पासवर्ड के लिए पूछता है (हालांकि मैंने NOPASSWDविकल्प निर्दिष्ट किया है)।

हालाँकि, यह काम करता है:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get

लेकिन इसकी खामी है कि सभी उप-क्षेत्र अनुमति वाले apt-getहैं। क्या कोई तरीका है कि मैं कैसे इसे ठीक कर सकता हूं केवल एक विशिष्ट कमांड को अनुमति देने के लिए?

जवाबों:


10

मैं लेन से असहमत हूं। हालांकि यह काम करेगा, आपको awkरूट के रूप में चलाने की आवश्यकता नहीं है । मैं इससे सहज नहीं रहूंगा क्योंकि आप awkकिसी तरह से हमला करने में सक्षम हो सकते हैं । यह सब के बाद एक पूर्ण प्रोग्रामिंग भाषा दुभाषिया है।

जब कोई चलाता है sudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}', तो वे वास्तव में चल रहे होते हैं sudo /usr/bin/apt-get --print-uris -qq -y upgradeऔर फिर कॉलिंग उपयोगकर्ता के रूप में पाइपिंग / रीडायरेक्ट करते हैं।

इसे इस्तेमाल करे: zabbix ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade

वैसे, इसे स्क्रिप्ट में डालने के बारे में कुछ भी गलत नहीं है क्योंकि लेन करता है और आप अभी भी ऐसा कर सकते हैं। मैं बस अगर संभव हो तो रूट के रूप में awk चलाने से बचूंगा।


1
आप सही हैं लेकिन अगर स्क्रिप्ट असुरक्षित है तो इससे कोई फर्क नहीं पड़ता कि इसमें क्या है, इसे ओवरराइट किया जा सकता है और दुनिया आपकी सीप है। अगर स्क्रिप्ट सुरक्षित है, तो इसमें क्या सुरक्षित है।
user9517

25

आप शायद इस तरह से बेईमानी से गिर रहे हैं कि पुनर्निर्देशन सूडो के साथ बातचीत करता है। पुनर्निर्देशन कॉलिंग उपयोगकर्ता पर किया जाता है न कि विशेषाधिकार प्राप्त उपयोगकर्ता पर। आपके लिए स्क्रिप्ट में कमांड को लपेटना और फिर उस स्क्रिप्ट को चलाने के लिए zabbix उपयोगकर्ता को अनुमति देना संभव होगा

#!/bin/bash
/usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

के रूप में सेट sudoers

zabbix  ALL=NOPASSWD: /path/to/script

अब पूरी स्क्रिप्ट विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में चलाई जाएगी और विशेष रूप से उपयुक्त कमांड नहीं मिलेगी। हालांकि यह सुनिश्चित करें कि ज़ैबिक्स उपयोगकर्ता स्क्रिप्ट पर नहीं लिख सकता है।


1
कोई शायद मुझे सही कर सकता है अगर सूडो पहले से ही इसका ख्याल रखता है (मुझे याद है कि एनवी चर के साथ मुद्दों को पारित नहीं किया जा रहा है), लेकिन मैं सुझाव दूंगा awk और wc उनके fullpaths स्क्रिप्ट के लिए एक सामान्य सबसे अच्छा अभ्यास है इसलिए एक उपयोगकर्ता 'PATH = ~ यूजर / बिन: $ PATH एक्सपोर्ट करें और जो भी स्क्रिप्ट चाहे उसे awk (या wc) ~ यूजर / बिन
Foon

@ फ़न: मुझे लगता है कि आप सुडोन को क्रोन के साथ भ्रमित कर रहे हैं।
user9517

1
यह भ्रमित नहीं है, लेकिन superuser.com/questions/232231/... कि sudo रोकता पथ हेरफेर (और डिफ़ॉल्ट रूप से LD_LIBARRAY_PATH) संकेत मिलता है
टेलीफोन

मैंने भी कुछ ऐसा ही किया था, जो मैंने उकसाने वाली स्क्रिप्ट पर मुकदमा किया था और इसे केवल जड़ से लेखन योग्य बनाया था। परीक्षण करें यदि यह 711 अनुमतियों के साथ उपयोगकर्ता के लिए काम करता है, तो वे यह भी नहीं देख सकते कि यह क्या करने की कोशिश कर रहा है और इसे दरकिनार कर रहा है।
क्रिस के
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.