Visualizzazione dei risultati da 1 a 7 su 7

Discussione: shell_exec + ssh

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    55

    shell_exec + ssh

    Ciao a tutti,
    ho la necessità di lanciare, tramite php, un programma che risiede in un altro server (entrambi i server sono linux).

    Se eseguo da console il seguente comando:
    Codice PHP:
    /usr/bin/ssh server_ip /bin/sh filename.sh 
    tutto funziona senza problemi (ho autenticato i due server in modo che ssh non richieda la password)

    Se eseguo lo stesso comando tramite shell_exec:
    Codice PHP:
    shell_exec('/usr/bin/ssh server_ip /bin/sh filename.sh'); 
    Sembra ignorare completamente il tutto... il comando shell_exec non restituisce neanche un output e il programma nell'altro server non è eseguito.

    ho il safe_mode=off, quindi posso usare shell_exec (e con altri comandi di shell, funziona)

    Non riesco a capire per quale ragione da console lo stesso comando funziona senza problemi.
    Qualcuno mi sa aiutare?

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    hai accesso shell a questa macchina?

    Se si prova dalla shell a lanciare il comando usando l'utente con cui gira il web server.

    Una volta che riesci ad eseguire da shell riuscirai anche da php.

    Se non hai accesso da shell prova a redirezionare l'output del comando direttamente nello shellexec, stando attento a redirezionare anche gli errori.

    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    55
    Perfetto... se provo a lanciarlo tramite l'utente del webserver, inizia tutta una sequenza di richieste di autenticazione.

    Sto provando a lanciare il programma con il comando sudo -u root [ssh command], ma ho problemi di autenticazione dell'utente root (sono incapace io... ci riuscirò prima o poi). Pensi che questa possa comunque essere la strada giusta?

    Grazie per l'aiuto!

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da Bagonghe
    Perfetto... se provo a lanciarlo tramite l'utente del webserver, inizia tutta una sequenza di richieste di autenticazione.

    Sto provando a lanciare il programma con il comando sudo -u root [ssh command], ma ho problemi di autenticazione dell'utente root (sono incapace io... ci riuscirò prima o poi). Pensi che questa possa comunque essere la strada giusta?

    Grazie per l'aiuto!
    Avevo guardato tempo fa sudo, e se non ricordo male, devi creare un file di configurazione per l'utente apache specificando al suo interno i comandi che deve lanciare (in questo caso ssh).

    Se hai configurato ssh per non chiedere la pass vuol dire che hai creato una chiave pubblica e una privata, e queste sono state posizionate nelle relative home dell'utente root sui due server, dovrai farlo per l'utente apache (vado a memoria perchè è un po' che non guardo queste cose).

    ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    55
    Sono riuscito a far funzionare il tutto abilitando il comando sudo per l'utente apache.
    In questo modo eseguo l'ssh come root e non ho più bisogno di creare autenticazioni anche per l'utente apache (come hai spiegato nella seconda parte del tuo messaggio).

    L'unico dubbio che ho adesso è questo: quanto è rischioso permettere al webserver di effettuare un sudo senza richiedere la password? Hai un consigio da darmi per rendere meno rischiosa questa pratica?

  6. #6
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da Bagonghe
    Sono riuscito a far funzionare il tutto abilitando il comando sudo per l'utente apache.
    In questo modo eseguo l'ssh come root e non ho più bisogno di creare autenticazioni anche per l'utente apache (come hai spiegato nella seconda parte del tuo messaggio).

    L'unico dubbio che ho adesso è questo: quanto è rischioso permettere al webserver di effettuare un sudo senza richiedere la password? Hai un consigio da darmi per rendere meno rischiosa questa pratica?
    dipende da tanti fattori, che si moltiplicano per N a seconda di quanti siti hosta il server in questione.

    Infatti se un applicazione scritta male su un altro sito permette l'upload di uno script per eseguire codice arbitrario può connettersi al tuo server senza autenticazione.

    Se non fai tante connessioni, oppure non hai bisogno che il comando venga eseguito istantaneamente, potresti fare uno script che venga lanciato dal server al quale ti vuoi connettere in cron , verifichi l'esistenza di un file sul tuo server (attraverso il web server), e che lanci il comando se lo trova...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    55
    Purtroppo ho bisogno che sia immediata questa procedura (dialogo con un altro server per fare determinate operazioni), non posso permettermi di aspettare ogni 5 minuti (ad esempio).

    Ho notato che con il comando visudo (che permette di assegnare a qualsiasi utente la possibilità di usare il comando sudo o meno) posso specificare quale comando può essere lanciato, magari riesco a limitare l'ssh solo quando richiama un determinato file nel server remoto... questo potrebbe essere abbastanza sicuro.

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.