2008-08-20 4 views
50

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

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

  • Достаточно ли этого блокировать? Если нет, что еще вы делаете?
  • Кто-нибудь шифрует свои файлы database.yml?

ответ

12

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

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

1

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

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

+0

Я никогда не хранил database.yml в своих исходных хранилищах управления. – 2008-10-29 21:05:07

+0

Любой, кто хранит секреты в файлах и загружает их в контроль версий, должен быть отшлепан. – 2016-10-06 00:14:33

3

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

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

38

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

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

Работает с удовольствием.

+2

Как это улучшить при настройке прав доступа для пользователя приложения непосредственно на database.yml? – 2009-06-16 20:36:42

10

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

bcdatabase

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

Смежные вопросы