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


50

В приложениях Ruby on Rails 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 в своих исходных хранилищах управления. 29 окт. 082008-10-29 21:05:07

  0

Любой, кто хранит секреты в файлах и загружает их в контроль версий, должен быть отшлепан. 06 окт. 162016-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? 16 июн. 092009-06-16 20:36:42

+2

Я принял этот подход, потому что: а) пароль не находится в базе данных.yml и, следовательно, не привязан к исходному контролю, и б) кроме ввода пароля в файл только на производственном сервере, другой работы не было требуется - нет задач Capistrano, нет файлов вне основной структуры и т. д. 17 июн. 092009-06-17 10:39:33

+1

Я чувствую, что database.yml не будет в репозитории в первую очередь потому, что каждый разработчик должен иметь возможность определять свою собственную рабочую среду. 08 окт. 092009-10-08 04:07:07

+1

Если каждый разработчик разрабатывает базу данных с локальными базами данных приложений, а не сервер базы данных, и если существует только одно развертывание канонического производства (на нескольких серверах с идентичной конфигурацией), а не размножение нескольких версий, то это прекрасно, config/database.yml' в управлении источником. Это стандартный способ сделать это в Rails. Если ваша установка более сложная, то вы не сможете сохранить 'config/database.yml' в исходном управлении. 09 авг. 102010-08-09 20:44:40


10

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

bcdatabase

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

+3

Обновление: bcdatabase теперь живет на https://github.com/NUBIC/bcdatabase. 26 сен. 112011-09-26 16:09:51

  0

Теперь это похоже на мертвый проект. Существует ли какое-либо замещающее или альтернативное решение, которое активно поддерживается? 14 окт. 162016-10-14 16:23:04

  0

@Streamline - последняя фиксация была в 2014 году, это не так давно. 15 окт. 162016-10-15 12:15:54