Adakah yang bisa membantu saya mencari tahu apa yang sedang terjadi di sini? Saya punya beberapa aturan mengatur jumlah paket pelacakan. Ketika saya menjalankan skrip berikut sebagai root:
#!/bin/bash
iptables -t mangle -xnvL
Saya mendapatkan output yang saya harapkan:
//snip
233203 199929802 MARK //blah blah blah
//snip
Namun, saya ingin menjalankan ini sebagai bagian dari kaktus, yang berjalan sebagai apache. Sekarang apache tidak dapat menjalankan iptables, itulah sebabnya saya memiliki skrip. Saya mengaturnya sebagai SUID root :
-rwsr-sr-x 1 root root 37 May 14 23:06 iptables_packet_report.sh
Tapi kemudian saya mendapatkan output ini:
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.
Jelas kernel saya baik-baik saja, dan fakta bahwa saya menjalankannya sebagai non-root mengacaukan sesuatu, tetapi saya tidak mengerti mengapa. Saya memang mengecek SUID dengan [demonstrasi] ( http://en.wikipedia.org/wiki/Setuid#Demonstration dan mengonfirmasi itu berhasil.
server # sudo -u apache ./printid
Real UID = 81
Effective UID = 0
Real GID = 81
Effective GID = 0
Tujuan akhir saya adalah untuk mendapatkan output dari iptables -t mangle -xnvL saat berjalan sebagai apache sehingga saya dapat menggunakan kaktus untuk membuat grafik dengan baik.
Saya pikir solusi christian adalah yang terbaik, tetapi jika Anda benar-benar ingin, Anda dapat mengkompilasi skrip menggunakan shc dan kemudian setuid root pada program yang dikompilasi.
sumber