Eu tenho uma arquitetura usando namespaces de rede (netns). Gostaria de permitir que usuários regulares realizem algumas operações nesses netns.
Eu poderia escrever um script netns-exec.sh
, inspirado neste 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 acho tão feio que eu poderia ter pesadelos sobre isso. Existe uma solução melhor para permitir que usuários comuns usem namespaces? É possível colocar os usuários em alguns grupos úteis? Eu procurei, mas não encontrei nada.
sudo
root
privileges
network-namespaces
Raspbeguy
fonte
fonte
Cmd_Alias CMD_NETNS = ip netns exec [regexp matching your namespace] su [regexp matching allowed used] -c [regexp matching allowed namespace command]
no arquivo sudoers e cria um grupo no qual coloca os usuários permitidos e associa esse grupo a esse alias de comando.sudo
contém umsu
que me incomoda, não o próprio script. De qualquer forma, vou escrever um script para embrulhar a coisa. Faz 2 comutadores de usuário, isso é realmente feio, você não acha?sudo
fornecia uma variável específica$SUDO_USER
, que é mais segura. Mas isso ainda é feio.Respostas:
Solução 1
Basta adicionar um grupo chamado "netns" e adicionar todos os usuários desejados. Em seguida, forneça propriedade para root: netns e forneça recursos de leitura / execução ao grupo.
Em outros termos:
Solução 2
Esta solução é mais simples, você deve editar o arquivo sudoers, conforme mostrado neste exemplo .
fonte
ip netns
retornará um erro dizendo que somente o root pode executá-lo. A solução 2 é o que eu tinha inicialmente em mente, mas não foi satisfatório na minha opinião.chmod 0633
dariawrite+execute
permissões a todos os usuários e aonetns
grupo. Eu suspeito que você desejou definir o bit SGID no script, mas como o @Angelo mencionou:setuid
esetgid
é ignorado pelos scripts de shell, e por boas razões .Pessoalmente, não sei se existe a possibilidade de permitir que usuários comuns executem comandos em diferentes namespaces de rede, mas esse shell script anotado pode atender melhor às suas necessidades:
Instale-o em algum lugar
/usr/bin
e permita que seus usuários o executem.fonte
Firejail pode fazer o trabalho
Como alternativa, o Netns-Exec , o Nsutils e o Netns não requerem root
fonte