Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki od 1 do 10 z 20

Temat: [+] Uruchamianie skryptu bash przez PHP

  1. #1

    [+] Uruchamianie skryptu bash przez PHP

    Witam.
    Mam problem z uruchomieniem skryptu bash przez php. Zawartość pliku sudo zdaje mi się, że jest istotna:
    Kod:
    Defaults    env_reset
    Defaults:www-data !requiretty
    # Host alias specification
    
    # User alias specification
    
    # Cmnd alias specification
    
    # User privilege specification
    root    ALL=(ALL) ALL
    www-data    ALL=NOPASSWD: /home/ts3/test1.sh
    
    
    # Allow members of group sudo to execute any command after they have
    # provided their password
    # (Note that later entries override this, so you might need to move
    # it further down)
    %sudo ALL=(ALL) ALL
    #
    #includedir /etc/sudoers.d
    Skrypt bash:
    Kod:
    #!/bin/bash
    mkdir /home/ts3/folder
    Skrypt php:
    Kod:
    <?PHP
    $control = Array();
    
    exec('sudo sh /home/ts3/test1.sh 2>&1', $control);
    echo 'skrypt zostal wykonany';
      var_dump($control);
    ?>
    To co wyświetla skrypt php:
    Kod:
    skrypt zostal wykonanyarray(1) { [0]=> string(53) "sudo: no tty present and no askpass program specified" }
    I teraz ważne pytanie, w czym jest problem? Skrypt bash działa gdy go uruchamiam z jakiegokolwiek konta użytkownika, więc w nim nie ma problemu. Z tego co jest w logach wynika, że sudo nie może się zapytać o hasło. Więc jak zrobić aby nie pytał się o hasło.
    Ostatnio edytowane przez fnmirk ; 18-10-2011 o 22:12

  2. #2
    Senior Member Avatar Bastian
    Na Forum od
    Mar 2008
    Skąd
    Poznañ
    Postów
    1,417
    Wpisy
    6
    Spróbuj wywoływac tak

    Kod:
    sudo -tt sh /home/ts3/test1.sh 2>&1
    albo wyłącz selinux

  3. #3
    Kod:
    <?PHP
    $control = Array();
    
    exec('sudo -tt sh /home/ts3/test1.sh 2>&1', $control);
    echo 'skrypt zostal wykonany';
      var_dump($control);
    ?>
    Wyświetla mi coś takiego:
    Kod:
    skrypt zostal wykonanyarray(8) {   [0]=>   string(34) "usage: sudo -h | -K | -k | -L | -V"   [1]=>   string(34) "usage: sudo -v [-AknS] [-p prompt]"   [2]=>   string(75) "usage: sudo -l[l] [-AknS] [-g groupname|#gid] [-p prompt] [-U username] [-u"   [3]=>   string(56) "            username|#uid] [-g groupname|#gid] [command]"   [4]=>   string(67) "usage: sudo [-AbEHknPS] [-C fd] [-g groupname|#gid] [-p prompt] [-u"   [5]=>   string(78) "            username|#uid] [-g groupname|#gid] [VAR=value] [-i|-s] []"   [6]=>   string(66) "usage: sudo -e [-AknS] [-C fd] [-g groupname|#gid] [-p prompt] [-u"   [7]=>   string(35) "            username|#uid] file ..." }
    Nie mogę wyłączyć Selinux bo nie chce stracić na bezpieczeństwie.
    Ostatnio edytowane przez fnmirk ; 19-10-2011 o 18:21

  4. #4
    Senior Member Avatar Bastian
    Na Forum od
    Mar 2008
    Skąd
    Poznañ
    Postów
    1,417
    Wpisy
    6
    Plik sudoers edytujesz przez visudo?
    Ostatnio edytowane przez fnmirk ; 19-10-2011 o 19:05

  5. #5
    Tak, przez visudo.
    Ostatnio edytowane przez fnmirk ; 19-10-2011 o 19:05

  6. #6
    Senior Member Avatar Bastian
    Na Forum od
    Mar 2008
    Skąd
    Poznañ
    Postów
    1,417
    Wpisy
    6
    Cytat z podręcznika php funkcji exec():

    There are (perhaps insurmountable) difficulties when trying to execute sudo commands from a PHP script and from an external script called by PHP on SELinux enabled machines.

    SELinux won't let apache change the group id of the process by default.

    You may need to use another solution, like make the PHP script deposit a file in a directory which is monitored by cron or inotify and which will call another script with root privileges.
    Ostatnio edytowane przez Bastian ; 19-10-2011 o 23:00 Powód: niescisłość

  7. #7
    Dużo mi to nie mówi. Mam napisać kolejny skrypt, który uruchomi skrypt?
    Ostatnio edytowane przez fnmirk ; 20-10-2011 o 20:32

  8. #8
    Senior Member Avatar Bastian
    Na Forum od
    Mar 2008
    Skąd
    Poznañ
    Postów
    1,417
    Wpisy
    6
    Jeżeli chcesz wykonywać coś przez sudo, to musisz napisać skrypt, który będzie tworzył skrypt basha, a cron okresowo będzie go wykonywał jako root. Możesz też dać uprawnienia do tego skryptu serwerowi apache bezpośrednio i wywoływać bez sudo.
    Ostatnio edytowane przez fnmirk ; 20-10-2011 o 22:39

  9. #9
    No tak, tylko że będę potrzebował wykonywać skrypty, które wymagają uprawnień roota np. adduser/deluser itp., itd. Więc sudo i tak będę musiał używać. SUID/GUID, zrobić właścicielem roota i wykonywać jako właściciel? Nie wychodziło mi to ale może ktoś dzięki temu wpadnie na pomysł.
    Ostatnio edytowane przez fnmirk ; 20-10-2011 o 22:53

  10. #10
    Kod:
    man su
    man su-to-root

Podobne wątki

  1. Uruchamianie skryptu na określonym porcie
    By Michcio in forum Programowanie
    Odpowiedzi: 3
    Ostatni post/ autor: 19-10-2011, 16:09
  2. Uruchamianie skryptu php w CRON-ie
    By northwest in forum Programowanie
    Odpowiedzi: 4
    Ostatni post/ autor: 16-12-2010, 01:02
  3. Automatyczne uruchamianie się skryptu
    By ramzes2008 in forum Serwer
    Odpowiedzi: 6
    Ostatni post/ autor: 31-10-2010, 19:23
  4. Bash - wywołanie skryptu przez PHP
    By rob2499 in forum Serwer
    Odpowiedzi: 9
    Ostatni post/ autor: 16-05-2010, 19:37
  5. [+] Uruchamianie skryptu przez ssh
    By matz in forum Główne tematy
    Odpowiedzi: 8
    Ostatni post/ autor: 09-05-2009, 23:18

Słowa kluczowe związane z tym tematem

Uprawnienia

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •