One place for hosting & domains

      обеспечение

      Установка и обеспечение безопасности Redis в Ubuntu 20.04 [Краткое руководство]


      Введение

      Redis — это быстрое хранилище данных типа «ключ‑значение», известное своей гибкостью, производительностью и широким выбором поддерживаемых языков. В этом кратком руководстве описывается установка, настройка и обеспечение безопасности Redis на сервере Ubuntu 20.04.

      Предварительные требования

      Для выполнения данного руководства вам потребуется сервер Ubuntu 20.04 с пользователем без прав root с привилегиями sudo и брандмауэром с конфигурацией ufw. Вы можете выполнить настройку, следуя указаниям документа Начальная настройка сервера для Ubuntu 20.04​​​.

      Шаг 1 — Установка и настройка Redis

      Начните с обновления кэша локальных пакетов apt:

      Затем установите Redis. Для этого введите следующее:

      • sudo apt install redis-server

      Далее откройте файл конфигурации Redis в любом текстовом редакторе:

      • sudo nano /etc/redis/redis.conf

      Внутри файла найдите директиву supervised, которая позволяет декларировать систему инициализации для управления Redis как службой. Поскольку вы работаете в Ubuntu, которая использует систему инициализации systemd, измените значение с no на systemd:

      /etc/redis/redis.conf

      . . .
      
      # If you run Redis from upstart or systemd, Redis can interact with your
      # supervision tree. Options:
      #   supervised no      - no supervision interaction
      #   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
      #   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
      #   supervised auto    - detect upstart or systemd method based on
      #                        UPSTART_JOB or NOTIFY_SOCKET environment variables
      # Note: these supervision methods only signal "process is ready."
      #       They do not enable continuous liveness pings back to your supervisor.
      supervised systemd
      
      . . .
      

      Сохраните файл и закройте его после завершения. Если вы использовали nano для редактирования файла, нажмите CTRL + X, Y, а затем ENTER.

      Перезапустите службу Redis, чтобы изменения в файле конфигурации вступили в силу:

      • sudo systemctl restart redis.service

      Чтобы убедиться, что Redis работает правильно, подключитесь к серверу с помощью клиента командной строки Redis redis-cli:

      В появившемся диалоговом окне протестируйте подключение с помощью команды ping:

      Output

      PONG

      Данный вывод подтверждает, что подключение сервера активно. Затем проверьте, что вы можете задать ключи:

      Output

      OK

      Запросите значение с помощью следующей команды:

      Если все работает корректно, вы получите сохраненное значение:

      Output

      "It's working!"

      Убедившись, что вы можете получить значение, закройте диалоговое окно Redis и вернитесь в командную строку:

      Шаг 2 — Настройка пароля Redis

      Вы можете настроить пароль Redis непосредственно в файле конфигурации Redis /etc/redis/redis.conf. Откройте этот файл еще раз в предпочитаемом редакторе:

      • sudo nano /etc/redis/redis.conf

      Прокрутите содержимое файла до раздела SECURITY и найдите следующую закомментированную директиву:

      /etc/redis/redis.conf

      . . .
      # requirepass foobared
      . . .
      

      Раскомментируйте ее, удалив символ #, и измените foobared на безопасный пароль:

      /etc/redis/redis.conf

      . . .
      requirepass your_redis_password
      . . .
      

      После установки пароля сохраните и закройте файл, а потом перезапустите Redis:

      • sudo systemctl restart redis.service

      Чтобы проверить, работает ли пароль, откройте клиент Redis:

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

      Это не сработает, потому что вы не выполнили аутентификацию, поэтому Redis возвращает ошибку:

      Output

      (error) NOAUTH Authentication required.

      Следующая команда выполняет аутентификацию с паролем, указанным в файле конфигурации Redis:

      Redis принимает пароль:

      Output

      OK

      После этого запуск предыдущей команды будет успешным:

      Output

      OK

      get key1 запрашивает в Redis значение нового ключа.

      Output

      "10"

      Подтвердив, что вы можете выполнять команды в клиенте Redis после аутентификации, вы можете закрыть redis-cli:

      Шаг 3 — Переименование опасных команд

      Другой элемент безопасности, встроенные в Redis, подразумевает переименование или полное удаление определенных команд, которые считаются опасными. Список команд, которые считаются опасными, включает: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF,BGSAVE, SAVE, SPOP, SREM, RENAME и DEBUG. Деактивировав или переименовав эти и другие команды, вы можете помешать несанкционированным пользователям изменить, уничтожить или стереть ваши данные каким-либо иным способом.

      Чтобы переименовать или отключить команды Redis, откройте файл конфигурации еще раз:

      • sudo nano /etc/redis/redis.conf

      Предупреждение. Следующие шаги с демонстрацией отключения или переименования команд являются примерами. Вы должны отключить или переименовать команды, имеющие смысл для вас. Вы можете просмотреть полный список команд самостоятельно и узнать, как они могут использоваться злоумышленниками, по адресу redis.io/commands.

      Чтобы отключить команду, просто укажите пустую строку в качестве имени (обозначается парой кавычек без символов между ними), как показано ниже:

      /etc/redis/redis.conf

      . . .
      # It is also possible to completely kill a command by renaming it into
      # an empty string:
      #
      rename-command FLUSHDB ""
      rename-command FLUSHALL ""
      rename-command DEBUG ""
      . . .
      

      Чтобы переименовать команду, дайте ей другое имя, как показано в приведенных ниже примерах. Переименованные команды должно быть трудно подобрать, но легко запомнить:

      /etc/redis/redis.conf

      . . .
      # rename-command CONFIG ""
      rename-command SHUTDOWN SHUTDOWN_MENOT
      rename-command CONFIG ASC12_CONFIG
      . . .
      

      Сохраните изменения и закройте файл.

      После переименования команды примените изменения, перезапустив Redis:

      • sudo systemctl restart redis.service

      Чтобы протестировать новую команду, откройте командную строку Redis:

      Затем выполните аутентификацию:

      Output

      OK

      Если вы переименовали команду CONFIG в ASC12_CONFIG, как в предыдущем примере, попробуйте использовать первоначальную команду CONFIG. Команда не будет выполнена, потому что вы переименовали ее:

      Output

      (error) ERR unknown command `config`, with args beginning with:

      Вызов переименованной команды будет успешным. Регистр не имеет значения:

      • asc12_config get requirepass

      Output

      1) "requirepass" 2) "your_redis_password"

      Заключение

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



      Source link

      Установка и обеспечение безопасности Redis в Ubuntu 20.04


      Предыдущая версия данного обучающего руководства была написана Джастином Эллингвудом

      Введение

      Redis — это быстрое хранилище данных типа «ключ‑значение», известное своей гибкостью, производительностью и широким выбором поддерживаемых языков. В этом руководстве описывается установка, настройка и обеспечение безопасности Redis на сервере Ubuntu 20.04.

      Предварительные требования

      Для выполнения данного руководства вам потребуется сервер Ubuntu 20.04 с non-root user с привилегиями sudo и брандмауэром с конфигурацией ufw. Вы можете выполнить настройку, следуя указаниям документа Начальная настройка сервера для Ubuntu 20.04​​​.

      Шаг 1 — Установка и настройка Redis

      Мы будем использовать диспетчер пакетов APT для установки redis из официальных репозиториев Ubuntu. На момент написания этой статьи в репозиториях по умолчанию доступна версия 5.0.7.

      Начните с обновления кэша локальных пакетов apt:

      Затем установите Redis. Для этого введите следующее:

      • sudo apt install redis-server

      После этого будет выполнена загрузка и установка Redis и ее зависимостей. После этого в файл конфигурации Redis, созданный автоматически при установке, необходимо внести одно важное изменение.

      Откройте этот файл в предпочитаемом текстовом редакторе:

      • sudo nano /etc/redis/redis.conf

      Внутри файла найдите директиву supervised. Эта директива позволяет объявить систему инициализации для управления Redis как службой, предоставляя вам более широкий контроль за ее работой. Для директивы supervised по умолчанию установлено значение no. Поскольку вы запускаете Ubuntu, которая использует систему инициализации systemd, измените значение на systemd:

      /etc/redis/redis.conf

      . . .
      
      # If you run Redis from upstart or systemd, Redis can interact with your
      # supervision tree. Options:
      #   supervised no      - no supervision interaction
      #   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
      #   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
      #   supervised auto    - detect upstart or systemd method based on
      #                        UPSTART_JOB or NOTIFY_SOCKET environment variables
      # Note: these supervision methods only signal "process is ready."
      #       They do not enable continuous liveness pings back to your supervisor.
      supervised systemd
      
      . . .
      

      Это единственное изменение, которое вам нужно внести в файл конфигурации Redis на данный момент,поэтому сохраните и закройте его после завершения редактирования. Если вы использовали nano для редактирования файла, нажмите CTRL + X, Y, а затем ENTER.

      Перезапустите службу Redis, чтобы изменения в файле конфигурации вступили в силу:

      • sudo systemctl restart redis.service

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

      Шаг 2 — Тестирование Redis

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

      Сначала проверьте, что служба Redis запущена:

      • sudo systemctl status redis

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

      Output

      ● redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-04-30 23:26:54 UTC; 4s ago Docs: http://redis.io/documentation, man:redis-server(1) Process: 36552 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS) Main PID: 36561 (redis-server) Tasks: 4 (limit: 2345) Memory: 1.8M CGroup: /system.slice/redis-server.service └─36561 /usr/bin/redis-server 127.0.0.1:6379 . . .

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

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

      • sudo systemctl disable redis

      Чтобы убедиться, что Redis работает правильно, подключитесь к серверу с помощью клиента командной строки Redis redis-cli:

      В появившемся диалоговом окне протестируйте подключение с помощью команды ping:

      Output

      PONG

      Данный вывод подтверждает, что подключение сервера активно. Затем проверьте, что вы можете задать ключи:

      Output

      OK

      Запросите значение с помощью следующей команды:

      Если все работает корректно, вы получите сохраненное значение:

      Output

      "It's working!"

      Убедившись, что вы можете получить значение, закройте диалоговое окно Redis и вернитесь в командную строку:

      В качестве последнего теста мы проверим, может ли Redis сохранять данные даже после остановки или перезапуска. Для этого необходимо перезапустить Redis:

      • sudo systemctl restart redis

      Затем снова выполните подключение с помощью клиента командной строки:

      И убедитесь, что ваше тестовое значение все еще доступно.

      Значение вашего ключа должно оставаться доступным:

      Output

      "It's working!"

      Выйдите в командную строку после завершения:

      После этого установку Redis можно считать выполненной и готовой к работе. Однако некоторые настройки по умолчанию являются небезопасными и предоставляют злоумышленникам возможность атаковать ваш сервер и получить доступ к данным.Остальные шаги в этом руководстве описывают методы для устранения этих факторов уязвимости, как указано на официальном веб-сайте Redis. Хотя эти шаги не являются обязательными, и Redis будет функционировать, если вы решите не выполнять эти действия, но мы настоятельно рекомендуем вам выполнить описанные ниже шаги, чтобы повысить безопасность вашей системы.

      Шаг 3 — Привязка к localhost

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

      Чтобы исправить это, откройте файл конфигурации Redis для редактирования:

      • sudo nano /etc/redis/redis.conf

      Найдите эту строку и убедитесь, что она незакомментирована (удалите символ #, если он существует):

      /etc/redis/redis.conf

      bind 127.0.0.1 ::1
      

      Сохраните и закройте файл после завершения (нажмите CTRL + X, Y, затем ENTER).

      Затем перезапустите службу, чтобы systemd распознала изменения:

      • sudo systemctl restart redis

      Чтобы убедиться, что изменение вступило в силу, запустите следующую команду netstat:

      • sudo netstat -lnp | grep redis

      Output

      tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 14222/redis-server tcp6 0 0 ::1:6379 :::* LISTEN 14222/redis-server

      Примечание: команда netstat может отсутствовать по умолчанию в вашей системе. В этом случае вы можете установить ее (а также многие другие удобные сетевые инструменты) с помощью следующей команды:

      • sudo apt install net-tools

      Данный вывод указывает, что программа redis-server привязана к localhost (127.0.0.1), отражая изменения, которые вы только что внесли в файл конфигурации. Если вы увидите другой IP-адрес в этой колонке (например, 0.0.0.0), вам нужно еще раз проверить, что вы не закомментировали нужную строку и перезапустить службу Redis.

      Теперь, когда Redis использует только localhost, злоумышленникам будет труднее выполнять запросы или получить доступ к вашему серверу. Однако для Redis в настоящее время не настроено требование аутентификации пользователей перед внесением изменений в конфигурацию или данные, которые она хранит. Чтобы исправить это, Redis позволяет настроить требование аутентификации с помощью пароля перед внесением изменений через клиент Redis (redis-cli).

      Шаг 4 — Настройка пароля Redis

      Настройка пароля Redis позволяет использовать одну из двух встроенных функций безопасности — команду auth, которая требует аутентификации клиентов для доступа к базе данных. Пароль настраивается непосредственно в файле конфигурации Redis, /etc/redis/redis.conf, поэтому вам нужно снова открыть этот файл в предпочитаемом редакторе:

      • sudo nano /etc/redis/redis.conf

      Прокрутите содержимое файла до раздела SECURITY и найдите следующую закомментированную директиву:

      /etc/redis/redis.conf

      . . .
      # requirepass foobared
      . . .
      

      Разкомментируйте ее, удалив символ # и измените foobared на безопасный пароль.

      Примечание: над директивой requirepass в файле redis.conf располагается закомментированное предупреждение:

      /etc/redis/redis.conf

      . . .
      # Warning: since Redis is pretty fast an outside user can try up to
      # 150k passwords per second against a good box. This means that you should
      # use a very strong password otherwise it will be very easy to break.
      #
      . . .
      

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

      • openssl rand 60 | openssl base64 -A

      Вывод должен выглядеть следующим образом:

      Output

      RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

      Скопируйте и вставьте вывод этой команды в качестве нового значения для requirepass. Оно должно выглядеть следующим образом:

      /etc/redis/redis.conf

      requirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

      После установки пароля сохраните и закройте файл, а потом перезапустите Redis:

      • sudo systemctl restart redis.service

      Чтобы проверить, работает ли пароль, откройте клиент Redis:

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

      Это не сработает, потому что вы не выполнили аутентификацию, поэтому Redis возвращает ошибку:

      Output

      (error) NOAUTH Authentication required.

      Следующая команда выполняет аутентификацию с паролем, указанным в файле конфигурации Redis:

      Redis принимает пароль:

      Output

      OK

      После этого запуск предыдущей команды будет успешным:

      Output

      OK

      get key1 запрашивает в Redis значение нового ключа.

      Output

      "10"

      Подтвердив, что вы можете выполнять команды в клиенте Redis после аутентификации, вы можете закрыть redis-cli:

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

      Шаг 5 — Переименование опасных команд

      Другой элемент безопасности, встроенные в Redis, подразумевает переименование или полное удаление определенных команд, которые считаются опасными.

      При использовании неавторизованными пользователями, такие команды могут использоваться для изменения конфигурации, уничтожения или выведения из строя ваших данных. Как и в случае пароля для аутентификации, переименование или отключение команд выполняется в том же разделе SECURITY в файле /etc/redis/redis.conf.

      Список команд, которые считаются опасными, включает: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME и DEBUG. Данный список не является всеобъемлющим, но переименование или удаление всех команд в этом списке служит хорошим отправным пунктом для повышения безопасности вашего сервера Redis.

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

      Чтобы переименовать или отключить команды Redis, откройте файл конфигурации еще раз:

      • sudo nano /etc/redis/redis.conf

      Предупреждение. Седующие шаги с демонстрацией отключения или переименования команд являются примерами. Вы должны отключить или переименовать команды, имеющие смысл для вас. Вы можете просмотреть полный список команд самостоятельно и узнать, как они могут использоваться злоумышленниками, по адресу redis.io/commands.

      Чтобы отключить команду, просто укажите пустую строку в качестве имени (обозначается парой кавычек без символов между ними), как показано ниже:

      /etc/redis/redis.conf

      . . .
      # It is also possible to completely kill a command by renaming it into
      # an empty string:
      #
      rename-command FLUSHDB ""
      rename-command FLUSHALL ""
      rename-command DEBUG ""
      . . .
      

      Чтобы переименовать команду, дайте ей другое имя, как показано в приведенных ниже примерах. Переименованные команды должно быть трудно подобрать, но легко запомнить:

      /etc/redis/redis.conf

      . . .
      # rename-command CONFIG ""
      rename-command SHUTDOWN SHUTDOWN_MENOT
      rename-command CONFIG ASC12_CONFIG
      . . .
      

      Сохраните изменения и закройте файл.

      После переименования команды примените изменения, перезапустив Redis:

      • sudo systemctl restart redis.service

      Чтобы протестировать новую команду, откройте командную строку Redis:

      Затем выполните аутентификацию:

      Output

      OK

      Предположим, вы переименовали команду CONFIG в ASC12_CONFIG, как показано в предыдущем примере. Сначала попробуйте воспользоваться первоначальной команду CONFIG. Команда не будет выполнена, потому что вы переименовали ее:

      Output

      (error) ERR unknown command `config`, with args beginning with:

      Вызов переименованной команды будет успешным. Регистр не имеет значения:

      • asc12_config get requirepass

      Output

      1) "requirepass" 2) "your_redis_password"

      После этого вы можете закрыть redis-cli:

      Обратите внимание, что если вы уже используете командную строку Redis, а затем перезапустите Redis, вам нужно будет повторно выполнить аутентификацию. Иначе вы получите следующую ошибку при вводе команды:

      Output

      NOAUTH Authentication required.

      В отношении практики переименования команд в конце раздела SECURITY файла /etc/redis/redis.conf есть следующее предостережение:

      /etc/redis/redis.conf

      . . .
      # Please note that changing the name of commands that are logged into the
      # AOF file or transmitted to replicas may cause problems.
      . . .
      

      Примечание: проект Redis предпочитает использовать термины «master» и «slave», в то время как DigitalOcean предпочитает использовать варианты «primary» и «secondary». Чтобы не допустить путаницы, мы решили использовать здесь термины, используемые в документации Redis.

      Это значит, что, если переименованная команда не содержится в файле AOF, либо содержится, но AOF файл не передается «slave» компонентам, не будет никаких проблем.

      Учитывайте этот момент, когда будете переименовать команды. Лучшее всего переименовать команду, пока вы не используете AOF сохранение или сразу после установки, т.е. до развертывания использующего Redis приложения.

      Если вы используете AOF и работаете с конфигурацией master-slave, изучите этот ответ на странице проблем проекта на GitHub. Ниже приводится ответ на вопрос автора:

      Команды сохраняются в AOF и воспроизводятся в «slave» компоненте в таком же виде, как были отправлены, поэтому если вы попытаетесь использовать AOF для экземпляра, где не было выполнено переименование, могут возникнуть противоречия, так как команда не может быть выполнена (то же самое характерно для «slave» компонентов).

      Таким образом, при переименовании необходимо убедиться, что переименованные команды применяются во всех экземплярах на установках типа «master-slave».

      Заключение

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

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



      Source link

      Установка и обеспечение безопасности phpMyAdmin в Ubuntu 20.04


      Предыдущая версия данного руководства была написана Бреннаном Бернсом.

      Введение

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

      phpMyAdmin был создан, чтобы пользователи могли взаимодействовать с MySQL через веб-интерфейс. В этом руководстве мы расскажем, как выполнить установку и обеспечить безопасность phpMyAdmin, чтобы вы могли безопасно использовать данный инструмент для управления своими базами данных в Ubuntu 20.04.

      Предварительные требования

      Для выполнения этого руководства вам потребуется следующее:

      • Сервер Ubuntu 20.04 Этот сервер должен иметь пользователя без прав root с правами администратора, а также брандмауэр, настроенный с помощью ufw. Чтобы выполнить настройку, воспользуйтесь руководством по начальной настройке сервера Ubuntu 20.04.
      • Стек LAMP (Linux, Apache, MySQL и PHP), установленный на вашем сервере Ubuntu 20.04. Если вы еще не сделали этого, вы можете воспользоваться данным руководством по установке стека LAMP на Ubuntu 20.04.

      Наконец, существует ряд важных соображений безопасности при использовании таких программных средств, как phpMyAdmin, поскольку phpMyAdmin:

      • напрямую связывается с установленной у вас версией MySQL;
      • управляет аутентификацией, используя учетные данные MySQL;
      • исполняет и возвращает результаты для произвольных SQL запросов.

      По этим причинам, и поскольку это широко применяемое PHP приложение, которое часто становится мишенью для атак, вы ни при каких условиях не должны запускать phpMyAdmin на удаленных системах, используя обычное HTTP-соединение.

      Если у вас нет существующего домена с настроенным SSL/TLS сертификатом, вы можете воспользоваться следующим руководством по обеспечению безопасности Apache с помощью Let’s Encrypt в Ubuntu 20.04. Для этого вам потребуется зарегистрировать доменное имя, создать DNS запись для вашего сервера и настроить виртуальный хост Apache.

      Шаг 1 — Установка phpMyAdmin

      Вы можете использовать APT для установки phpMyAdmin из репозиториев Ubuntu по умолчанию.

      Обновите индекс пакетов вашего сервера от имени пользователя без прав root с привилегиями sudo:

      После этого вы можете установить пакет phpmyadmin. Помимо этого пакета, официальная документация также рекомендует установить несколько расширений PHP на ваш сервер для возможности использования определенной функциональности и улучшения производительности.

      Если вы выполнили предварительное требования руководства для стека LAMP, ряд из этих модулей уже был установлен вместе с пакетом php. Однако рекомендуется также установить следующие пакеты:

      • php-mbstring: модуль для работы с строками, не поддерживающими кодировку ASCII, и конвертации таких строк в другие кодировки
      • php-zip: это расширение поддерживает загрузку файлов .zip в phpMyAdmin
      • php-gd: поддержка библиотеки GD Graphics
      • php-json: поддержка сериализации JSON для PHP
      • php-curl: позволяет PHP взаимодействовать с разными типами серверов, используя разные протоколы

      Запустите следующую команду для установки этих пакетов в систему. Обратите внимание, что процесс установки требует, чтобы вы ответили на ряд вопросов для корректной настройки phpMyAdmin. Мы кратко пробежимся по этим параметрам:

      • sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

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

      • Для выбора сервера вы можете выбрать apache2
        Предупреждение. При появлении запроса вариант «apache2» выделен, но не выбран. Если вы не нажмете ПРОБЕЛ для выбора Apache, установщик не будет перемещать необходимые файлы при установке. Нажмите ПРОБЕЛ, затем TAB, а потом ENTER для выбора Apache.
      • Выберите Да при ответе на вопрос о том, необходимо ли использовать dbconfig-common для настройки базы данных.
      • Затем вам будет предложено выбрать и подтвердить пароль приложения MySQL для phpMyAdmin

      Примечание. Если вы установили MySQL, следуя указаниям шага 2 с предварительными требования из руководства для стека LAMP, вы, возможно, активировали плагин Validate Password. На момент написания этого руководства активация этого компонента будет вызывать ошибку при попытке задать пароль пользователя phpmyadmin:

      ошибка валидации пароля в phpMyAdmin

      Для устранения этой проблемы выберите опцию abort для остановки процесса установки. Затем откройте командную строку MySQL:

      Либо, если вы активировали аутентификацию по паролю для пользователя с правами root MySQL, запустите эту команду, а затем введите пароль при запросе:

      Из командной строки запустите следующую команду для отключения компонента Validate Password. Обратите внимание, что в этом случае выполняется не удаление, а простая остановка загрузки компонента на ваш сервер MySQL:

      • UNINSTALL COMPONENT "file://component_validate_password";

      После этого вы можете закрыть клиент MySQL:

      Затем попробуйте еще раз установить пакет phpmyadmin, после чего все будет работать ожидаемым образом:

      • sudo apt install phpmyadmin

      После установки phpMyAdmin вы можете открыть командную строку MySQL еще раз с помощью sudo mysql или mysql -u root -p, а затем запустить следующую команду для повторной активации компонента Validate Password:

      • INSTALL COMPONENT "file://component_validate_password";

      В процессе установки будет добавлен файл конфигурации phpMyAdmin в каталог /etc/apache2/conf-enabled/, где он будет считываться автоматически. Для завершения настройки Apache и PHP для работы с phpMyAdmin выполните последнюю оставшуюся задачу этого раздела руководства и явно активируйте расширение PHP mbstring с помощью следующей команды:

      Перезапустите Apache для вступления изменений в силу.

      • sudo systemctl restart apache2

      Теперь phpMyAdmin установлен и настроен для работы с Apache. Однако, прежде чем вы сможете войти и начать взаимодействие с базами данных MySQL, вам нужно убедиться, что у пользователей MySQL есть права, необходимые для взаимодействия с программой.

      Шаг 2 — Настройка аутентификации и прав пользователя

      При установке phpMyAdmin на ваш сервер автоматически создал пользователь базы данных с именем phpmyadmin, который отвечает за определенные базовые процессы программы. Вместо того, чтобы выполнять вход с помощью этого пользователя и пароля администратора, которые вы задали при установке, рекомендуется войти с использованием вашего пользователя root MySQL или пользователя, предназначенного для управления базами данных через интерфейс phpMyAdmin.

      Настройка доступа по паролю для учетной записи root в MySQL

      В системах Ubuntu при запуске MySQL 5.7 (и более поздние версии) для пользователя root MySQL по умолчанию устанавливается аутентификация с помощью плагина auth_socket, а не пароля. Это позволяет обеспечить большую безопасность и удобство во многих случаях, однако это также может осложнить ситуацию, когда вам нужно предоставить внешней программе, например, phpMyAdmin, доступ к пользователю.

      Чтобы войти в phpMyAdmin с пользователем root MySQL, вам нужно переключить метод аутентификации с auth_socket на метод. использующий пароль, если вы еще не сделали этого. Для этого откройте командную строку MySQL через терминал:

      Затем проверьте, какой метод аутентификации используют ваши аккаунты пользователей MySQL с помощью следующей команды:

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      Output

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

      В этом примере вы можете видеть, что пользователь root действительно использует метод аутентификации с помощью плагина auth_socket. Чтобы настроить для учетной записи root аутентификацию с помощью пароля, выполните следующую команду ALTER USER. Обязательно измените значение password на надежный пароль по вашему выбору:

      • ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

      Примечание. Предыдущее выражение ALTER USER устанавливает аутентификацию пользователя root MySQL с помощью плагина caching_sha2_password​​. Согласно официальной документации MySQL, caching_sha2_password​​​ считается предпочтительным плагином аутентификации MySQL, так как он обеспечивает более защищенное шифрование пароля, чем более старая, но все еще широко используемая версия mysql_native_password.

      Однако некоторые версии PHP работают ненадежно с caching_sha2_password. Как сообщается, эта проблема была устранена в версии PHP 7.4​​​, но если вы получите ошибку при попытке выполнить вход в phpMyAdmin позднее, вы можете задать для root аутентификацию с помощью mysql_native_password:

      • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

      Затем проверьте методы аутентификации, применяемые для каждого из ваших пользователей, чтобы подтвердить, что пользователь root больше не использует для аутентификации плагин auth_socket:

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      Output

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | caching_sha2_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

      В этом выводе вы можете увидеть, что пользователь root user будет использовать аутентификацию по паролю. Теперь вы можете выполнить вход в интерфейс phpMyAdmin с помощью пользователя root с паролем, который вы задали ранее.

      Настройка доступа по паролю для выделенного пользователя MySQL

      Некоторые могут посчитать, что для их рабочего процесса лучше подходит подключение к phpMyAdmin с помощью специально выделенного пользователя. Чтобы сделать это, снова откройте командную строку MySQL:

      Если вы активировали аутентификацию по паролю для вашего пользователя root, как описано в предыдущем разделе, вам нужно запустить следующую команду и ввести пароль при запросе для подключения:

      Создайте нового пользователя и придумайте для него надежный пароль:

      • CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

      Примечание. В зависимости от версии PHP, которую вы установили, вы можете задать для вашего нового пользователя аутентификацию с помощью mysql_native_password вместо caching_sha2_password:

      • ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

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

      • GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

      После этого закройте командную строку MySQL:

      Теперь вы можете получить доступ к веб-интерфейсу, набрав доменное имя или открытый IP-адрес вашего сервера и добавив /phpmyadmin:

      https://your_domain_or_IP/phpmyadmin
      

      phpMyAdmin login screen

      Выполните вход в интерфейс с помощью пользователя root или с новым именем пользователя и паролем, которые вы только что задали.

      При входе вы увидите пользовательский интерфейс, который будет выглядеть следующим образом:

      phpMyAdmin user interface

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

      Шаг 3 — Обеспечение безопасности phpMyAdmin

      Из-за своей вездесущности phpMyAdmin часто становится мишенью для атак, поэтому вам нужно дополнительно позаботиться о предотвращении несанкционированного доступа. Один из способов — это размещение шлюза перед всем приложением с помощью встроенного в Apache функционала авторизации и аутентификации через .htaccess.

      Чтобы сделать это, вы должны сначала активировать перезапись файла .htaccess, изменив файл конфигурации Apache вашей установки phpMyAdmin.

      Воспользуйтесь предпочитаемым текстовым редактором для редактирования файла phpmyadmin.conf, который находится в каталоге конфигурации Apache. Мы будем использовать nano:

      • sudo nano /etc/apache2/conf-available/phpmyadmin.conf

      Добавьте директиву AllowOverride All в раздел файла конфигурации <Directory /usr/share/phpmyadmin>, например:

      /etc/apache2/conf-available/phpmyadmin.conf

      <Directory /usr/share/phpmyadmin>
          Options FollowSymLinks
          DirectoryIndex index.php
          AllowOverride All
          . . .
      

      После добавления этой строки сохраните и закройте файл. Если вы использовали nano для редактирования файла, нажмите CTRL + X, Y, а затем ENTER.

      Перезапустите Apache, чтобы изменения вступили в силу.

      • sudo systemctl restart apache2

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

      Чтобы этот файл мог использоваться, он должен находиться в каталоге приложения. Вы можете создать необходимый файл и открыть его в текстовом редакторе с привилегиями root с помощью следующей команды:

      • sudo nano /usr/share/phpmyadmin/.htaccess

      В этом файле введите следующую информацию:

      /usr/share/phpmyadmin/.htaccess

      AuthType Basic
      AuthName "Restricted Files"
      AuthUserFile /etc/phpmyadmin/.htpasswd
      Require valid-user
      

      Вот что означает каждая из этих строк:

      • AuthType Basic: эта строка указывает тип аутентификации, используемый вами. Данный тип подразумевает использование аутентификации по паролю с помощью файла пароля.
      • AuthName: данная строка устанавливает сообщение для диалогового окна аутентификации. Вы должны указывать только общую информацию, чтобы неавторизованные пользователи не получили никакой информации о том, что вы защищаете.
      • AuthUserFile: указывает местоположение файла пароля, который будет использоваться для аутентификации. Он должен находиться вне обслуживаемых каталогов. Скоро мы создадим этот файл.
      • Require valid-user: указывает, что только выполнившие аутентификацию пользователи должны иметь доступ к этому ресурсу. Благодаря этому параметру неавторизованные пользователи не смогут выполнить вход.

      После завершения редактирования сохраните и закройте файл.

      Вы использовали следующее местонахождение для вашего файла пароля /etc/phpmyadmin/.htpasswd. Теперь вы можете создать этот файл и передать его для первоначального пользователя с помощью утилиты htpasswd:

      • sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

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

      Если вы хотите ввести дополнительного пользователя, вам нужно сделать это без флага -c, например:

      • sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

      Теперь, когда вы можете получить доступ к подкаталогу phpMyAdmin, вам будет предложено указать дополнительное имя учетной записи и пароль, которые вы только что задали:

      https://domain_name_or_IP/phpmyadmin
      

      phpMyAdmin apache password

      После выполнения аутентификации в Apache вы перейдете на стандартную страницу аутентификации phpMyAdmin для ввода ваших учетных данных MySQL. Добавив дополнительный набор учетных данных, не используемый MySQL, вы обеспечиваете для вашей базы данных дополнительный слой защиты. Это желательно, поскольку в прошлом phpMyAdmin часто становился объектом использующих уязвимости атак.

      Заключение

      Вы успешно настроили phpMyAdmin и теперь можете использовать phpMyAdmin на вашем сервере Ubuntu 20.04. Используя этот интерфейс, вы можете легко создавать базы данных, пользователей, таблицы и т. д., а также выполнять стандартные операции, например удалять и изменять структуры и данные.



      Source link