Что мне не хватает при настройке обратного DNS?

Я настраиваю rDNS для использования с сервером SolusVM. Я использовал PowerDNS на двух серверах в качестве ведомого и главного и успешно настроил репликацию MySQL. При просмотре таблицы записей MySQL я вижу все записи SOA, NS и PTR.

Я создал две записи A (rdns1.example.com, rdns2.example.com) и указал их на главный и подчиненный серверы соответственно.

Я обновил серверы имен DNS обратного IP на arin.net, чтобы они указывали на файлы rdns1.example.com и rdns2. УСТАНОВИТЬ ПАРОЛЬ [FOR 'dave' @ 'localhost'] = PASSWORD (...

Я видел различные методы для установки паролей в MySQL, например, такие как:

GRANT USAGE ON db.* to 'dave'@'localhost' IDENTIFIED BY 'supersecretpassword');
SET PASSWORD [FOR 'dave'@'localhost'] = PASSWORD('reallysecretpassword');
UPDATE mysql.user SET PASSWORD=PASSWORD('confidentialpassword') WHERE user='dave' AND host='localhost';

Но они, похоже, включают ввод пароля в clear как часть команды SQL, что вызывает паранойю по поводу того, попадает ли он в мою историю команд SQL, или о том, смотрит ли кто-нибудь через мое плечо или может взглянуть на мою прокрутку терминала.

Могу ли я каким-то образом заставить MySQL предложить мне ввести пароль, не выводя его на экран (точно так же, как Unix с passwd )?

4
задан 17 April 2017 в 19:36
3 ответа

Алгоритм хеширования паролей довольно прост и может быть воспроизведен на других языках программирования.

Согласно https://www.pythian.com/blog/hashing-algorithm-in-mysql-password/ , в MySQL 4.1 и выше функция PASSWORD принимает (двоичный ) SHA1 строки пароля дважды, затем возвращает это в виде шестнадцатеричной строки, которой предшествует звездочка.

Например, в SQL:

> SELECT PASSWORD('test'), SHA1(UNHEX(SHA1('test')));
+-------------------------------------------+------------------------------------------+
| PASSWORD('test')                          | SHA1(UNHEX(SHA1('test')))                |
+-------------------------------------------+------------------------------------------+
| *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 | 94bdcebe19083ce2a1f959fd02f964c7af4cfc29 |
+-------------------------------------------+------------------------------------------+

Использование кода MySQL на консоли не оправдывает себя, но вот довольно простой сценарий Python который запрашивает пароль и генерирует из него строку пароля, совместимую с MySQL.

import hashlib, getpass

def mysql_password(p):
    return '*' + hashlib.sha1( hashlib.sha1(p).digest() ).hexdigest().upper()

password = getpass.getpass()

print(mysql_password(password))

Затем он может быть назначен непосредственно пользователю в MySQL:

SET PASSWORD FOR 'dave'@'localhost' = '*94BDCE...';

Таким образом, на консоли / MySQL когда-либо виден только хэш пароля. история. (Это не больше, чем может увидеть любой, у кого есть доступ к таблице mysql.user .)

2
ответ дан 3 December 2019 в 03:54

Скрипт-оболочка на каком-то языке (я бы использовал php и запускал через cli, так как это было бы быстрое копирование / вставка из того, что у меня уже есть), который выполняется, затем удаляется или наименее отредактированный еще раз, чтобы изменить все пароли на «changeme» ​​или аналогичные.

0
ответ дан 3 December 2019 в 03:54

Как Федерико Сьерра указывает в комментариях, вы можете использовать mysqladmin password команда для изменения пароля для любого пользователя, под которым вы можете войти в систему.

Раньше пароль нужно было вводить в командной строке, но с версии 5.7, если пароль не указан, запрашивается пароль.

] Из документации mysqladmin :

пароль новый_пароль

Установите новый пароль. Это изменяет пароль на new_password для учетной записи, которую вы используете с mysqladmin для подключения к серверу. Таким образом, в следующий раз, когда вы вызовете mysqladmin (или любую другую клиентскую программу) с той же учетной записью, вам нужно будет указать новый пароль.

[...]

В MySQL 5.7 новый пароль может быть опущен после команды password . В этом случае mysqladmin запрашивает значение пароля, что позволяет избежать указания пароля в командной строке. Пропуск значения пароля следует делать только в том случае, если пароль является последней командой в командной строке mysqladmin . В противном случае в качестве пароля принимается следующий аргумент.

Итак, если вы знаете пароль пользователя и находитесь на хосте, с которого вам разрешено входить в систему, вы можете изменить его пароль с помощью:

mysqladmin -u <user_name> [-p] password

например

$ mysqladmin -u dave -p password
Enter password: 
New password: 
Confirm new password: 

] Конечно, если у вас есть необходимые права, вы можете изменить исходный пароль пользователя и хост, чтобы вы могли войти в систему. Но это связано с собственными рисками, поэтому это не идеально.

Примечание: я отвечаю на свой свой вопрос здесь, но я не собираюсь отмечать его как принятый, так как я не удовлетворен, что это в целом безопасный способ изменения пароля пользователя.

0
ответ дан 3 December 2019 в 03:54

Теги

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