Как установить root пароль для MySQL в Debian 9 (или MySQL 5.7+, MariaDB 10.1+)

Одно из новшеств новых версий MySQL и его свободного ответвления под названием MariaDB, является организация аутентификации пользователей базы данных. Мы привыкли, что после установки mysql-server, следующим шагом задаём root пароль, однако, после установки mysql-server в Debian 9, мы столкнёмся с тем, что ожидаемое «окно» ввода root пароля не появится, а все инструкции в интернетах по установке root пароля MySQL не сработают. Дело в том, что теперь под пользователем MySQL root можно авторизовываться только через auth_socket, например, в консоли через mysql-client из под unix root пользователя, без ввода пароля: mysql -u root.

Такие дела. Все эти mysqladmin -u root password, SET PASSWORD FOR root@localhost=PASSWORD, UPDATE user SET Password=PASSWORD(… не помогут. Утверждают, это повышает безопасность.

Но это, мягко скажем, не очень удобно для организации и управления базами данных, а также создания новых пользователей этих баз данных, когда есть, например, phpMyAdmin, предоставляющий комфортный веб-интерфейс для рутинных действий. Поэтому заходим в mysql-client из под unix root пользователя:

Читать дальше…

Безопасное хранение учётных данных в PHP

В веб-приложениях, как и в любом другом виде приложений, одной из самых сложных вещей является защита «секретных» данных. Этими данными могут быть ключи авторизации API, пароли БД и др. В идеале они не должны определяться в самом приложении, а загружаться из другого источника.

Хоть и множество проблем, связанных с защитой секретных данных, может быть устранено с помощью более менее «секретной обработки”, но, тем не менее, кажется, что всё ещё имеет место быть потребность в сохранении секретных данных прямо в коде. Использование такого рода паттерна, очевидно, не рекомендуется. В базе данных Common Weakness Enumeration есть даже запись об этом: CWE-798. Жёстко закодированные учётные данные могут представлять огромный риск, если злоумышленник каким-то образом смог получить доступ к коду и прочесть их.

Так что насчёт PHP?

В PHP приложениях существует общий паттерн для хранения конфигураций и доступов в .env файлах, располагаемый в директории, доступной для чтения из PHP. Поскольку это обычная практика, то я не хочу отходить слишком далеко от неё. Я предложу нечто такое, что сможет легко заменить это, но по-прежнему будет как можно проще.

Мы пройдёмся по нескольким хорошим методам хранения учётных данных, обсудим, что в них хорошего и плохого. Все они будут использовать простые методы хранения, основанные на коде или в соответствующем простом файле (например, в .env). Мы начнём с худшего варианта — сохранение учётных данных в текстовом виде в коде.

Читать дальше…

Решено: знаки вопросов, кракозябры вместо кириллицы в консоли

Не так давно в консоли стал наблюдать частичную потерю кириллицы, вероятно, после обновления. Метод, описанный в статье 2015 года, не сработал, поэтому статью удалил, и нашёл другое решение.

Откроем в редакторе /etc/environment.

su
mcedit /etc/environment

Где mcedit можно заменить на nano.

environment — это конфигурационный файл для задания переменных, доступных глобально во всей ОС. Добавим в него две такие переменные:

LANG="ru_RU.UTF-8"
LANGUAGE="ru_RU.UTF-8"

Сохраним и выйдем из редактора. Затем в консоли вызовем три команды:

locale-gen ru_RU.UTF-8
update-locale
dpkg-reconfigure locales

Теперь осталось выйти из сеанса консоли и снова зайти, чтобы применить новую конфигурацию.

P.S. На скринах есть ошибка в коде, кто заметит какая? 🙂

Решено: не устанавливается Docker CE

Вы следуете точно по инструкции с официального сайта Docker, например, по такой: https://docs.docker.com/install/linux/docker-ce/debian/, и, при попытке установить docker-ce, получаете ошибку:

Пакет docker-ce недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list

E: Для пакета «docker-ce» не найден кандидат на установку

Вы думаете, какого блин, начинаете искать альтернативные пути установки, устанавливаете по конкретной версии, через deb пакет. Может даже пытаетесь установить ядро посвежее. Но ничего не помогает?

Возможно у вас VPS сервер на платформе OpenVZ, на которой нет доступа к модулям и конфигурации ядра, в связи с чем установить на такой сервер Docker нельзя. Такие дела! Нужен VPS сервер на платформе KVM.

Решение: Qt Creator «Отсутствуют подходящие комплекты»

Если при попытке собрать проект, вы обнаруживаете, что нет неких комплектов для сборки, то похоже, что вы установили qtcreator без SDK. Поэтому нужно сделать следующее:

apt install qt-sdk

И перезапустить Qt Creator.

Если после этого при компиляции возникнет ошибка «qt creator needs a compiler setup to build», то выберите в параметрах компилятор:

Итоги 2017 года

Сейчас все подводят итоги уходящего года, ну а чем я лучше. В конце 2016 был недоволен тем, что ничего особенного не сделал, и решил поставить цели на 2017 год. Цели, конечно, были несколько амбициозны, но многие таки совершились.
1) Пожалуй, самое значимое событие года, это смена работы;
2) Не менее важное событие — решимость пойти учиться на права и таки выучился, да получил права;
3) Вы будете смеяться, но одной из цели на год было собрать Lamborghini Murcielago SV в масштабе. Это особенный для меня автомобиль, и я не просто собрал Мурси, а сделал это трижды, причём стоковую версию даже не думал начинать, ибо предыдущий опыт несколько лет назад оставил негативные впечатления, но таки получилось;
4) А ещё впервые в этом году увидел и потрогал вживую енота 🙂 И не одного. И не раз, бгг;
5) Завёл инстаграмм и собрал ажно 300+ подписчиков. Спасибо вам!
6) За год собрал 21 модель, несколькими из которых, думаю, можно гордиться;
7) С карьерой пианиста закончено.
Чтобы вы не подумали, были и негативные моменты. Например, поставили ещё одно хроническое заболевание. Но буду надеяться, что всё будет ок.

Подсчитать количество файлов в каталоге Linux

В определённом каталоге

Быстрый подсчёт всех файлов и каталогов в указанном:

ls -f КАТАЛОГ | wc -l

Примечание: учитываются «.», «..» и все файлы и каталоги, начинающиеся с точки.

С учётом вложенных каталогов

Подсчёт только файлов в указанном и вложенных каталогах рекурсивно:

find КАТАЛОГ -type f | wc -l

Подсчёт только каталогов в указанном и вложенных рекурсивно:

find КАТАЛОГ -type d | wc -l

Засечь время выполнения команды в Linux

Иногда может быть полезным определить время выполнения команды. Сделать это можно с помощью команды time, подставив её в начале вызова. Примеры:

time zip -r /var/backups/etc.zip /etc/
time mysqldump -u backup -p`cat /home/dev/.extrahide.pas` extrahide > extrahide.sql

Лог запросов в MySQL

В разработке для отладки и тестирования может пригодиться логировать запросы в MySQL.

Воспользоваться этой возможностью легко, достаточно в конфигурационном файле MySQL (my.cnf) добавить в секцию mysqld следующее:

[mysqld]
...
general_log_file = /var/log/mysql/mysql.log
general_log = 1

И перезапустить сервер СУБД:

service mysql restart

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

Получить статистику трафика и проверить загруженность сети в Linux

Первый инструмент — jnettop.

Показывает статистику трафика в реальном времени.

Установка:

apt install jnettop

Запуск:

jnettop

Второй инструмент — cbm.

Показывает загруженность сети.

Установка:

apt install cbm

Запуск:

cbm

На что обращаем внимание: не упирается ли трафик в возможности интерфейса, например, если интерфейс 100 Мбит, а средний трафик около 90 Мбит, то это плохо.