Czy ktoś może mi pomóc dowiedzieć się, co się tutaj dzieje? Mam kilka zasad konfigurowania śledzenia pakietów. Kiedy uruchamiam następujący skrypt jako root:
#!/bin/bash
iptables -t mangle -xnvL
Otrzymuję oczekiwany wynik:
//snip
233203 199929802 MARK //blah blah blah
//snip
Chcę jednak uruchomić to jako część kaktusów, które działają jako apache. Teraz apache nie może uruchamiać iptables, dlatego mam skrypt. Ustawiłem go jako root SUID :
-rwsr-sr-x 1 root root 37 May 14 23:06 iptables_packet_report.sh
Ale potem otrzymuję ten wynik:
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.
Oczywiście moje jądro jest w porządku, a fakt, że uruchamiam go jako inny niż root, psuje coś, ale nie rozumiem dlaczego. Dokładnie sprawdziłem SUID za pomocą [demonstracji] ( http://en.wikipedia.org/wiki/Setuid#Demonstration i potwierdziłem, że działa.
server # sudo -u apache ./printid
Real UID = 81
Effective UID = 0
Real GID = 81
Effective GID = 0
Moim celem końcowym jest uzyskanie wyniku działania iptables -t mangle -xnvL podczas działania jako apache, dzięki czemu mogę używać kaktusów, aby ładnie to przedstawić.
Myślę, że rozwiązanie Christiana jest najlepsze, ale jeśli naprawdę tego chcesz, możesz skompilować skrypt za pomocą shc, a następnie setuid root na skompilowanym programie.
źródło