Que script pode permitir que usuários comuns usem namespaces de rede?

20

Eu tenho uma arquitetura usando namespaces de rede (netns). Eu gostaria de permitir que usuários regulares fizessem algumas operações nesses netns.

Eu poderia escrever um script netns-exec.sh , inspirado por este post , executado com sudo , contendo:

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

e adicione ao meu arquivo sudoer:

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

Mas eu acho tão feio que eu poderia ter pesadelos com isso. Existe uma solução melhor para permitir que usuários regulares usem namespaces? É possível colocar usuários em alguns grupos úteis? Eu pesquisei sobre isso, mas não encontrei nada.

    
por Raspbeguy 14.09.2015 / 11:24

2 respostas

1

Solução 1

Basta adicionar um grupo chamado "netns" para adicionar todos os usuários desejados a ele. Em seguida, dê a propriedade ao root: netns e forneça recursos de leitura / execução ao grupo.

Em outros termos:

# 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

Solução 2

Esta solução é mais simples, você tem que editar seu arquivo sudoers como mostrado em este exemplo .

user ALL=(ALL) /bin/ip netns
    
por 18.05.2017 / 21:39
0

Pessoalmente, não sei se existe a possibilidade de permitir que usuários regulares executem comandos em namespaces de rede diferentes, mas esse script de shell anotado pode atender melhor às suas necessidades:

#!/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

Instale-o em algum lugar em /usr/bin e permita que seus usuários o executem.

    
por 28.11.2016 / 05:25