Domanda

All'interno delle applicazioni Ruby on Rails database.yml è un file di testo semplice che memorizza le credenziali del database.

Quando distribuisco le mie applicazioni Rails, ho un callback dopo distribuire la mia ricetta Capistrano che crea un collegamento simbolico all'interno della directory dell'applicazione /config nel file database.yml.Il file stesso è archiviato in una directory separata al di fuori della struttura di directory standard Capistrano /releases.Ho chmod 400 il file in modo che sia leggibile solo dall'utente che lo ha creato.

  • Basterà questo a bloccarlo?Se no, cos'altro fai?
  • Qualcuno sta crittografando i propri file database.yml?
È stato utile?

Soluzione

Dovrai anche assicurarti che il tuo sistema SSH sia ben protetto per impedire alle persone di accedere COME il tuo bot Capistrano.Suggerirei di limitare l'accesso alle coppie di chiavi protette da password.

Crittografare il file .yml sul server è inutile poiché devi fornire la chiave al bot, che verrebbe archiviata...sullo stesso server.Crittografarlo sul tuo computer è probabilmente una buona idea.Capistrano può decrittografarlo prima dell'invio.

Altri suggerimenti

Il modo in cui ho affrontato questo problema è inserire la password del database in un file con autorizzazioni di lettura solo per l'utente con cui eseguo la mia applicazione.Quindi, in database.yml utilizzo ERB per leggere il file:

production:
  adapter: mysql
  database: my_db
  username: db_user
  password: <%= begin IO.read("/home/my_deploy_user/.db") rescue "" end %>

Funziona a meraviglia.

Dai un'occhiata a questa soluzione Github: https://github.com/NUBIC/bcdatabase.bcdatabase fornisce un archivio crittografato in cui le password possono essere tenute separate dai file yaml.

bcdatabase

BCDatabase è una libreria e utilità che fornisce la gestione dei parametri di configurazione del database per le applicazioni Ruby on Rails.Fornisce un semplice meccanismo per separare gli attributi di configurazione del database dal codice sorgente dell'applicazione in modo che non vi sia alcuna tentazione di controllare le password nel sistema di controllo della versione.E centralizza i parametri per un singolo server in modo che possano essere facilmente condivisi tra più applicazioni e facilmente aggiornati da un singolo amministratore.

Anche se proteggi il file database.yml, le persone possono comunque scrivere che utilizza le stesse credenziali se possono modificare il codice della tua applicazione.

Un altro modo di vedere la cosa è:l'applicazione web ha troppo accesso al database.Se vero, abbassa i permessi.Concedere le autorizzazioni sufficienti all'applicazione.In questo modo un utente malintenzionato può fare solo ciò che l'applicazione web sarebbe in grado di fare.

Se sei molto preoccupato per la sicurezza del file yml, devo chiederti:È memorizzato nel controllo della versione?Se è così, quello è un altro punto in cui un utente malintenzionato può arrivarci.Se stai effettuando il checkout/checkin tramite non SSL, qualcuno potrebbe intercettarlo.

Inoltre, con alcuni controlli di versione (svn, per esempio), anche se lo rimuovi, è ancora lì nella cronologia.Quindi, anche se l'hai rimossa in passato, è comunque una buona idea cambiare le password.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top