Quelqu'un peut-il m'aider à savoir ce qui se passe ici? J'ai des règles configurées pour suivre le nombre de paquets. Lorsque j'exécute le script suivant en tant que root:
#!/bin/bash
iptables -t mangle -xnvL
J'obtiens la sortie que j'attends:
//snip
233203 199929802 MARK //blah blah blah
//snip
Cependant, je veux l'exécuter dans le cadre de cactus, qui fonctionne comme apache. Maintenant, apache ne peut pas exécuter iptables, c'est pourquoi j'ai le script. Je l'ai configuré en tant que racine SUID :
-rwsr-sr-x 1 root root 37 May 14 23:06 iptables_packet_report.sh
Mais alors j'obtiens cette sortie:
server # sudo -u apache ./iptables_packet_report.sh
iptables v1.4.2: can't initialize iptables table `mangle': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
Évidemment, mon noyau va bien, et le fait que je l'exécute en tant que non root gâche quelque chose, mais je ne comprends pas pourquoi. J'ai vérifié le SUID avec [la démonstration] ( http://en.wikipedia.org/wiki/Setuid#Demonstration et confirmé qu'il fonctionnait.
server # sudo -u apache ./printid
Real UID = 81
Effective UID = 0
Real GID = 81
Effective GID = 0
Mon objectif final est d'obtenir la sortie de iptables -t mangle -xnvL tout en fonctionnant en tant qu'apache afin que je puisse utiliser des cactus pour bien représenter tout cela.
Je pense que la solution de christian est la meilleure, mais si vous le vouliez vraiment, vous pouvez compiler le script en utilisant shc puis setuid root sur le programme compilé.
la source