Che cos'è un modo semplice, corretto e sicuro per eseguire il codice memorizzato nel database ?, che è anche in modalità sandbox

1

I webhook possono essere una cosa molto potente quando si tenta di automatizzare o integrare il software, tuttavia, gestirne la distribuzione in un ambiente controllato può far schifo solo in termini di sicurezza e implementazione.

Ho bisogno di un modo per consentire a chiunque all'interno dell'azienda - chiunque possa essere considerato affidabile con accesso API - di essere in grado di creare, distribuire, utilizzare (e forse anche condividere) webhook senza richiedere l'accesso a un server.

Ho pensato che un modo per farlo era creare una piccola applicazione in grado di archiviare, indirizzare ed eseguire script. Il modo migliore che posso pensare per implementare una cosa del genere è prendere il codice memorizzato in un database e creare un file temporaneo per poi eseguire un comando di sistema per la lingua specificata.

Tuttavia, penso che non ci sarebbe nulla che impedirebbe quel codice, per esempio, spegnendo la macchina, scaricando ed eseguendo codice pericoloso esterno, ecc.

Poi ho pensato ai contenitori Linux, ma preferirei preferibilmente una soluzione portatile. Ho cercato un equivalente in Windows e apparentemente la tecnologia non esiste ancora:

link link

Esiste un approccio più semplice che può ancora essere considerato sicuro ?, vorrei almeno essere in grado di eseguire php, python, ssj e script di shell.

P.S .: downvotes gratuiti per chiunque suggerisca eval PHP

    
posta dukeofgaming 25.03.2015 - 13:26
fonte

1 risposta

1

Quello che mi sembra che tu stia descrivendo è ciò che fanno i gestori di pacchetti: prendono i file da un repository, li copia nel computer di destinazione e eseguono script al loro interno. Questo di solito è fatto per l'installazione di software, ma non deve esserlo, a patto che tu stia bene con la loro idempotenza. Solitamente usano un filesystem remoto pieno di file di archivio compressi invece di un database per il repository, ma questo è in realtà solo un dettaglio di implementazione.

Ciò che sembra che tu voglia al di là di questo è sicurezza e portabilità. Come accennato, la sicurezza si ottiene meglio con contenitori o macchine virtuali. Hai ragione di notare che non c'è nulla che impedisca, per esempio, che lo script postinst di un pacchetto Debian esegua rm -rf / come root. Hai anche ragione nel dire che Docker è un ottimo esempio di contenitore, ma richiede tutte le applicazioni che riesce ad essere "ancorate". La portabilità è un po 'più complicata, dato che alcuni software sono intrinsecamente portatili (come i servizi web di base), mentre altri non lo sono (come i monitor delle prestazioni) e alcune piattaforme supportano i contenitori meglio di altri.

Sembra che tu voglia qualcosa che crea un contenitore generico e poi installa / esegue codice arbitrario al suo interno. Per ottenere ciò, puoi creare tu stesso il contenitore impostando chroot, cgroups, ecc, ma potrebbe essere più facile lasciare che Docker faccia la maggior parte del lavoro per te: nel tuo database (o in qualunque altro repository tu scelga), salva lo script , un comando per invocarlo, un'immagine Docker di base e tutte le dipendenze dell'interprete necessarie. Per comodità, tutto ciò potrebbe essere memorizzato con un semplice identificatore. Quindi scrivi uno script che estrae i file e i dati necessari e crea un contenitore Docker al volo e poi lo esegue. Docker fornisce le primitive per copiare i file da host a guest e specifica il comando da richiamare all'avvio del contenitore.

Certo, dal momento che Windows non supporta ancora i contenitori compatibili con Docker, potrebbe essere necessario fare qualcosa di diverso lì. Sono stato via da Windows per un po 'di tempo, ma ricordo che ha un sacco di supporto per gli elenchi di controllo degli accessi e altre funzionalità di sicurezza con cui tu (o qualcuno) potresti creare qualcosa come un contenitore. Mi dispiace, non posso darti di più qui. Quando Windows alla fine supporta contenitori adeguati, potrebbe essere necessario che il repository abbia a disposizione immagini Docker di base personalizzate per Windows e Linux, che potrebbero essere selezionate automaticamente in fase di esecuzione dallo script principale.

    
risposta data 26.03.2015 - 00:46
fonte

Leggi altre domande sui tag