Який сценарій може дозволити звичайним користувачам використовувати простори мережних імен?


22

У мене є архітектура, що використовує мережеві простори імен (netns). Я хотів би дозволити звичайним користувачам робити деякі операції в цих мережах.

Я міг би написати сценарій 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 користувацькі комутатори, це справді некрасиво, ви не думаєте?
Raspbeguy

6
Це повинно вас налякати. Користувач може змінити $ USER на root.
Стівен

1
Так, і це мене лякає. Але я зрозумів пізніше, що sudoзабезпечує певну змінну $SUDO_USER, яка є безпечнішою. Але це все одно некрасиво.
Raspbeguy

1
@Elronnd - ядро ​​ігнорує встановлені на сценарії
Анджело,

Відповіді:


1

Рішення 1

Просто додайте групу під назвою "netns", додайте до неї всіх бажаних користувачів. Потім наділіть право власності на root: netns та надайте групі чи / exec можливості групи.

Іншими словами:

# 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

Рішення 2

Це рішення простіше, ви повинні відредагувати файл sudoers, як показано в цьому прикладі .

user ALL=(ALL) /bin/ip netns

Ну, рішення 1 неможливо, команда ip netnsповерне помилку, сказавши, що виконувати її може тільки root. Рішення 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і дозвольте користувачам виконувати його.


Дякуємо за вашу відповідь (і вибачте, що помітили через кілька місяців). Але проблема залишається тією ж, тобто з використанням судо.
Raspbeguy

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.