Jak zabezpieczyć bazę danych?yml?

W bazie aplikacji Ruby on Rails.yml to zwykły plik tekstowy, który przechowuje poświadczenia bazy danych.

Kiedy wdrażam Moje aplikacje Rails, mam wywołanie zwrotne po wdrożeniu w moim Capistrano przepis, który tworzy dowiązanie symboliczne w katalogu /config aplikacji do bazy danych.plik yml. Sam plik jest przechowywany w oddzielnym katalogu, który znajduje się poza standardową strukturą katalogów Capistrano /releases. I chmod 400 plik więc jest czytelny tylko przez użytkownika, który stworzył go.

    Czy to wystarczy, by go zamknąć? Jeśli nie, to co jeszcze robisz? Czy ktoś szyfruje swoją bazę danych?pliki yml?
Author: John Topley, 2008-08-20

5 answers

Będziesz również chciał się upewnić, że Twój system SSH jest dobrze zabezpieczony, aby uniemożliwić ludziom zalogowanie się jako Twój bot Capistrano. Sugerowałbym ograniczenie dostępu do chronionych hasłem par kluczy.

Plik yml na serwerze jest bezużyteczny, ponieważ musisz dać botowi klucz, który będzie przechowywany . . . na tym samym serwerze. Szyfrowanie go na komputerze jest prawdopodobnie dobrym pomysłem. Capistrano może go odszyfrować przed wysłaniem.

 12
Author: James A. Rosen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-20 16:41:15

Sposób, w jaki rozwiązałem ten problem, polega na umieszczeniu hasła do bazy danych w pliku z uprawnieniami do odczytu tylko dla użytkownika, jako którego uruchamiam moją aplikację. Następnie w bazie danych.yml używam ERB do odczytu pliku:

production:
  adapter: mysql
  database: my_db
  username: db_user
  password: <%= begin IO.read("/home/my_deploy_user/.db") rescue "" end %>
Działa smakowicie.
 39
Author: Olly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-16 13:29:02

Spójrz na to rozwiązanie github: https://github.com/NUBIC/bcdatabase . bcdatabase zapewnia zaszyfrowany magazyn, w którym hasła mogą być przechowywane oddzielnie od plików yaml.

Bcdatabase

Bcdatabase to biblioteka i narzędzie który zapewnia konfigurację bazy danych zarządzanie parametrami dla Ruby on Rails aplikacje. Zapewnia prosty mechanizm oddzielania bazy danych atrybuty konfiguracji z kod źródłowy aplikacji, tak aby nie ma co sprawdzać hasła do kontroli wersji system. I centralizuje parametry dla jednego serwera, tak aby można je łatwo podzielić między wiele aplikacji i łatwo aktualizacja przez jednego administratora.

 10
Author: slm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-27 06:00:06

Nawet jeśli zabezpieczysz bazę danych.plik yml, ludzie mogą nadal pisać, które używają tych samych poświadczeń, jeśli mogą zmienić kod aplikacji.

Innym sposobem na to jest: czy aplikacja internetowa musi mieć duży dostęp do bazy danych. Jeśli true, zmniejsz uprawnienia. Daj aplikacji wystarczająco dużo uprawnień. W ten sposób atakujący może zrobić tylko to, co aplikacja internetowa byłaby w stanie zrobić.

 3
Author: Peter Stuifzand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-25 18:09:09

Jeśli jesteś bardzo zaniepokojony bezpieczeństwem pliku yml, muszę zapytać: czy jest on przechowywany w twojej kontroli wersji? Jeśli tak, to kolejny punkt, w którym napastnik może się do niego dostać. Jeśli robisz checkout / checkin przez non-SSL, ktoś może go przechwycić.

Również, z pewną kontrolą wersji (svn, na przykład), nawet jeśli ją usuniesz, nadal jest w historii. Tak więc, nawet jeśli usunąłeś go w pewnym momencie w przeszłości, nadal dobrym pomysłem jest zmiana haseł.

 1
Author: Micah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 16:26:42