В приложениях Ruby on Rails database.yml представляет собой простой текстовый файл, в котором хранятся учетные данные базы данных.
При развертывании моих Rails-приложений в моем рецепте Capistrano появляется обратный вызов после развертывания, который создает символическую ссылку в каталоге приложения / config на файл database.yml. Сам файл хранится в отдельном каталоге, который находится за пределами стандартной структуры каталогов Capistrano / Releases. Я chmod 400 файл, так что он может быть прочитан только тем пользователем, который его создал.
- Достаточно ли этого, чтобы заблокировать его? Если нет, что еще вы делаете?
- Кто-нибудь шифрует свои файлы database.yml?
Вы также захотите убедиться, что ваша система SSH надежно защищена, чтобы люди не могли войти в систему как ваш бот Capistrano. Я бы предложил ограничить доступ к парам ключей, защищенных паролем.
Шифрование файла .yml на сервере бесполезно, так как вы должны дать боту ключ, который будет храниться. , , на том же сервере. Шифрование на вашем компьютере, вероятно, хорошая идея. Capistrano может расшифровать его перед отправкой.
Если вас очень беспокоит безопасность файла yml, я должен спросить: хранится ли он в вашем контроле версий? Если это так, это еще один момент, когда злоумышленник может добраться до него. Если вы делаете проверку / регистрацию по не-SSL, кто-то может перехватить его.
Кроме того, с некоторым контролем версий (svn, например), даже если вы удалите его, он все еще будет в истории. Таким образом, даже если вы удалили его в какой-то момент в прошлом, все равно стоит поменять пароли.
Даже если вы защищаете файл database.yml, люди могут писать, используя те же учетные данные, если они могут изменить код вашего приложения.
Другой способ посмотреть на это: имеет ли веб-приложение большой доступ к базе данных. Если это правда, уменьшите разрешения. Дайте только достаточно разрешений для приложения. Таким образом, злоумышленник может делать только то, что сможет сделать веб-приложение.
Я решил это, поместив пароль базы данных в файл с разрешениями на чтение только для пользователя, от имени которого я запускаю свое приложение. Затем в database.yml я использую ERB для чтения файла:
production:
adapter: mysql
database: my_db
username: db_user
password: <%= begin IO.read("/home/my_deploy_user/.db") rescue "" end %>
Работает угощение.
config/database.yml
в исходном коде. контроль. Это стандартный способ сделать это в Rails. Если ваши настройки более сложны, чем это, то вы не сможете сохранить config/database.yml
контроль над исходным кодом. Взгляните на это решение github: https://github.com/NUBIC/bcdatabase . bcdatabase предоставляет зашифрованное хранилище, где пароли могут храниться отдельно от файлов yaml.
bcdatabase
bcdatabase - это библиотека и утилита, которая обеспечивает управление параметрами конфигурации базы данных для приложений Ruby on Rails. Он обеспечивает простой механизм отделения атрибутов конфигурации базы данных от исходного кода приложения, чтобы не было соблазна проверить пароли в системе контроля версий. Кроме того, он централизует параметры для одного сервера, чтобы их можно было легко разделить между несколькими приложениями и легко обновлять одним администратором.