Dobra
Więc mam rozwiązanie (troche mi to zajęło, ale....) problemu
jak odpalic niceshapera przez WWW z uruchomionym APACHE + PHP jako 'nobody'.
PHP działa w trybie 'SAFE_MODE' więc było trudniej.
1. tworzymy katalog dla komend, tóre ma wykonywać PHP i nadajemy prawa dostepu.
mkdir www.cmd
chown nobody:nobody www.cmd
2. Linkujemy tam dwa pliki, które nasz skrypt ma wykonywać:
ln -s /usr/bin/niceshaper
ln -s /usr/bin/sudo
3. W pliku /etc/sudoers w sekcji: user privilege dopisujemy:
#user privilege specification
nobody ALL = (root) NOPASSWD: /usr/bin/niceshaper, /usr/bin/sudo
4. Teraz w PHP.INI wskazujemy scieżkę do tego katalogu.
Ponieważ php jest w safe_mode, więc tylko programy z tej scieżki będą wykonywane.
sefe_mode_exec_dir=/nasza/ścieżka/do/katalogu/www.cmd
W moim przypadku to:
safe_mode_exec_dir=/var/www.cmd
5. Wyłączamy tworzenie pliku statystyk przez niceshapera w configu:
stats unit kbit #dump 5c file /home/html/stats/nsstats.txt
6. Teraz piszemy sobie skrypcik w php np.: nice.php w katalogu głównym stron www:
<?php
// otwieranie strumienia
$pp=popen('sudo niceshaper stats','r');
$dane=fread($pp,2048);
pclose($pp);
// zapis danych ze strumienia do pliku (jeżeli ktoś potrzebuje)
$fp = fopen("./stats/nsstats.txt","w");
fwrite($fp, $dane);
fclose($fp);
// odczyt statystyk z pliku
// tutaj można dodać dowolny skrypt obrabiający dane
// teraz jest tylko wypisanie ich na stronie
$plik=file("./stats/nsstats.txt");
foreach($plik as $linia) {
echo($linia);
echo("<br>");
}
?>
7. Restartujemy APACHE, NICESHAPER
8. teraz tylko w przeglądarce wpisujemy
www://adres.naszego.serwera/nice.php
i obserwujemy wyniki
Działa to zgodnie z tym co chciał -MW-,
statystyki są generowane na żądanie w momencie wywołania skryptu.