Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Linux/PHP
Forum PHP.pl > Forum > Przedszkole
Dominis
Witam.

Piszę pomocny panel do dodawania uzytkowników do sieci(udostępnianie internetu). Głównie skrypt ładuje z bazy danych dane (formułki iptables itd) do plików mac, htb, htb_dzien, htb_noc...

I teraz mój problem. Po zapisaniu tych plików na serwerze, trzeba je przeładować(odpalić), z konsoli robi sie to bardzo prosto, wpisujemy "./mac"(jeśli jestesmy w katalogu /etc/init.d) i tak z każdym plikiem. I wszystko działa, ale chciałem żeby ten pliki automatycznie się "przeładowywały" ze skryptu php.

Do tego użyłem funkcje exec:

Kod
exec('../../../etc/init.d/mac');

i tak z kolejnymi plikami pokoleji.
Niestety nie wykonuje mi tego pliku.

to napisałem mały prosty skrypt pod basha, żeby sprawdzić czy funkcja exec działa na serwerze:
Kod
#!/bin/sh

cd /etc/init.d;./mac
cd /etc/init.d;./htb_dzien

echo 'lol';


z php uruchamiam to funkcja exec:
Kod
exec('./panel.sh', $ans)
foreach($ans as $line)
{
echo $line;
}


Na stronie wyświetla mi się tylko lol, niestety dalej nie odpala tych plików, a jak wykonuje ten skrypt z terminala
Kod
./panel.sh

to oczywiście działa.

Prawa dostepu na czas testu ustawiłem na 777, do katalogów, jak i plików, gdzie znajdują sie mac, htb... jak i cały katalgo www.

Mam nadzieję ze dobrze wytłumaczyłem, na czym polega problem.
Z góry dziękuje za zainteresowanie.
wipo
A nie prościej połączyć się z ssh i wykonać skrypt?
Dla przykładu
thek
Ja bym Ci radził sprawdzić z jakimi uprawnieniami ten skrypt idzie winksmiley.jpg W końcu przeładowanie plików systemowych nie może być robione przez każdą usługę "jak leci". Zapewne system nie pozwala tego zrobić procesow bo wykrywa on brak uprawnień. Stąd w konsoli jako uprawniony user możesz to zrobić, ale już skrypt idący z uprawnieniami Apache'a takich praw nie posiada i stąd niby wszysto ok, a jednak nie OK. Wiem, że pisałeś o nadaniu 777 wszystkiemu, ale nie wiem czy proste zmiany z użyciem chmod mimo wszystko pozwolą na operacje na tak proste obejście.
Dominis
Dzięki za zaintertesowanie;)

thek, wydaje mi się, że sprawdziłem wszystkie uprawnienia.. Nadałem im jak juz pisalem 777, wlasciciela i grupe dałem www-data, taka nazwa wchodzi serwer wwww.

wipo, pewnie by było prościej, niestety na serwerze z tego co widze nie ma biblioteki ssh, bede musiał chyba sie pomęczyc i doinstalowac, jak nie znajde innego rozwiazania.

Pozdrawiam
gothye
wykonałem podobny skrypt do obsługi iptables i kolejkowania za pomoca htb/hfsc z tym ze dane z poziomu www za pomocą php wzucam do SQL a uruchamianie i działanie firewall zajmuje sie skrypt w perlu który oczywiscie mogę uruchamiac / restartowac z poziomu www zaoszczedziło mi to wiele pracy i polecam takie rozwiązanie winksmiley.jpg
ucho
Cytat(Dominis @ 15.02.2010, 09:07:06 ) *
thek, wydaje mi się, że sprawdziłem wszystkie uprawnienia.. Nadałem im jak juz pisalem 777, wlasciciela i grupe dałem www-data, taka nazwa wchodzi serwer wwww.

To nie tak działa. Zobacz uprawnienia np. pliku /usr/bin/sudo : Właściciel root, grupa root, uprawnienia :755, ustawiony bit suid. Czyli: każdy może odpalić ten plik, i uruchomionemu plikowi zostaną nadane uprawnienia roota. Samo 777 nie wystarczy - plik się uruchomi ale nadal nie będzie mógł grzebać w iptables, bo nadal będzie miał tylko uprawnienia www-data
Dominis
Dziękuje wszystkim za pomoc, problem chyba rozwiązany.

Posłuchałem 'ucho' i użyłem sudo.

nie wiem na ile to jest bezpieczne co zrobilem, ale działa...

w /etc/sudoers dopisalem:
Kod
www-data ALL= NOPASSWD: /etc/init.d/mac
www-data ALL= NOPASSWD: /etc/init.d/htb_dzien


a potem w php:
Kod
system("sudo /etc/init.d/htb_dzien");
system("sudo /etc/init.d/mac");


Pozdrawiam, Dominik
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.