Mam okrutny problem z funkcja exec(). Mam formularz uploadu pliku na serwer, po ktorym to uploadzie odebrany plik powinien byc przeskanowany na okolicznosc wirusow. Wybralem mks-a (statycznego) ale problem dotyczy zdaje sie kazdej binarki.
Na stronie php o wykonywaniu programow sa wyszczegolnione funkcje shell_exec() i exec().
Przy tej pierwszej jest napisane, ze: "Execute command via shell..." a o tej drugiej, ze po prostu execute. Byc moze wysuwam zbyt daleko idace wnioski, ale wynikaloby z tego, ze ta druga shella nie potrzebuje.
Otoz ja _nie_mam_ shella. Strona stoi w chrootowanym srodowisku, w ktorym shella nie ma i nie bedzie. I tu pojawia sie problem. Jesli wgram /bin/sh ponizszy kod dziala swietnie:
<? $mksBinarka = '/bin/mks32'; $podejrzanyPlik = '/tmp/jakis.plik'; ?>
Kiedy jednak usune powloke - $mksKodPowrotu zwraca 127 (wszystkie mozliwe bledy na raz) i procz tego nie dzieje sie nic. Literalnie nic. Zadnych wpisow do logow, nic.
Jesli wywolam mks-a chrootem (wciaz bez tego nieszczesnego shella) - skanuje az milo.
Czy ktos z Was ma moze jakis pomysl jak to razem pozenic? Czy jest jakas metoda, zeby:
1. php uruchomil proces zewnetrzny bez powloki i
2. Poczekal na zakonczenie tego procesu i przyjal od niego kod powrotu.
Pozdrowienia,
Podlamany mimo.
Aha, rzecz sie dzieje na Debianie i Slackware, php 4.3.3 i 4.3.8. php jako modul apacha...