ใครช่วยฉันค้นหาสิ่งที่เกิดขึ้นที่นี่? ฉันมีกฎบางอย่างที่ตั้งค่าการติดตามจำนวนแพ็กเก็ต เมื่อฉันเรียกใช้สคริปต์ต่อไปนี้เป็น root:
#!/bin/bash
iptables -t mangle -xnvL
ฉันได้รับผลลัพธ์ที่ฉันคาดหวัง:
//snip
233203 199929802 MARK //blah blah blah
//snip
อย่างไรก็ตามฉันต้องการเรียกใช้สิ่งนี้เป็นส่วนหนึ่งของ cacti ซึ่งทำงานเป็น apache ตอนนี้ apache ไม่สามารถเรียกใช้ iptables ได้ซึ่งเป็นสาเหตุที่ฉันมีสคริปต์ ฉันตั้งค่าเป็นรูท SUID :
-rwsr-sr-x 1 root root 37 May 14 23:06 iptables_packet_report.sh
แต่ฉันจะได้ผลลัพธ์นี้:
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.
เห็นได้ชัดว่าเคอร์เนลของฉันไม่เป็นไรและความจริงที่ว่าฉันใช้มันในฐานะที่ไม่ใช่รูททำให้เกิดปัญหา แต่ฉันไม่เข้าใจว่าทำไม ฉันตรวจสอบ SUID อีกครั้งด้วย [การสาธิต] ( http://en.wikipedia.org/wiki/Setuid#Demonstrationและยืนยันว่ามันใช้งานได้)
server # sudo -u apache ./printid
Real UID = 81
Effective UID = 0
Real GID = 81
Effective GID = 0
เป้าหมายสุดท้ายของฉันคือการรับเอาท์พุทของ iptables -t mangle -xnvL ในขณะที่ทำงานเป็น apache ดังนั้นฉันสามารถใช้ cacti เพื่อทำกราฟให้ได้ทั้งหมด