Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [bash][PHP], shell_exec? do uruchomienia komendy wywołującej działanie na serwerze
-Paranoid Android-
post
Post #1





Goście







Witam
Mam mały problem z uruchamianiem poleceń w bash z poziomu strony internetowej napisanej w php.
Generalnie polecenia wyświetlające dane np $ls , $date itp działają prawidłowo tzn wysyłają odpowiedź na przeglądarkę.
Problem natomiast jest w tym ze chce stworzyć php które będzie uruchamiał komendę na serwerze na którym jest postawiona ów strona.
Np prosty skrypt uruchamiający wysuwanie tacki CD po wcześniejszym kliknięciu na przycisku w stronie PHP .
Niestety nie działa.

CODE
<?
echo (shell_exec("eject"));
?>


Rozumiem że może to być kwestia uprawnień w systemie linux
Próbowałem nadać wszystkim plikom $chmod 777 oraz $chmod +x
Niestety bezskutecznie
Proszę o pomoc. PARANOID ANDROID
PS
GOOGLE w tym temacie zawiodło.
Go to the top of the page
+Quote Post
piotrooo89
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




jak mogłeś nadać wszystkiemu 777? toż to przestanie działać system, a co do tego polecenia, być może użytkownik www-data nie jest uprawniony do wykonania go? możesz spróbować uruchamiać takie polecenie przez sudo ale nie wiem czy jest to najlepsze rozwiązanie.
Go to the top of the page
+Quote Post
-Paranoid Android-
post
Post #3





Goście







Nie wszystkim w systemie tylko w katalogu public_html i to tylko na test
Czy jak dodam www-data do grupy to będę miał automatycznie uprawnienia do wykonania z poziomu strony php?
Go to the top of the page
+Quote Post
piotrooo89
post
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




przypuszczam że tak (nie sprawdziłem tego) tylko wtedy wykonanie będziesz musiał zrobić za pomocą sudo polecenie.
Go to the top of the page
+Quote Post
-Paranoid Android-
post
Post #5





Goście







ok za chwile sprawdzę i dam odpowiedz
Go to the top of the page
+Quote Post
-Paranoid Android-
post
Post #6





Goście







niestety sudo chown www-data:www-data skrypt.php nie pomogło
Go to the top of the page
+Quote Post
piotrooo89
post
Post #7


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




ale tu nie chodzi o takie nadanie praw, tylko takie: http://jakilinux.org/administracja/tajniki-pliku-sudoers/
Go to the top of the page
+Quote Post
Paranoid Android
post
Post #8





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 16.01.2012

Ostrzeżenie: (0%)
-----


ok sprawdzam

niestety po edycji visudo nic nie pomogło
Go to the top of the page
+Quote Post
piotrooo89
post
Post #9


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




1. sprawdź co masz w error.log w apache
2. www-data ALL = NOPASSWD:/usr/bin/eject taki wpis musisz mieć w sudoers

u mnie to działa.
Go to the top of the page
+Quote Post
-Gość-
post
Post #10





Goście







eject: unable to open `/dev/sr0'
[Tue Jan 17 17:19:38 2012] [error] [client 127.0.0.1] File does not exist: /home/paranoidandroid/Publiczny/www/favicon.ico

Wygląda na to ze chce wysłać sygnał do /dev/sr0 czyli cdrom ale tak jak by nie widział sprzętu
PS
Sprawdzałem w systemie i sprzęt jest ok
Go to the top of the page
+Quote Post
Paranoid Android
post
Post #11





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 16.01.2012

Ostrzeżenie: (0%)
-----


ls -l /dev/
brw-rw----+ 1 root cdrom 11, 0 2012-01-17 17:06 sr0

Zmieniłem komende eject na killall conky (zabijanie procesów conky).
Właczyłem conky
Uruchamiam index.php i nic sie niedzieje a $cat /var/log/apache2/error.log wyrzuca
conky(2986): Operation not permitted
conky: no process found

Jakieś pomysły?

PS znalazłem tez informacje ze można obejść problem zastępując bezpośrednio PHP>BASH na PHP>C++>BASH
Go to the top of the page
+Quote Post
piotrooo89
post
Post #12


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




miałem ten sam problem, ale wpis w /etc/sudoers i wywołanie polecenia za pomocą sudo pomogło. pokaż jakie masz wpisy w sudoer i jak wywołujesz komendę.
Go to the top of the page
+Quote Post
Paranoid Android
post
Post #13





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 16.01.2012

Ostrzeżenie: (0%)
-----


Wpis w /etc/sudoers przy pomocy $sudo visudo

www-data ALL=(ALL) NOPASSWD: /usr/bin/sudo -u użytkownik /home/użytkownik/ścieżka_docelowa/skrypt.sh

Jako użytkownika mam wpisanego tego na którym jest postawiony serwer apache
index.php
CODE
<?
echo shell_exec("sh /home/użytkownik/ścieżka_docelowa/skrypt.sh");
?>


skrypt.sh zawiera prosta komendę :
eject lub killall cośtam itp

Ten post edytował Paranoid Android 17.01.2012, 20:34:50
Go to the top of the page
+Quote Post
piotrooo89
post
Post #14


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




no to wy edytuj z poziomu sudo, np: sudo vim /etc/sudoers dodając taką linie:

Kod
www-data ALL = NOPASSWD:/usr/bin/eject


i później w php, z poziomu apache:

  1. exec("sudo eject");


i nie będziesz musiał jakiś pośredniczących proxy-skryptów w shellu robić do tego.
Go to the top of the page
+Quote Post
Paranoid Android
post
Post #15





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 16.01.2012

Ostrzeżenie: (0%)
-----


Wiem do czego zmierzasz tylko nie wiem co masz na myśli "edytować php z poziomu apache"?
(IMG:style_emoticons/default/wstydnis.gif)
Go to the top of the page
+Quote Post
piotrooo89
post
Post #16


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




chodziło mi o odpalenie z poziomu apache czyli wpisując adres w przeglądarkę.
Go to the top of the page
+Quote Post
Paranoid Android
post
Post #17





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 16.01.2012

Ostrzeżenie: (0%)
-----


Tak trafiłeś w sedno
Edycja z poziomu przeglądarki wystarczyła żeby zadziałało
Dzięki za pomoc (IMG:style_emoticons/default/specool.gif) .
Dla zainteresowanych podaje krótki skrypt edytora php uruchamianego w przeglądarce

edytuj.php
CODE
<?php
$katalog = opendir("./");
while ($plik = strtolower(readdir($katalog))) {
if ($plik<>"." && $plik<>".." && $plik<>"edytuj.php" ) $lista[]=$plik;
}
closedir($katalog);
if (count($lista)>0) {
echo "Wybierz plik do edycj:";
sort($lista);
}

for ($i=0;$i<count($lista);$i++) {
echo "<br />Edytuj plik <b>$lista[$i]</b> <a href=\"edytuj.php?edycja=$lista[$i]\">Edytuj plik</a>";
}


// zmiana zawartosci pliku
$edycja = $_REQUEST["edycja"];
if (isset($_POST["tekst"]) && file_exists($edycja)) {
$f = fopen($edycja, "w");
fputs($f, stripslashes($_POST["tekst"]));
fclose($f);
}



// umieszczenie pliku w formularzu
if ($edycja<>"" && file_exists($edycja)) {
echo "<p> </p>Edycja plik: <b>$edycja</b>";
echo '<form action="edytuj.php" method="post"><input type="hidden" name="edycja" value="'.$edycja.'" /><textarea name="tekst" rows="20" cols="50">';
$f = fopen($edycja,"r");
while(!feof($f)) echo fread($f,1024);
fclose($f);
echo '</textarea><input type="submit" value="Zapisz" /></form>';
}
?>


PS
Plik nazywamy edytuj.php nie inaczej
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 13:40