Come posso mantenere sicuro un ambiente Python di produzione?

7

La maggior parte del mio lavoro è la creazione di siti Web in Django (un framework web Python) e la distribuzione ai server dei miei o dei miei clienti. Lavoro da un virtualenv per separare il sito dai pacchetti di sistema e ho forse 60-80 pacchetti installati lì e quel lotto è condiviso tra due dozzine di siti.

Questa ovvia limitazione a questo approccio è la necessità di testare ogni sito se aggiorno un pacchetto che usa. Considero un giusto compromesso per non aver bisogno di tenere conto di mille ennesimi virtualenvs separati.

E questo è essenzialmente il mio intero problema. Come diavolo dovresti tenere conto delle distribuzioni virtualenv ? Le persone sembrano trattarle come una discarica, ma se l'universo di programmazione ha imparato qualcosa la scorsa settimana dall'esplosione di Ruby on Rails , l'uso di vecchie versioni del software è inaccettabile.

Ho uno script semplice che tenta di verificare la presenza di versioni attuali del pacchetto con l'ultima controparte pip , ma è abbastanza inattuale. Inoltre, non distingue tra aggiornamenti di sicurezza e aggiornamenti di funzionalità (che richiedono giorni di test e riparazioni).

Sto cercando qualcosa di meglio. Sto cercando qualcosa che possa farmi sapere se Django ha una nuova release di sicurezza, o se qualcosa è alla fine della vita. Voglio qualcosa che mi aiuti (e altri sviluppatori di Python) a non diventare il prossimo gruppo di persone che piangono dopo un'ondata di ragazzi con scanner e script che convertono i nostri server in una botnet.

Esiste una cosa del genere?

    
posta Oli 30.05.2013 - 17:54
fonte

5 risposte

2

Le principali distribuzioni GNU / Linux hanno squadre di sicurezza specializzate responsabili della sicurezza di tutti i pacchetti nella distribuzione. Se non puoi permettertelo di spendere abbastanza risorse per abbinarle a questi team, allora (se la massima sicurezza è l'obiettivo) la soluzione migliore è probabilmente fare affidamento sul loro lavoro e utilizzare i pacchetti dalle distribuzioni. Le distribuzioni con versioni staged (come Debian ) provano a correggere i pacchetti, in modo che le loro dipendenze non si interrompano.

Naturalmente, se si usano i pacchetti della distribuzione, si perde la flessibilità dell'ambiente virtuale Python. Quindi, questo sembra essere un altro triangolo di compromesso: alta sicurezza, bassi costi, flessibilità di installazione. Scegli due.

    
risposta data 16.02.2018 - 15:16
fonte
1

Utilizziamo buildout per creare distribuzioni che siano riproducibili e isolate.

Un buildout si comporta come un virtualenv in quanto consente di installare le uova, mantenendole separate dall'installazione di Python, e agisce come pip in quanto è possibile controllare quali versioni vengono utilizzate. Ma buildout è anche uno strumento di compilazione, con ricette che puoi creare parti arbitrarie secondo necessità per adattarle all'applicazione e ai test.

Il mio virtual env non contiene nulla oltre il zc.buildout egg per creare nuovi bootstrap per i nuovi progetti.

Un buildout tipico che costruisco ha diversi file di configurazione, per adattarsi allo sviluppo, all'integrazione continua e agli ambienti di produzione, ma il base.cfg sembra invariabilmente simile a:

[buildout]
extends = 
     versions.cfg

newest = false

eggs = customer_project_name

[django-base]
recipe = djangorecipe
settings = settings
eggs = ${buildout:eggs}
project = customer_project_name
projectegg = ${:project}

[python]
recipe = zc.recipe.egg
interpreter = python
eggs = ${buildout:eggs}
initialization =
   import os
   os.environ['DJANGO_SETTINGS_MODULE'] = '${django:projectegg}.settings'

con versions.cfg per bloccare tutte le versioni per impedire aggiornamenti accidentali.

Poiché utilizziamo un file versions.cfg , è facile analizzare tutti i file delle versioni per vedere quali progetti sono interessati (dopo tutto è solo un file ConfigParser ) e l'aggiornamento del pacchetto è solo una questione di aggiornamento di quelli pin e ri-test del progetto.

Una volta testato, invia gli aggiornamenti delle versioni aggiornate al server del cliente, riesegui buildout.

Si noti che l'aggiornamento delle correzioni di sicurezza dovrebbe essere comunque un'attività di manutenzione dedicata, in quanto è necessario pianificare, testare e trovare una finestra di aggiornamento per i propri clienti.

    
risposta data 30.05.2013 - 18:29
fonte
1

Ti consiglio di usare Docker, fornisce una buona struttura di sicurezza di base, aggiornamenti automatici ed è assolutamente portatile. La distribuzione di un sito Django è un dolore completo ma, come ho detto da quando utilizzo Docker, il mio ambiente di sviluppo e produzione è quasi identico, quindi solo push e pull =)

Alcune buone letture sull'argomento:

link

link

    
risposta data 19.09.2018 - 11:35
fonte
0

Per essere avvisati quando esistono degli exploit ci sono feed RSS, servizi e prodotti che ti informano sugli exploit. Per lo meno qualsiasi amministratore dovrebbe probabilmente seguire CVE o NVD (che include CVE).

Come gestire gli exploit nelle librerie utilizzate dall'applicazione, ma non in virtualenv? Ad esempio ImageMagick, l'eseguibile python stesso o una libreria di sistema che Python usa. Penso che la tua unica opzione sia quella di aggiornare la piattaforma, e poi fare il controllo richiesto del virtualenv e dell'applicazione.

Al mio lavoro creiamo il nostro pacchetto (RPM) che include python. Siamo nella stessa barca se c'è un difetto di sicurezza della libreria di sistema (aggiornare la piattaforma, controllare l'applicazione). Tuttavia, le librerie di applicazioni o Python possono essere facilmente gestite così come sono nel pacchetto toolchain. Semplicemente lo rev, eseguilo attraverso la nostra build di integrazione continua che ricostruisce tutti i progetti e genera tutti i nuovi pacchetti per la toolchain di aggiornamento.

Non esiste una soluzione integrata verticalmente specifica per Python o Django che io conosca.

    
risposta data 01.06.2013 - 06:22
fonte
0

Dovresti dare un'occhiata alle funzioni di richieste. io . Questo sembra quello che stai cercando.

È gratuito per qualsiasi account Bitbucket o GitHub.

A parte questo:

Sto lavorando in un contesto, in cui devo lavorare con dati sensibili per il settore pubblico. E usiamo CentOS come piattaforma di distribuzione. Principalmente ci affidiamo agli aggiornamenti di sicurezza dei pacchetti .rpm forniti con CentOS. E per alcuni casi facciamo la nostra confezione dei "pacchetti-python" selezionati selezionati. Il nostro team di infrastruttura tiene traccia dei noti problemi di sicurezza relativi alle cose self-packaged e fa il riconfezionamento. Ecco come funziona per noi.

PS: se sei dal lato container delle cose, c'è anchore che fornisce un servizio simile di scansione delle immagini del contenitore.

    
risposta data 17.02.2018 - 15:59
fonte

Leggi altre domande sui tag