J'ai une architecture utilisant des espaces de noms réseau (netns). Je voudrais permettre aux utilisateurs réguliers d'effectuer certaines opérations dans ces réseaux.
Je pourrais écrire un script netns-exec.sh
, inspiré de ce post , exécuté avec sudo
, contenant:
ip netns exec $1 su $USER -c "$2"
et ajouter à mon fichier sudoer:
user ALL=(ALL) /path/to/netns-exec.sh
Mais je le trouve si moche que je pourrais totalement faire des cauchemars à ce sujet. Existe-t-il une meilleure solution pour permettre aux utilisateurs réguliers d'utiliser des espaces de noms? Est-il possible de placer les utilisateurs dans certains groupes utiles? J'ai cherché mais je n'ai rien trouvé.
sudo
root
privileges
network-namespaces
Raspbeguy
la source
la source
Cmd_Alias CMD_NETNS = ip netns exec [regexp matching your namespace] su [regexp matching allowed used] -c [regexp matching allowed namespace command]
dans votre fichier sudoers puis créer un groupe dans lequel vous placez vos utilisateurs autorisés et associer ce groupe à cet alias de commande.sudo
contenantsu
qui m'ennuie, pas le script lui-même. Quoi qu'il en soit, je vais écrire un script pour envelopper la chose. Ça fait 2 changements d'utilisateur, c'est vraiment moche, tu ne crois pas?sudo
fourni une variable spécifique$SUDO_USER
, qui est plus sûre. Mais c'est toujours moche.Réponses:
Solution 1
Ajoutez simplement un groupe appelé "netns", ajoutez-y tous les utilisateurs souhaités. Donnez ensuite la propriété à root: netns et donnez des capacités de lecture / exécution au groupe.
En d'autres termes :
Solution 2
Cette solution est plus simple, vous devez éditer votre fichier sudoers comme indiqué dans cet exemple .
la source
ip netns
renverra une erreur indiquant que seul root peut l'exécuter. La solution 2 est ce que j'avais à l'esprit au départ, mais n'était pas satisfaisante à mon avis.chmod 0633
donnerait deswrite+execute
autorisations à tous les utilisateurs et aunetns
groupe. Je soupçonne que vous vouliez définir le bit SGID sur le script, mais comme @Angelo l'a mentionné:setuid
etsetgid
est ignoré pour les scripts shell, et pour une bonne raison .Personnellement, je ne sais pas s'il est possible d'autoriser des utilisateurs réguliers à exécuter des commandes dans différents espaces de noms de réseau, mais ce script shell annoté peut mieux répondre à vos besoins:
Installez-le quelque part
/usr/bin
et laissez vos utilisateurs l'exécuter.la source
Firejail peut faire le travail
Sinon, Netns-Exec , Nsutils et Netns ne nécessitent pas de racine
la source