Используя mysqldump в задании крона без пароля root

Еще одна вещь это не упоминается, состоит в том, что безопасность в Windows намного более непрозрачна, чем в Linux.

Например, я могу посмотреть на несколько текстовых файлов и видеть точно, что выполняет мой веб-сервер. IIS? Не так - Вы видите результаты конфигурации через инструмент GUI, но существуют скрытые настройки. Затем необходимо использовать другой набор инструментов для рассмотрения ACLs на файлах и т.д.

Это - то же с большинством программ в мире окон - очень трудно быстро понять точно, что влияет на среду выполнения между реестром и ACLs.

14
задан 8 February 2010 в 19:26
6 ответов

Для соединения с mysql сервером, необходимо обеспечить учетные данные. Можно указать их в конфигурационном файле, передать их через командную строку или просто создать учетную запись, которая не требует учетных данных.

Конечно, опция без паролей никогда не должна использоваться, передача - командной строкой не большая, потому что любой, кто может выполнить PS, может видеть командную строку.

Рекомендуемая опция состоит в том, чтобы создать mysql конфигурационный файл с учетными данными в нем и затем защитить тот файл с полномочиями файловой системы поэтому, только Ваш резервный пользователь может получить доступ к нему.

Вы способность войти в mysql сервер, в то время как зарегистрированный в интерактивном режиме как корень, кажется, предлагает, чтобы Вам или не устанавливали пароль root, или что у Вас есть конфигурационный файл, который не находится Вашим сценарием. Если у Вас есть .my.cnf, Вы, возможно, должны вручную указать на него. Если бы Вашей корневой учетной записи не установили пароль затем, я сильно поощрил бы Вас фиксировать это.

Обновление (2016-06-29) при выполнении mysql 5.6.6 или больше необходимо посмотреть на mysql_config_editor инструмент, который позволяет Вам хранить учетные данные в зашифрованном файле. Благодаря Giovanni для упоминания этого мне.

12
ответ дан 2 December 2019 в 21:08
  • 1
    Тот метод все еще требует, чтобы незашифрованный пароль в простом тексте был в системе. Какой i' m старающийся избегать. –  Mech Software 8 February 2010 в 19:51
  • 2
    > Вы любой don' t установили пароль root, или что у Вас есть конфигурационный файл, который не находится Вашим сценарием. Автор ясно заявляет, что существует mysql пароль для корня, и что он пытается получить доступ к базе данных, не предоставляя его к команде mysqldump: " (использование пароля: НЕТ) ". следовательно ошибка доступа запрещен. –  monomyth 8 February 2010 в 19:53
  • 3
    @monomyth, автор также заявляет, что может войти в систему без пароля, в то время как в интерактивном режиме зарегистрированный как корень. Это говорит мне, что что-то не правильно. –  Zoredache 8 February 2010 в 20:01
  • 4
    Программное обеспечение @Mech, Там isn' t много точки попытки защитить себя от корневой учетной записи. Если у кого-то есть корневая учетная запись, они могли бы просто перезапустить mysql и обойти систему разрешения полностью. –  Zoredache 8 February 2010 в 20:24
  • 5
    Причиной, в которую я смог войти, была корневая учетная запись, имел .my.cnf, указанный с 600 полномочиями, поэтому таким образом, именно так оболочка получала доступ. крон однако, должен игнорировать файл, таким образом, я использовал параметр в этом сообщении для указания на него. –  Mech Software 8 February 2010 в 20:37

Безопасность не должна быть сделана через мрак. Если Вы боящийся, что у кого-то есть доступ к Вашей корневой учетной записи, не имеет значения, если mysql пароль корня хранится в сценарии, так как у Вас есть все свои доступные данные в дампах mysql или файлы базы данных. Так, реальный вопрос - то, что Вы пытаетесь защитить?

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

Если Вы не хотите это, mysql пароль, который будет замечен любой локальной учетной записью кроме корня, установил полномочия файла на том сценарии, чтобы быть 0700 и владелец для укоренения.

3
ответ дан 2 December 2019 в 21:08
  • 1
    Я предполагаю что я все еще don' t понимают, это, Если я могу ввести (от корневой подсказки) mysqldump без ввода пароля, почему can' t я работаю, это через крон нанимает тот же путь. Что часть пропускает, который требует-p параметра. I' m, не пробуя к " obscure" пароль, I' d просто скорее никогда не вводили его. Что-то конкретное к самому корневому входу в систему предоставляет доступ, итак, почему наклон это копироваться с кроном? –  Mech Software 8 February 2010 в 19:56
  • 2
    Если Вы видите, что можно войти в систему без пароля и с паролем с помощью того же " root" пользователь, возможно, что существует несколько пользователей root в Вашей mysql базе данных. Некоторым из них нельзя было бы установить пароль. Можно удалить пароль из ' root' ' localhost' но затем не только крон сможет соединиться с Вашей базой данных, но любым с локальной учетной записью. Это не отличается (или хуже), чем наличие пароля в сценарии открытого текста. –  monomyth 8 February 2010 в 20:04

Ваше использование оболочки может сделать это becuase, у Вас есть оболочка для выполнения его от, т.е. когда Вы входите в систему, все Ваши сценарии оболочки в Вашем профиле выполняются.

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

Можно установить оболочку для крона, чтобы работать под, отредактировать crontab и добавить SHELL и ДОМАШНИЕ переменные, например.

SHELL=/bin/bash
HOME=/root

если они не будут установлены, то крон будет работать с оболочкой и корневым каталогом, указанным в/etc/passwd (которые являются, вероятно, ничем, возможно/bin/sh).

Если Вы хотите видеть, что крон среды работает как, добавьте задание крона, которое экспортирует ENV в файл, например:

$crontab -e
* * * * * env > /tmp/crontabenv.log
:wq
2
ответ дан 2 December 2019 в 21:08

Если скрипт запущен корнем, Вы могли бы создать файл/root/.my.cnf с полномочиями 600 и следующее содержание:

[client]
user = DBUSERNAME
password = DBPASSWORD

(где Вы вводите свое имя пользователя MySQL и пароль, конечно).

Этот файл будет автоматически считан любым mysql инструментом командной строки, если он будет выполнен как корень. Больше никакой потребности обеспечить его на команде-linea. Эти 600 полномочий защищают его от любопытных глаз.

1
ответ дан 2 December 2019 в 21:08
  • 1
    Я нашел, что это имело место того, КАК я смог нам mysqldump без пароля. Таким образом, это решило тайну того, как SHELL делает ее, итак, почему крон не читает ее? –  Mech Software 8 February 2010 в 20:32

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

Подсказки для крона:

  • используйте полные пути для всего - "ПОВТОРЯЮТ =/bin/echo", и т.д.: (определите переменные наверху для помощи),
  • MAILTO набора, таким образом, Вы получаете электронное письмо от каждого задания (или имеют перенаправление заданий stderr/stdout в файл),

Если Ваш пользователь root может сделать это от оболочки, крон должен смочь сделать это. Удостоверьтесь, что Вы явно указываете файл конфигурации для использования на командной строке.

1
ответ дан 2 December 2019 в 21:08

Хотя некоторые из этих ответов являются полезными, некоторые из них путают, так как unix-пользователь root и mysql-пользователь root не являются одинаковыми и, по сути, не имеют никаких отношений, кроме того, что они оба используют имя пользователя 'root'. Возможно, это очевидно, но, похоже, некоторые ответы объединяют их.

Полезным вариантом (возможно, он существует?) для mysqld было бы разрешить клиентским программам, таким как mysql или mysqldump и т.д., запущенным под unix root, получить доступ к mysqld'у root@localhost без пароля, без необходимости хранить пароль root@localhost (mysql) в моем компьютере. Я знаю, что это заставляет нервничать, но, по моему мнению, любой, кто использует unix root в качестве локального (на сервере mysqld), может легко обойти систему безопасности mysqld. А иметь a.cnf с паролем mysqld root 7x24 или даже создавать/удалять a.cnf с паролем mysql root (откуда этот пароль?) "на лету" (например, (например, для выполнения mysqldump) заставляет me нервничать.

Это потребует некоторой инфраструктуры и размышлений, потому что нужно доверять mysql/mysqldump/etc, чтобы передать mysqld, что он действительно верит, что он запущен под локальной учетной записью unix root.

Но, например, ограничение только unix сокетами mysqld, без TCP, может помочь, по крайней мере, как настоятельно рекомендуемая опция этой опции. Это может установить, что клиент работает под локальной учетной записью, чего, вероятно, недостаточно. Но это может быть началом идеи. Возможно, отправка дескриптора файла через unix-сокет может быть другой частью (google it, если это звучит как сумасшедший разговор)

P.S. Нет, я не буду пытаться провести мозговой штурм прямо здесь, как что-либо из этого может работать на не-униксовой операционной системе, то эта идея, вероятно, транслируется в другие операционные системы

.
0
ответ дан 2 December 2019 в 21:08

Теги

Похожие вопросы