Alguém pode me ajudar a descobrir o que está acontecendo aqui? Eu tenho algumas regras configuradas para controlar a contagem de pacotes. Quando executo o seguinte script como root:
#!/bin/bash
iptables -t mangle -xnvL
Recebo a saída que espero:
//snip
233203 199929802 MARK //blah blah blah
//snip
No entanto, quero executar isso como parte dos cactos, que funcionam como apache. Agora o apache não pode executar o iptables, e é por isso que tenho o script. Eu o configurei como raiz SUID :
-rwsr-sr-x 1 root root 37 May 14 23:06 iptables_packet_report.sh
Mas então eu recebo esta saída:
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.
Obviamente meu kernel está bem, e o fato de eu estar rodando como não-root está atrapalhando algo, mas não entendo o porquê. Eu verifiquei o SUID com [a demonstração] ( http://en.wikipedia.org/wiki/Setuid#Demonstration) e confirmei que estava funcionando.
server # sudo -u apache ./printid
Real UID = 81
Effective UID = 0
Real GID = 81
Effective GID = 0
Meu objetivo final é obter a saída do iptables -t mangle -xnvL enquanto estiver rodando como apache, para que eu possa usar cactos para representar graficamente tudo isso.
Eu acho que a solução do christian é a melhor, mas se você realmente quiser, pode compilar o script usando shc e, em seguida, setuid root no programa compilado.
fonte