Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: php e script bash

  1. #1

    php e script bash

    salve a tutti. Ho una pagina php che deve lanciare uno script bash.
    In pratica la pagina permette di modificare i dati del file /etc/network/interfaces e poi vorrei riavviare il sistema per rendere attive le nuove impostazioni.

    Premetto che sono alle prime armi con linux (in particolare sto usando Debian). Quindi se c'è qualche altra soluzione è sempre ben accetta.

    Ecco i codici delle due pagine:


    Pagina PHP
    codice:
    		    	<?php 
    		    		//riavvio il sistema
    						$last_line = system("/var/www/mioSitoProva/restart.sh start", $retval);
    						
    						// Printing additional info
    						echo '
    						<hr />Last line of the output: ' . $last_line . '
    						<hr />Return value: ' . $retval;
    		    	?>

    Ecco il codice dello script Bash:

    codice:
    #! /bin/sh
    
    ### BEGIN INIT INFO
    # Provides:          miaProva application restart system
    # Required-Start:    
    # Required-Stop:     
    # Short-Description: starts instance of miaProva
    # Description:       starts instance of miaProva app using start-stop-daemon
    ### END INIT INFO
    
    # script name
    NAME="miaProva"
    
    # app name
    DESC="miaProva"
    
    case "$1" in
      start)
            echo -n "Riavvio Sistema in corso "        
            shutdown -r now
            ;;
      stop)
            echo -n "Shutting down process-name: "
            ;;
      restart)
            $0 stop
            $0 start
            ;;
      *)        
           echo "Usage: $0 {start|stop|restart}"        
           exit 1
       esac
       exit 0

    Posso dire che visualizzo la scritta di echo "Riavvio Sistema in corso " ma il sistema non si riavvia...cosa posso fare?

    Grazia a tutti anticipatamente.
    seminate linux che windows si pianta da se

  2. #2
    Ciao,
    così a naso mi sembra che sia un problema di permessi, ovvero il tuo utente può eseguire lo script da te creato (per questo vedi la echo) ma non hai i permessi per lanciare uno shutdown.

    Tieni conto che i comandi lanciati da php generalmente hanno come utente di sistema quello di apache, per cui mi sembra logico che tale utente non possa fare azioni delicate come il riavvio di un sistema.
    Per sicurezza verifica con questa pagina quale utente stai usando
    Codice PHP:
    <?php
    // outputs the username that owns the running php/httpd process
    // (on a system with the "whoami" executable in the path)
    echo exec('whoami');
    ?>

  3. #3
    Grazie per la rapidità della risposta, e mi scuso per il ritardo. La risposta che ottengo è:

    www-data.

    Come procedo?
    seminate linux che windows si pianta da se

  4. #4
    apache deve essere eseguito come utente root

    PS: basterebbe riavviare il servizio network (o networking, non ricordo il nome di preciso) presente dentro /etc/init.d

  5. #5
    Non ho capito, scusa! :master:

    La macchina su cui deve risiedere questa pagina php non sarà più accessibile ed io ho solo una pagina php per poterla riavviare. Cosa intendi con riavviare il servizio come root, come posso fare da remoto?

    A dire il vero sto utilizzando lighttpd. Nel file lighttpd.conf ho trovato queste due righe

    codice:
    ## change uid to <uid> (default: don't care)
    server.username            = "www-data"
    
    ## change uid to <uid> (default: don't care)
    server.groupname           = "www-data"
    Ho provato a sostituire username e il gruppo con root root ma fallisce il riavvio del servizio.

    Non so se può essere utile.

    Attendo consigli.
    seminate linux che windows si pianta da se

  6. #6
    se non ricordo male ci vuole un workaround per far girare lighttpd come root

    http://redmine.lighttpd.net/boards/2/topics/914

  7. #7
    Grazie per la risposta daniele. Ma anche entro come root e riavvio il servizio con /etc/init.d/lighttpd.sh restart l'utente resta sermpre www-data.
    seminate linux che windows si pianta da se

  8. #8
    Due possibilita':
    • aggiungi l'utente sotto cui gira il webserver alla lista di chi puo' usare sudo
    • da root fai 'chmod u+s /sbin/shutdown'


    Per l'opzione 1 (consigliata), edita il file /etc/sudoers con il comando visudo e aggiungi la linea:
    codice:
    www-data 	ALL = NOPASSWD: /sbin/shutdown
    ma se devi solo riavviare la rete, non basta '/etc/init.d/networking restart'?

  9. #9
    ma hai tolto server.username e server.groupname?

  10. #10
    Grazie. E' un'ottima idea quella di riavviare solo la rete. Ma ottenevo sempre lo stesso risultato.

    Ti riporto anche la risposta al comando di restart del networking

    Reconfiguring network interfaces...failed.

    Ovviamente se lo lancio da root funziona.
    seminate linux che windows si pianta da se

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.