J'ai un programme qui lit et écrit les packages vers / depuis les interfaces réseau, et normalement je me rappendais dans le file sudoers et lancerais le programme comme ceci:
sudo ./bridge
Mais maintenant, j'ai besoin de plusieurs users pour exécuter ce programme, mais sans leur donner de droits sudo, afin qu'ils puissent exécuter le programme comme ceci:
./bridge
Est-ce que quelqu'un sait comment puis-je accomplir ceci? Je cours Scientific Linux 6.1 sur une plate-forme 64 bits, si cela aide.
Merci, Claudiu
Ajoutez une règle sudo pour permettre à cet user d'exécuter votre script. Exécutez visudo
et ajoutez quelque chose comme ceci au file sudoers
:
Defaults!/path/to/bridge env_reset alice, bill ALL = (root) /path/to/bridge
Notez que son permet aux users de passer n'importe quel argument au programme /path/to/bridge
. Ajouter ""
à la fin de la ligne pour interdire de passer des arguments.
Pour faciliter la gestion des users, vous pouvez préférer définir un groupe d'users autorisés à contrôler le pont. Remplacez alice, bill
par %bridgers
où bridgers
est le nom du groupe.
Dans le programme de bridge
, $SUDO_UID
est l'ID user de l'user qui a appelé sudo
. Si le programme requirejs que l'user soit dans la variable USER
, écrivez un petit script shell wrapper qui définit USER=$SUDO_UID
.
Vous pouvez limiter dans sudoers les commands autorisées à s'exécuter avec sudo.
Écrivez un petit script ./bridge
qui appelle sudo ./real-bridge
et donnez aux users le droit d'exécuter ./real-bridge en tant que root via sudo.
Je ne suis pas sûr si cela fonctionne avec des périphériques eth, mais ces gens le font avec des appareils tun.
$ tail -n1 /etc/udev/rules.d/20-kvm.rules KERNEL=="tun", NAME="net/%k", GROUP="mygoodusers", MODE="0660"
Voir – GROUP = "mygoodusers", MODE = "0660" – sur cette ligne. Bien sûr, vous devez mettre chaque user dans ce groupe.
udevadm control --reload-rules
mais jusqu'au redémarrage, vous devez chmod / chown manuellement.