One place for hosting & domains

      phpMyAdmin

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


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

      Введение

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

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

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

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

      Во-первых, мы полагаем, что ваш сервер имеет пользователя user без root прав с привилегиями sudo, а также брандмауэр с ufw, как указано в руководстве по начальной настройке сервера для Ubuntu 18.04.

      Мы также предполагаем, что вы выполнили установку LAMP (Linux, Apache, MySQL и PHP) на вашем сервере с Ubuntu 18.04. Если вы еще не сделали этого, вы можете воспользоваться данным руководством по установке стека LAMP на Ubuntu 18.04.

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

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

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

      После завершения этих шагов вы будете готовы начать работу с данным руководством.

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

      Во-первых, мы установим phpMyAdmin из репозиториев Ubuntu по умолчанию.

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

      • sudo apt update
      • sudo apt install phpmyadmin php-mbstring php-gettext

      На этом этапе вам потребуется ответить на несколько вопросов для корректной настройки установки.

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

      • Для выбора сервера нажмите apache2
      • Выберите Да при ответе на вопрос о том, необходимо ли использовать dbconfig-common для настройки базы данных.
      • Затем вам будет предложено выбрать и подтвердить пароль приложения MySQL для phpMyAdmin

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

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

      • sudo systemctl restart apache2

      После этого phpMyAdmin будет установлен и настроен. Однако, прежде чем вы сможете войти и начать взаимодействие с базами данных 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_native_password, если вы еще не сделали этого. Для этого откройте командную строку MySQL через терминал:

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

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

      Output

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

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

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

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

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

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

      Output

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

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

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

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

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

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

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

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

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

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

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

      http://your_domain_or_IP/phpmyadmin
      

      phpMyAdmin login screen

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

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

      phpMyAdmin user interface

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

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

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

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

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

      • 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
          . . .
      

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

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

      • sudo systemctl restart apache2

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

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

      • 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. Эта настройка добавляет дополнительный уровень безопасности, который желательно использовать, поскольку phpMyAdmin ранее страдал от уязвимостей.

      Заключение

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



      Source link

      Como Instalar e Proteger o phpMyAdmin no Ubuntu 18.04


      Existe uma versão anterior deste tutorial, escrita por Brennan Bearnes.

      Introdução

      Embora muitos usuários precisam da funcionalidade de um sistema de gerenciamento de banco de dados como o MySQL, talvez não se sintam à vontade para interagir com o sistema unicamente a partir do prompt do MySQL.

      O phpMyAdmin foi criado para que os usuários possam interagir com o MySQL através de uma interface Web. Neste guia, vamos discutir como instalar e proteger o phpMyAdmin para que você possa usá-lo com segurança para gerenciar seus bancos de dados em um sistema Ubuntu 18.04.

      Pré-requisitos

      Antes de começar com este guia, será necessário concluir alguns passos básicos.

      Primeiramente, vamos supor que o seu servidor tenha um usuário não** rai**z com privilégios sudo, além de um firewall configurado com ufw, como descrito noGuia de configuração inicial do servidor para o Ubuntu 18.04.

      Também vamos presumir que você completou a instalação do LAMP (Linux, Apache, MySQL e PHP) no seu servidor Ubuntu 18.04. Se ainda não tiver feito isso, siga este guia de Como instalar uma pilha LAMP no Ubuntu 18.04.

      Finalmente, existem considerações de segurança importantes ao se usar software como o phpMyAdmin, uma vez que ele:

      • Comunica-se diretamente com sua instalação do MySQL.
      • Trata da autenticação usando credenciais para o MySQL.
      • Executa e retorna resultados para consultas SQL arbitrárias.

      Por isso e também por ser um aplicativo PHP amplamente utilizado – sendo alvo frequente de ataque, nunca execute o phpMyAdmin em sistemas remotos em uma conexão HTTP simples. Se não tiver um domínio existente configurado com um certificado SSL/TLS, siga este guia de como proteger o Apache com o Let’s Encrypt no Ubuntu 18.04. Isso irá exigir que você registre um nome de domínio, crie registros DNS para seu servidor e configure um host Virtual Apache.

      Assim que terminar estes passos, você estará pronto para começar com este guia.

      Passo 1 — Instalando o phpMyAdmin

      Para começar, instalaremos o phpMyAdmin a partir dos repositórios padrão do Ubuntu.

      Isso é feito atualizando-se o índice de pacotes do seu servidor e, depois, usando o sistema de empacotament o apt para pegar os arquivos e instalá-los no seu sistema:

      • sudo apt update
      • sudo apt install phpmyadmin php-mbstring php-gettext

      Serão feitas algumas perguntas para configurar sua instalação corretamente.

      Aviso: quando o prompt surgir, o “apache2” estará destacado, mas não estará selecionado. Se você apertar a tecla SPACE para selecionar o Apache, o instalador *não *irá mover os arquivos necessários durante a instalação. Aperte as teclas SPACE, TAB e, então, ENTER para selecionar o Apache.

      • Para a seleção do servidor, escolha apache2
      • Selecione Yes quando indagado quanto a se usará o dbconfig-common para configurar o banco de dados
      • Será solicitado que escolha e confirme a senha do aplicativo MySQL para o phpMyAdmin

      O processo de instalação adiciona o arquivo de configuração do Apache phpMyAdmin no diretório /etc/apache2/conf-enabled/, onde ele é lido automaticamente. A única coisa que você precisa fazer é habilitar explicitamente a extensão do PHP mbstring, o que pode ser feito digitando:

      Depois disso, reinicie o Apache para as suas alterações serem reconhecidas:

      • sudo systemctl restart apache2

      O phpMyAdmin agora está instalado e configurado. Entretanto, antes de fazer login e começar a interagir com seus bancos de dados do MySQL, será necessário garantir que seus usuários do MySQL tenham os privilégios necessários para interagir com o programa.

      Passo 2 — Ajustando a autenticação e os privilégios do usuário

      Quando você instalou o phpMyAdmin no seu servidor, ele criou automaticamente um usuário de banco de dados chamado phpmyadmin que executa certos processos subjacentes para o programa. Em vez de fazer login como esse usuário com a senha administrativa definida durante a instalação, é recomendável que você faça log in como usuário root do MySQL ou como um usuário dedicado para gerenciar os bancos de dados através da interface phpMyAdmin.

      Configurando a senha de acesso para a conta de raiz do MySQL

      Nos sitemas Ubuntu que executam o MySQL 5.7 (e as versões posteriores), por padrão, o usuário root do MySQL é configurado para autenticar usando o plug-in auth_socket e não com uma senha. Isso permite maior segurança e usabilidade em muitos casos, mas também pode complicar as coisas quando for necessário permitir que um programa externo — como o phpMyAdmin — acesse o usuário.

      Para fazer login no pspMyAdmin como seu usuário root do MySQL, será necessário mudar seu método de autenticação a partir do auth_socket para o mysql_native_password, se ainda não tiver feito isso. Para fazer isso, abra o prompt do MySQL do seu terminal:

      Em seguida, verifique quais os métodos de autenticação cada conta de usuário do seu MySQL utilizam com o seguinte comando:

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

      Output

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

      Neste exemplo, é possível ver que o usuário root autenticou usando o plug-in auth_socket. Para configurar a conta root para autenticar com uma senha, execute o comando ALTER USER. Certifique-se de trocar a senha por uma senha forte de sua escolha:`

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

      Então, execute o comando FLUSH o qual diz para o servidor recarregar as tabelas de permissões e colocar as suas alterações em vigor:

      Verifique novamente os métodos de autenticação utilizados pelos seus usuários para confirmar que *o raiz *já não autentica utilizando o plug-in auth_socket:

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

      Output

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

      Através dessa saída é possível ver que o usuário raiz passará a autenticar usando uma senha. Agora, é possível fazer login na interface phpMyAdmin como seu usuário *raiz *com a senha que você definiu para ele aqui.

      Configurando a senha de acesso para um usuário do MySQL dedicado

      Como alternativa, alguns podem achar que é melhor eles se conectarem ao phpMyAdmin com um usuário dedicado. Para fazer isso, abra a shell do MySQL novamente:

      Nota: se tiver a autenticação de senha habilitada, como descrito na seção anterior, será necessário usar um comando diferente para acessar a shell do MySQL. A sintaxe abaixo executará o seu cliente MySQL com privilégios regulares de usuário. Você somente terá privilégios de administrador dentro do banco de dados através desta autenticação:

      A partir daí, crie um novo usuário e dê a ele uma senha forte:

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

      Então, conceda ao seu novo usuário os privilégios apropriados. Por exemplo, é possível conceder os privilégios de usuário para todas as tabelas dentro do banco de dados, além do poder de adicionar, alterar e remover os privilégios de usuário, com este comando:

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

      Despois disso, saia do shell do MySQL:

      Agora, é possível acessar a interface Web, acessando o nome de domínio ou endereço IP público do seu servidor seguido por /phpmyadmin:

      http://your_domain_or_IP/phpmyadmin
      

      phpMyAdmin login screen

      Faça login na interface como usuário root ou com o novo nome de usuário e senha que você acabou de configurar.

      Quando fazer login, verá a interface de usuário que se parecerá com isso:

      phpMyAdmin user interface

      Agora que é capaz de se conectar e interagir com o phpMyAdmin, tudo o que resta a se fazer é fortalecer a segurança dos seus sistemas para protegê-los de ataques.

      Passo 3 — Protegendo sua instância phpMyAdmin

      Devido a sua onipresença, o phpMyAdmin é alvo conhecido de ataque. Você deverá tomar cuidado extra para evitar o acesso não autorizado. Uma das maneiras mais fáceis de fazer isso é colocar um gateway na frente do aplicativo inteiro, utilizando as funcionalidades integradas do Apache para autenticação e dautorização, ou seja, .htaccess.

      Para fazer isso, primeiro você deve habilitar o uso do arquivo .htaccess, editando seu arquivo de configuração do Apache.

      Edite o arquivo vinculado que foi colocado no seu diretório de configuração do Apache:

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

      Adicione uma diretiva de AllowOverride All na seção <Directory /usr/share/phpmyadmin> do arquivo de configuração, desta forma:

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

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

      Quando tiver adicionado essa linha, salve e feche o arquivo.

      Para implementar as alterações feitas, reinicie o Apache:

      • sudo systemctl restart apache2

      Agora que o .htaccess foi habilitado para seu aplicativo, será necessário criar um arquivo que realmente implemente alguma segurança.

      Para que isso seja bem-sucedido, o arquivo deve ser criado dentro do diretório do aplicativo. Crie o arquivo necessário e o abra no seu editor de texto com privilégios raiz, digitando:

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

      Dentro desse arquivo, digite as seguintes informações:

      /usr/share/phpmyadmin/.htaccess

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

      Eis o que cada uma dessas linhas significa:

      • AuthType Basic: esta linha especifica o tipo de autenticação que você está implementando. Esse tipo irá implementar a autenticação por senha, utilizando um arquivo de senha.
      • AuthName: define a mensagem da caixa de diálogo da autenticação. Você deve manter essas definições com texto vago, no intuito de evitar que usuários não autorizados tenham acesso às informações sobre o que estiver sendo protegido.
      • AuthUserFile: define o local do arquivo de senha que será usado para autenticação. Esse arquivo deve permanecer fora dos diretórios que estão sendo atendidos. Criaremos esse arquivo em breve.
      • Require valid-user: especifica que apenas os usuários autenticados devem receber acesso a este recurso. Isto é o que realmente impede os usuários não autorizados de entrarem.

      Quando você terminar, salve e feche o arquivo.

      O local que você selecionou para seu arquivo de senha foi /etc/phpmyadmin/.htpasswd. Agora, é possível criar este arquivo e encaminhá-lo para um usuário inicial com o utilitário htpasswd:

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

      Será solicitado que selecione e confirme uma senha para o usuário que está criando. Depois disso, o arquivo é criado com a senha verificada que você digitou.

      Se quiser inserir um usuário adicional, será necessário fazer isso *sem *o sinalizador -c, desta maneira:

      • sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

      Agora, quando acessar seu subdiretório do phpMyAdmin será solicitado o nome e senha da conta adicional que você acabou de configurar:

      https://domain_name_or_IP/phpmyadmin
      

      phpMyAdmin apache password

      Após digitar a autenticação do Apache, você será levado para a página de autenticação regular do phpMyAdmin para digitar suas credenciais do MySQL. Esta configuração adiciona uma camada adicional de segurança, o que é desejável considerando que o phpMyAdmin sofreu vulnerabilidades no passado.

      Conclusão

      Agora, você deve ter o phpMyAdmin configurado e pronto para usar no seu servidor Ubuntu 18.04. Ao utilizar esta interface, conseguirá criar facilmente bancos de dados, usuários, tabelas etc. e realizar operações usuais como excluir e modificar estruturas e dados.



      Source link

      Cómo instalar y proteger phpMyAdmin en Ubuntu 18.04


      Brennan Bearnes escribió una versión anterior a este tutorial.

      Introducción

      Aunque muchos usuarios necesitan la funcionalidad de un sistema de gestión de bases de datos como MySQL, es posible que no se sientan cómodos interactuando con el sistema únicamente desde la consola de MySQL.

      phpMyAdmin se creó con el propósito de que los usuarios puedan interactuar con MySQL a través de una interfaz web. En esta guía, abordaremos la forma de instalar y proteger phpMyAdmin de modo que pueda utilizarlo de forma segura para gestionar sus bases de datos en un sistema Ubuntu 18.04.

      Requisitos previos

      Antes de comenzar con esta guía, debe completar algunos pasos básicos.

      Primero, supondremos que su servidor tiene un usuario no root con privilegios sudo, así como un firewall configurado con ufw, como se describe en la guía de configuración inicial de servidores para Ubuntu 18.04.

      También supondremos que completó una instalación LAMP (Linux, Apache, MySQL y PHP) en su servidor Ubuntu 18.04. Si aún no lo hizo, puede seguir esta guía para instalar una pila LAMP en Ubuntu 18.04.

      Por último, existen importantes consideraciones de seguridad al utilizar software como phpMyAdmin, ya que:

      • Se comunica directamente con su instalación de MySQL.
      • Maneja la autenticación utilizando credenciales de MySQL.
      • Se ejecuta y muestra resultados para consultas SQL arbitrarias.

      Por estas razones, y porque se trata de una aplicación PHP ampliamente implementada que con frecuencia recibe ataques, nunca debe ejecutar phpMyAdmin en sistemas remotos a través de una conexión HTTP simple. Si no tiene un dominio existente configurado con un certificado SSL/TLS, puede seguir esta guía para proteger Apache con Let’s Encrypt en Ubuntu 18.04. Deberá registrar un nombre de dominio, crear registros DNS para su servidor, y configurar un host virtual en Apache.

      Una vez completados estos pasos, estará listo para comenzar con esta guía.

      Paso 1: Instalación de phpMyAdmin

      Para comenzar, instalaremos phpMyAdmin desde los repositorios predeterminados de Ubuntu.

      Esto se realiza actualizando el índice de paquete de su servidor y, luego, utilizando el sistema de empaquetado apt para descargar los archivos e instalarlos en su sistema:

      • sudo apt update
      • sudo apt install phpmyadmin php-mbstring php-gettext

      Se le harán algunas preguntas para configurar su instalación de forma correcta.

      Advertencia: Cuando aparece el mensaje, “apache2” se resalta, pero no se selecciona. Si no pulsa ESPACIO para seleccionar Apache, el instalador no moverá los archivos necesarios durante la instalación. Pulse ESPACIO, TAB y luego ENTER para seleccionar Apache.

      • Para seleccionar el servidor, elija apache2.
      • Cuando se le pregunte si utiliza dbconfig-common para configurar la base de datos, seleccione Yes.
      • Luego, se le solicitará elegir y confirmar una contraseña para la aplicación de MySQL para phpMyAdmin.

      El proceso de instalación añade el archivo de configuración de phpMyAdmin de Apache al directorio /etc/apache2/conhable/, donde se lee de forma automática. Lo único que debe hacer es habilitar de forma explícita la extensión PHP mbstring. Puede hacerlo escribiendo lo siguiente:

      A continuación, reinicie Apache para que sus cambios surtan efecto:

      • sudo systemctl restart apache2

      De esta manera, phpMyAdmin quedará instalado y configurado. Sin embargo, pra poder iniciar sesión y comenzar a interactuar con sus bases de datos de MySQL, deberá asegurarse de que sus usuarios de MySQL tengan los privilegios necesarios para interactuar con el programa.

      Paso 2: Ajuste de la autenticación y los privilegios de usuario

      Cuando instaló phpMyAdmin en su servidor, automáticamente creó un usuario de base de datos llamado phpmyadmin que realiza ciertos procesos subyacentes para el programa. En vez de registrarse como este usuario con la contraseña administrativa que estableció durante la instalación, se le recomienda iniciar sesión como usuario root de MySQL o como usuario dedicado a administrar las bases de datos a través de la interfaz phpMyAdmin.

      Configuración del acceso con contraseña para la cuenta root de MySQL

      En los sistemas Ubuntu con MySQL 5.7 (y versiones posteriores), el usuario root de MySQL se configura para la autenticación usando el complemento auth_socket de manera predeterminada en lugar de una contraseña. En muchos casos, esto proporciona mayor seguridad y usabilidad, pero también puede causar complicaciones cuando es necesario permitir que un programa externo (como phpMyAdmin) acceda al usuario.

      Si aún no lo ha hecho, deberá cambiar el método de autenticación de auth_socket a mysql_native_password para iniciar sesión en phpMyAdmin como usuario root de MySQL. Para hacer esto, abra la consola de MySQL desde su terminal:

      A continuación, compruebe con el siguiente comando el método de autenticación utilizado por una de sus cuentas de usuario de MySQL:

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

      Output

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

      En este ejemplo, puede ver que, en efecto, el usuario root se autentica utilizando el complemento de auth_socket. Para configurar la cuenta de root de modo que la autenticación se realice con una contraseña, ejecute el siguiente comando ALTER USER. Asegúrese de cambiar password por una contraseña segura que elija:

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

      A continuación, ejecute FLUSH PRIVILEGES para indicar al servidor que vuelva a cargar la tabla de permisos y aplique sus nuevos cambios:

      Compruebe de nuevo los métodos de autenticación empleados por cada uno de sus usuarios para confirmar que *root *deje de realizarla usando el complemento de auth_socket:

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

      Output

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

      Aquí podrá ver que el usuario root se auntenticará usando una contraseña. Ahora podrá iniciar sesión en la interfaz phpMyAdmin como usuario root con la contraseña que estableció aquí.

      Configuración del acceso con contraseña para un usuario dedicado de MySQL

      Por otra parte, para el flujo de trabajo de algunos puede resultar más conveniente la conexión a phpMyAdmin con un usuario dedicado. Para hacer esto, abra una vez más el shell de MySQL:

      Nota: Si tiene habilitada la autenticación por contraseña, como se describe en la sección anterior, deberá utilizar un comando diferente para acceder al intérprete de comandos de MySQL. A través de lo siguiente, se ejecutará su cliente de MySQL con privilegios de usuario regulares y solo obtendrá privilegios de administrador dentro de la base de datos mediante la autenticación:

      A partir de ahí, cree un usuario nuevo y asigne una contraseña segura:

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

      Luego, conceda a su nuevo usuario los privilegios apropiados. Por ejemplo, con el siguiente comando podría conceder privilegios de usuario a todas las tablas dentro de la base de datos, así como la facultad de añadir, cambiar y eliminar privilegios de usuario:

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

      A continuación, cierre el shell de MySQL:

      Ahora puede acceder a la interfaz web visitando el nombre de dominio o la dirección IP pública de su servidor, con /phpmyadmin a gregado:

      http://your_domain_or_IP/phpmyadmin
      

      Pantalla de inicio de sesión dephpMyAdmin

      Inicie sesión en la interfaz como root o con el nombre de usuario y la contraseña que configuró.

      Cuando inicie sesión, verá la interfaz de usuario. Tendrá el siguiente aspecto:

      Interfaz de usuario de phpMyAdmin

      Ahora que puede conectarse e interactuar con phpMyAdmin, solo falta fortalecer la seguridad de sus sistemas para protegerlos de atacantes.

      Paso 3: Protección de la instancia de phpMyAdmin

      Debido a su presencia universal, phpMyAdmin es un objetivo popular para atacantes. Debe tomar medidas adicionales para evitar el acceso no autorizado. Una de las formas más sencillas de realizar esto consiste en disponer una puerta de enlace frente a toda la aplicación utilizando las funcionalidades de autenticación y autorización .htaccess integradas de Apache.

      Para hacerlo, primero debe habilitar el uso de anulaciones de archivos .htaccess editando su archivo de configuración de Apache.

      Edite el archivo vinculado que dispuesto en su directorio de configuración de Apache:

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

      Agregue una directiva AllowOverride All dentro de la <Directory /usr/share/phpmyadmin>:

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

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

      Una vez que agregue esta línea, guarde y cierre el archivo.

      Para implementar los cambios que realizó, reinicie Apache:

      • sudo systemctl restart apache2

      Ahora que habilitó el uso de .htaccess para su aplicación, deberá crear uno para implementar seguridad.

      Para que pueda hacerlo de forma correcta, el archivo debe crearse dentro del directorio de la aplicación. Puede crear el archivo necesario y abrirlo en su editor de texto con privilegios root escribiendo:

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

      Dentro de este archivo, ingrese la siguiente información:

      /usr/share/phpmyadmin/.htaccess

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

      A continuación, se muestra lo que significa cada una de estas líneas:

      • AuthType Basic: esta línea especifica el tipo de autenticación que implementará. Este tipo implementará la autenticación de contraseña utilizando un archivo de contraseña.
      • AuthName: establece el mensaje para el cuadro de diálogo de autenticación. Debe procurar que esto sea genérico para que los usuarios no autorizados no obtengan información sobre lo que se protege.
      • AuthUserFile: establece la ubicación del archivo de contraseña que se utilizará para la autenticación. Esto debe quedar fuera de los directorios implicados. Crearemos este archivo pronto.
      • Require valid-user: especifica que solo los usuarios autenticados deberán tener acceso al recurso. Esto es lo que realmente impide el ingreso de los usuarios no autorizados.

      Cuando termine, guarde y cierre el archivo.

      La ubicación que seleccionó para su archivo de contraseña fue /etc/phpmyadmin/.htpasswd. Ahora puede crear este archivo y pasarle un usuario inicial con la utilidad de htpasswd:

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

      Para el usuario que creará, se le solicitará seleccionar y confirmar una contraseña. Después, el archivo se creará con la contraseña con hash que ingresó.

      Si desea ingresar un usuario adicional, debe hacerlo sin el indicador -c, como se muestra:

      • sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

      Ahora, cuando acceda a su subdirectorio phpMyAdmin, se le solicitará el nombre de cuenta y la contraseña adicionales que acaba de configurar:

      https://domain_name_or_IP/phpmyadmin
      

      Contraseña phpMyAdmin de Apache

      Después de ingresar la autenticación de Apache, accederá a la página de autenticación normal de phpMyAdmin para ingresar sus credenciales de MySQL. Esta configuración provee una capa adicional de seguridad conveniente, ya que phpMyAdmin estuvo expuesto vulnerabilidades en el pasado.

      Conclusión

      De esta manera, phpMyAdmin quedará configurado y listo para usar en su servidor Ubuntu 18.04. Utilizando esta interfaz, puede crear fácilmente bases de datos, usuarios, tablas, etc., y realizar operaciones habituales, como las de eliminar y modificar estructuras y datos.



      Source link