Как я могу скрыть пароль/имя пользователя, используемые в bash script для доступа к MySQL?

Я пишу bash script, который планирую выполнить через cron. В этом script, я хочу выполнить команду против базы данных MySQL, примерно так:

$ mysql -u username -ppassword -e 'show databases;'

Для ясности и тех, которые не знакомы с mysql, переключатель "-u" принимает имя пользователя для доступа к базе данных, а "-p" - для пароля (место опущено намеренно).

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

  • Сохранить пароль в файле: pword.txt
  • chmod 700 pword.txt(удалить разрешения для всех, кроме владельца файла)
  • Cat pword.txt в переменную в script, когда это необходимо для входа.

но я не чувствую, что это тоже очень безопасно (что-то о сохранении паролей в яслях делает меня тошнотворным).

Итак, как мне следует защищать пароль, который будет использоваться в автоматическом script в Linux?

Ответы

Ответ 1

Один из способов, которым вы можете запутать пароль, состоит в том, чтобы поместить его в файл опций . Обычно это находится в ~/.my.cnf в системах UNIX/Linux. Вот простой пример, показывающий пользователя и пароль:

[client]
user=aj
password=mysillypassword

Ответ 2

Единственный по-настоящему безопасный способ защитить свой пароль - зашифровать его. Но тогда у вас есть проблема с защитой ключа шифрования. Эта проблема - черепахи до конца.

Когда хорошие люди, которые создали OpenSsh, решили эту проблему, они предоставили инструмент под названием ssh-agent, который будет содержать ваши учетные данные и позволит вам использовать их для подключения к серверу при необходимости. Но даже ssh-agent содержит именованный сокет в файловой системе, и любой, кто может получить доступ к этому сокету, может действовать с использованием ваших учетных данных.

Я думаю, что только две альтернативы:

  • Попросите человека ввести пароль.

  • Доверяйте файловой системе.

Я бы доверял только локальной файловой системе, а не удаленной установленной. Но я бы доверял ему.

Безопасность - это ад.

Ответ 3

Обратитесь к doc для некоторых рекомендаций. дополнительный шаг, который вы можете предпринять, это ограничить использование команды ps для обычных пользователей, если у них есть разрешение на доступ к серверу.

Ответ 4

Я соглашусь с Норманом, что вы должны ввести кого-то пароль. Если вы просто поставьте флаг -p без сопроводительного пароля, он предложит пользователю его.