Как вы защищаете database.yml?

В приложениях Ruby on Rails database.yml представляет собой простой текстовый файл, в котором хранятся учетные данные базы данных.

При развертывании моих Rails-приложений в моем рецепте Capistrano появляется обратный вызов после развертывания, который создает символическую ссылку в каталоге приложения / config на файл database.yml. Сам файл хранится в отдельном каталоге, который находится за пределами стандартной структуры каталогов Capistrano / Releases. Я chmod 400 файл, так что он может быть прочитан только тем пользователем, который его создал.

  • Достаточно ли этого, чтобы заблокировать его? Если нет, что еще вы делаете?
  • Кто-нибудь шифрует свои файлы database.yml?
20.08.2008 16:12:46
5 ОТВЕТОВ
РЕШЕНИЕ

Вы также захотите убедиться, что ваша система SSH надежно защищена, чтобы люди не могли войти в систему как ваш бот Capistrano. Я бы предложил ограничить доступ к парам ключей, защищенных паролем.

Шифрование файла .yml на сервере бесполезно, так как вы должны дать боту ключ, который будет храниться. , , на том же сервере. Шифрование на вашем компьютере, вероятно, хорошая идея. Capistrano может расшифровать его перед отправкой.

12
20.08.2008 16:41:15

Если вас очень беспокоит безопасность файла yml, я должен спросить: хранится ли он в вашем контроле версий? Если это так, это еще один момент, когда злоумышленник может добраться до него. Если вы делаете проверку / регистрацию по не-SSL, кто-то может перехватить его.

Кроме того, с некоторым контролем версий (svn, например), даже если вы удалите его, он все еще будет в истории. Таким образом, даже если вы удалили его в какой-то момент в прошлом, все равно стоит поменять пароли.

1
29.10.2008 16:26:42
Я никогда не храню database.yml в своих репозиториях контроля версий.
John Topley 29.10.2008 21:05:07
Любой, кто хранит секреты в файлах и загружает их в систему контроля версий, должен быть шлепан.
Warren P 6.10.2016 00:14:33

Даже если вы защищаете файл database.yml, люди могут писать, используя те же учетные данные, если они могут изменить код вашего приложения.

Другой способ посмотреть на это: имеет ли веб-приложение большой доступ к базе данных. Если это правда, уменьшите разрешения. Дайте только достаточно разрешений для приложения. Таким образом, злоумышленник может делать только то, что сможет сделать веб-приложение.

3
25.05.2009 18:09:09

Я решил это, поместив пароль базы данных в файл с разрешениями на чтение только для пользователя, от имени которого я запускаю свое приложение. Затем в database.yml я использую ERB для чтения файла:

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

Работает угощение.

39
16.06.2009 13:29:02
Как это улучшает настройку разрешений на чтение для пользователя приложения непосредственно в файле database.yml?
John Topley 16.06.2009 20:36:42
Я выбрал этот подход, потому что: а) пароль отсутствует в database.yml и, следовательно, не привязан к управлению исходным кодом; б) кроме размещения пароля в файле только на рабочем сервере, никакой другой работы не требовалось. - нет задач Capistrano, нет файлов вне основной структуры и т. д.
Olly 17.06.2009 10:39:33
Я чувствую, что database.yml не должен быть в хранилище в первую очередь, потому что каждый разработчик должен иметь возможность определять свою собственную рабочую среду.
Jaryl 8.10.2009 04:07:07
Если каждый разработчик разрабатывает приложение с локальной базой данных sqlite, а не с сервером базы данных, и если существует только одно каноническое производственное развертывание (на нескольких одинаково настроенных серверах), а не несколько производственных развертываний, то лучше хранить config/database.ymlв исходном коде. контроль. Это стандартный способ сделать это в Rails. Если ваши настройки более сложны, чем это, то вы не сможете сохранить config/database.ymlконтроль над исходным кодом.
yfeldblum 9.08.2010 20:44:40

Взгляните на это решение github: https://github.com/NUBIC/bcdatabase . bcdatabase предоставляет зашифрованное хранилище, где пароли могут храниться отдельно от файлов yaml.

bcdatabase

bcdatabase - это библиотека и утилита, которая обеспечивает управление параметрами конфигурации базы данных для приложений Ruby on Rails. Он обеспечивает простой механизм отделения атрибутов конфигурации базы данных от исходного кода приложения, чтобы не было соблазна проверить пароли в системе контроля версий. Кроме того, он централизует параметры для одного сервера, чтобы их можно было легко разделить между несколькими приложениями и легко обновлять одним администратором.

10
27.09.2012 06:00:06
Это похоже на мертвый проект сейчас. Есть ли какие-либо замены или альтернативные решения, которые активно поддерживаются?
Streamline 14.10.2016 16:23:04
@Streamline - последний коммит был в 2014 году, это не так давно.
slm 15.10.2016 12:15:54