कौन सी स्क्रिप्ट नियमित उपयोगकर्ताओं को नेटवर्क नेमस्पेस का उपयोग करने की अनुमति दे सकती है?


22

मेरे पास नेटवर्क नेमस्पेस (नेटन्स) का उपयोग करके एक आर्किटेक्चर है। मैं नियमित उपयोगकर्ताओं को इन नेटों में कुछ संचालन करने की अनुमति देना चाहूंगा।

मैं एक स्क्रिप्ट लिख सकता हूं netns-exec.sh, जो इस पोस्ट से प्रेरित है , जिसके साथ निष्पादित किया गया है sudo:

ip netns exec $1 su $USER -c "$2"

और मेरे sudoer फ़ाइल में जोड़ें:

user ALL=(ALL) /path/to/netns-exec.sh

लेकिन मुझे लगता है कि यह बहुत बदसूरत है मैं पूरी तरह से इसके बारे में बुरे सपने हो सकता है। क्या नियमित उपयोगकर्ताओं को नेमस्पेस का उपयोग करने की अनुमति देने के लिए एक बेहतर समाधान है? क्या कुछ उपयोगी समूहों के लिए उपयोगकर्ताओं को रखना संभव है? मैंने इसके बारे में खोज की लेकिन कुछ नहीं मिला।


1
आप Cmd_Alias CMD_NETNS = ip netns exec [regexp matching your namespace] su [regexp matching allowed used] -c [regexp matching allowed namespace command]अपने sudoers फ़ाइल में परिभाषित क्यों नहीं करते हैं और फिर एक समूह बनाते हैं जिसमें आप अपने अनुमत उपयोगकर्ताओं को रखते हैं, और इस समूह को इस कमांड उपनाम के साथ जोड़ते हैं।
netmonk

2
यह sudoएक है suकि मुझे गुस्सा दिलाता है, स्क्रिप्ट ही नहीं। वैसे भी मैं बात को लपेटने के लिए एक स्क्रिप्ट लिखूंगा। यह 2 उपयोगकर्ता स्विच बनाता है, यह वास्तव में बदसूरत है, आपको नहीं लगता?
रास्पबेगी

6
इससे आपको डरना चाहिए। उपयोगकर्ता रूट होने के लिए $ USER को संशोधित कर सकता है।
स्टीफन

1
हाँ, और यह मुझे डराता है। लेकिन मुझे बाद में पता चला कि sudoएक विशिष्ट चर प्रदान किया गया $SUDO_USER, जो सुरक्षित है। लेकिन यह अभी भी बदसूरत है।
रास्पबेगी

1
@ एर्लोनंड - लिपियों पर सेट की अनदेखी की कर्नेल
एंजेलो

जवाबों:


1

समाधान 1

बस "netns" नामक एक समूह जोड़ें, इसमें सभी वांछित उपयोगकर्ता जोड़ें। फिर रूट को स्वामित्व दें: नेटन्स और समूह को पढ़ने / निष्पादित करने की क्षमता दें।

अन्य शब्दों में:

# New group netns
sudo groupadd --system netns

# Add root to "netns", not sure if needed
sudo usermod -aG netns root

# Do this for every needed user
sudo usermod -aG netns $UserName

# Change ownership to root, grant rw acces to group netns
sudo chown root:netns /path/to/netns-exec.sh
sudo chmod 633 /path/to/netns-exec.sh

समाधान २

यह समाधान सरल है, आपको इस उदाहरण में दिखाए अनुसार आपको sudoers फ़ाइल को संपादित करना होगा ।

user ALL=(ALL) /bin/ip netns

खैर, समाधान 1 असंभव है, कमांड ip netnsयह कहते हुए एक त्रुटि लौटाएगा कि केवल रूट ही इसे निष्पादित कर सकता है। समाधान 2 वह है जो शुरू में मेरे मन में था, लेकिन मेरी राय में संतोषजनक नहीं था।
रास्पबेगी

यह सभी उपयोगकर्ताओं और समूह chmod 0633को write+executeअनुमति देगा netns। मुझे संदेह है कि आप स्क्रिप्ट पर SGID बिट सेट करना चाहते थे, लेकिन जैसा कि @Angelo ने उल्लेख किया है: setuidऔर setgidशेल स्क्रिप्ट के लिए और अच्छे कारण के लिए अनदेखा किया गया है
ckujau

0

व्यक्तिगत रूप से मुझे नहीं पता कि क्या अलग-अलग नेटवर्क नामस्थानों में कमांड चलाने के लिए नियमित उपयोगकर्ताओं को अनुमति देने की संभावना है, लेकिन यह एनोटेट शेल स्क्रिप्ट आपकी आवश्यकताओं के अनुसार बेहतर हो सकती है:

#!/bin/bash
# ip netns wrapper script, nns.
# Usage: nns nsname cmdline

case "${1}" in
    do)
        shift # remove "do"
        NSNAME="${1}" # remember nsname
        shift # remove nsname to get argument list for su -c
        [ -z "${NSNAME}" -o -z "${1}" ] && exit 1 # if either nsname or arglist is empty - error out
        echo ip netns exec "${NSNAME}" su "${SUDO_USER}" -c "${*}" # execute, ${*} merges separate arguments into single word for su/sh -c parsing. See with strace.
    ;;
    *)
        SCRIPTNAME="${0}" # remember script full path
        exec sudo "${SCRIPTNAME}" do "${@}" # run it through sudo with elevated privileges
    ;;
esac

इसे कहीं पर इंस्टॉल करें /usr/binऔर अपने उपयोगकर्ताओं को इसे निष्पादित करने की अनुमति दें।


आपकी प्रतिक्रिया के लिए धन्यवाद (और कई महीनों के बाद के लिए खेद है)। लेकिन समस्या ज्यों की त्यों बनी हुई है, यानी कि सुडो का उपयोग करना।
रास्पबेगी

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