У меня есть сервер под управлением Ubuntu 10, в основном на нем есть PHP-сайты с базами данных MySQL.
Мне нужно написать сценарий резервного копирования
Лучше ли писать сценарий резервного копирования на PHP или в оболочке? Или это не важно?
Мне больше нравится PHP, потому что это позволяет мне хранить пароль базы данных только в одном месте - в файле PHP.
Если я напишу это в оболочке, мне нужно будет указать пароль базы данных в сценарии оболочки. Когда я меняю пароль, мне нужно будет изменить его в двух местах.
Напишите сценарий как root, поместите пароль в корневой каталог .my.cnf (с разрешениями 600). Затем вы можете запускать команды mysql, даже не передавая пароль.
Я уже слышу крики миллиона людей - но моя логика проста. Если кто-то взломает ваш сервер и ему удастся повысить свои привилегии до root, вы уже проиграли, и у него уже есть доступ ко всему.
Если только root может читать .my.cnf, тогда это так же безопасно, как и ввод пароля в любой другой файл, но это означает, что вы никогда не запускаете скрипты, передающие пароль в командной строке, которую можно прочитать любой пользователь, использующий ps -ef.
Говоря с точки зрения безопасности, лучше всего было бы, если бы ваш пароль mysql вообще не отображался / был жестко закодирован в сценарии. Как php, так и сценариям оболочки потребуется расшифрованный пароль, если вы планируете запускать внешний инструмент, такой как mysqldump, для резервного копирования базы данных, поэтому - нет, никакой дополнительной безопасности, какое бы решение вы ни выбрали. Что касается последнего вопроса, то для сценария оболочки очень легко получить пароль из файла конфигурации php (подсказка: grep и sed здесь ваши друзья), поэтому вам не нужно изменять во многих местах. Что касается php по сравнению с оболочкой - cli php работает довольно хорошо, единственная разница заключается в том, что вам, возможно, придется написать больший объем кода на php для того же, где сценарии оболочки уместятся в одной строке.