![]() |
![]() ![]() |
![]() |
-Paranoid Android- |
![]()
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. |
|
|
![]()
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.
|
|
|
-Paranoid Android- |
![]() ![]()
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? |
|
|
![]()
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.
|
|
|
-Paranoid Android- |
![]()
Post
#5
|
Goście ![]() |
ok za chwile sprawdzę i dam odpowiedz
|
|
|
-Paranoid Android- |
![]()
Post
#6
|
Goście ![]() |
niestety sudo chown www-data:www-data skrypt.php nie pomogło
|
|
|
![]()
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/
|
|
|
![]()
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 |
|
|
![]()
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ść- |
![]()
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 |
|
|
![]()
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 |
|
|
![]()
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ę.
|
|
|
![]()
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 |
|
|
![]()
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: i nie będziesz musiał jakiś pośredniczących proxy-skryptów w shellu robić do tego. |
|
|
![]()
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) |
|
|
![]()
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ę.
|
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 13:40 |