Главная
Главная Руководства Debian › Устанавливаем PHPMyAdmin на Debian 10



Автор:

Статья опубликована: 2020-04-10 11:32:37
Последние правки: 2020-04-11 01:17:37

В репозиториях Debian 10 нет PHPMyAdmin, поэтому будем устанавливать с сайта разработчиков.

  • PHP, Apache

    Предварительно необходимо установить php-cli (например, php7.3-cli), php-fpm. Также, ставим некоторые php-модули, apache2 и модуль libapache2-mod-php7.3
    sudo apt-get install php7.3-cli
    sudo apt-get install php7.3-fpm
    sudo apt-get install php7.3-mbstring
    sudo apt-get install php7.3-zip
    sudo apt-get install php7.3-gd
    sudo apt-get install php7.3-mysqli
    sudo apt-get install apache2
    sudo apt-get install libapache2-mod-php7.3
    sudo a2enconf php7.3-fpm.conf
    


  • Установка

    Идем сюда и ищем самую последнюю версию phpmyadmin. На момент написания статьи это файл phpMyAdmin-5.0.2-all-languages.zip. Скачиваем, распаковываем:
    # wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip
    # unzip phpMyAdmin-5.0.2-all-languages.zip
    
    Создаем директорию /usr/share/phpmyadmin и копируем туда содержимое директории phpMyAdmin-5.0.2-all-languages.


  • Настраиваем

    PHPMyAdmin

    Создаем директорию для временных файлов:
    # mkdir -p /var/lib/phpmyadmin/tmp
    # chown -R www-data:www-data /var/lib/phpmyadmin
    
    Файл конфигурации:
    # cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
    
    Редактируем файл /usr/share/phpmyadmin/config.inc.php
    - ищем строку $cfg['blowfish_secret'] и вписываем пароль из ровно 32-х символов. Меньше 32-х - слабее защита, больше 32-х - на уровень защиты не влияет.
    - раскомментируем строки:
    $cfg['Servers'][$i]['controluser'] = 'pma';                                                                                                                                                                                                                                    
    $cfg['Servers'][$i]['controlpass'] = 'pmapass';
    
    вместо pmapass задаем пароль.
    - ищем блок с настройками, начинающийся с комментария:
    /* Storage database and tables */ 
    
    и раскомментируем всё до следующего комментария:
    $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';                                                                                                                                                                                                                                   
    $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';                                                                                                                                                                                                                        
    $cfg['Servers'][$i]['relation'] = 'pma__relation';                                                                                                                                                                                                                             
    $cfg['Servers'][$i]['table_info'] = 'pma__table_info';                                                                                                                                                                                                                         
    $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
    $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
    $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
    $cfg['Servers'][$i]['history'] = 'pma__history';
    $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
    $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
    $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
    $cfg['Servers'][$i]['recent'] = 'pma__recent';
    $cfg['Servers'][$i]['favorite'] = 'pma__favorite';
    $cfg['Servers'][$i]['users'] = 'pma__users';
    $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
    $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
    $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
    $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
    $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
    $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
    
    - в конец файла дописываем:
    $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
    

    MySQL

    - создаем пользователя pma с паролем, который задали в config.inc.php:
    GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass';
    

    Apache

    - создаем файл /etc/apache2/conf-available/phpmyadmin.conf с следующим содержимым:
    # phpMyAdmin Apache configuration
    
    Alias /phpmyadmin /usr/share/phpmyadmin
    
    <Directory /usr/share/phpmyadmin>
        Options SymLinksIfOwnerMatch
        DirectoryIndex index.php
    </Directory>
    
    # Disallow web access to directories that don't need it
    <Directory /usr/share/phpmyadmin/templates>
        Require all denied
    </Directory>
    <Directory /usr/share/phpmyadmin/libraries>
        Require all denied
    </Directory>
    <Directory /usr/share/phpmyadmin/setup/lib>
        Require all denied
    </Directory>
    
    - разрешаем его использование:
    $ sudo a2enconf phpmyadmin.conf
    $ sudo systemctl restart apache2
    

    Проверяем

    http://IP-ADDRESS/phpmyadmin


  • Что дальше?

    Посмотрев через некоторое время логи web-сервера, вы удивитесь, сколько добрых людей хотят поработать с вашим phpmyadmin, а так как пароль им никто не давал, они натравливают на админку брутфорсеров или пытаются использовать известные уязвимости. Специально для таких добрых людей неплохо сделать дополнительную httpAuth аутентификацию. Единственный её минус - придется ввести не один пароль, а два, сначала для web-сервера, потом для phpmyadmin. Но оно того стоит.

    Уже мало кто использует apache в качестве основного web-сервера, обычно все сидят на nginx, но phpmyadmin работает только через apache (или я чего то не знаю). При таком варианте, apache задают использовать порты 80 и 433 только на localhost, а nginx настраивают на работу на внешних ip. Для location /phpmyadmin на nginx настраивают аутентификацию и проксирование запросов на apache.
    location /phpmyadmin {
      auth_basic "Skazhi parol";
      auth_basic_user_file /etc/nginx/phpmyadmin.htpasswd;
      proxy_pass http://127.0.0.1:80;
      include proxy_params;
    }