PHP eseguiamo comandi shell sul server

Con l’ausilio dell’ istruzione exec() e’ possibile far eseguire dei comandi o degli script nella shell del server in cui sta girando PHP. L’utente con cui verranno eseguiti i comandi o gli script sara’ chiaramente l’utente web di default cioe’ wwwdata, pertanto i permessi di esecuzione lettura e scrittura sul disco saranno giustamente limitati. Siccome il PHP e’ un linguaggio interpretato che lavora lato server e’ chiaro che tutti i comandi lanciati tramite la pagina web, eseguiranno le operazioni lato server e non lato client. vediamo un semplice esempio di come funziona il comando.

<?php
exec("ls", $output, $result);
?>

Il codice sopra non ritornera’ nulla sulla pagina eseguita! infatti i dati in uscita dal comando ‘ls’ saranno memorizzati nel array $output, mentre nella variabile $result sara’ contenuto 1 se il comando ha restituito un errore o non ha restituito nulla, 0 se il comando e’ stato eseguito correttamente.

Andiamo ora a stampare a video il risultato del comando ls:

<?php
exec("ls", $output, $result);
if(!$result){
   echo "stampo l'output di ls:<br>";
   for($i=0; $i < count($output); $i++){
       echo $output[$i]."<br>";
      }
}
?>

questo sara’ il risultato :

Possiamo vedere i due file presenti nella directory di esecuzione del comando, se volessimo sapere quali file sono presenti nella directory radice, e’ sufficiente sostituire “ls” con “ls ../../”

Conoscendo la potenza della shell e dei sui script e’ possibile fare qualsiasi cosa sul server, direttamente non puo’ creare, modificare o cancellare file ma attraverso degli appositi script e’ possibile fare molti danni, come la cancellazione di file o di intere directory!

Comandi Linux

Tabella comandi shell di linux comparati per funzione

Con le nuove distribuzioni di linux alcuni comandi sono cambiati. Nella tabella successiva verdiamo i comandi piu’ utilizzati e i loro nuovi corrispondenti

DescrizioneComando classicoComando Nuovo
Spegnimento del sistemaroot@host:~# haltroot@host:~# systemctl poweroff
Riavvio del sistemaroot@host:~# rebootroot@host:~# systemctl reboot
Disabilita interfaccia reteroot@host:~# ifconfig <eth> downroot@host:~# ip link set <eth> down
Abilita interfaccia di reteroot@host:~# ifconfig <eth> uproot@host:~# ip link set <eth> up
Visualizza info di reteroot@host:~# ifconfig <eth> root@host:~# ip address