Настройка и запуск Apache, MySQL, SSH и PostgreSQL в Kali Linux

Оглавление

1. Сетевые службы в Kali Linux

2. Apache в Kali Linux

2.1 Настройка виртуальных хостов

2.2 Часто используемые директивы

2.3 Требование аутентификации

2.4 Ограничение доступа

3. MySQL в Kali Linux

3.1 Решение проблемы с ошибкой #1698 - Access denied for user ‘root’@’localhost’ в Kali Linux

3.2 Пароль MySQL в Kali Linux

3.3 Как сбросить пароль MySQL в Kali Linux

3.4 Ошибка «ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")» в Kali Linux

3.5 Ошибка «ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)»

3.6 Ошибка «ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)»

4. SSH в Kali Linux

4.1 Создание новых ключей хоста SSH

4.2 Настройка входа в Kali Linux через SSH без пароля

5. Настройка баз данных PostgreSQL

5.1 Тип подключения и аутентификация клиента

5.2 Создание пользователей и баз данных

5.3 Управление кластерами PostgreSQL


Службы (иногда их называют демоны) – это программы, которые работают в фоне и выполняют различные функции для системы.

В этом разделе рассмотрим такие важные службы как

  • Apache – веб-сервер, позволяющий запускать веб-сайты и веб-приложения
  • MySQL – популярная система управления базами данных, её используют многие веб-приложения
  • SSH – сетевой протокол, который стал отраслевым стандартом для удалённого подключения к машинам; позволяет выполнять команды и передавать файлы.
  • PostgreSQL – свободная объектно-реляционная система управления базами данных

Сетевые службы в Kali Linux

Особенностью Kali Linux является то, что многие популярные пакеты сетевых служб установлены в систему, но не запускаются автоматически. Для их использования нужно самостоятельно сделать запуск или добавить их в автозапуск вместе с включением компьютера.

Это сделано в целях безопасности – к службам вашей системы невозможно подключиться, если вы не предприняли явных действий для их включения. В целом это позволяет минимизировать воздействие во время теста на проникновение, когда вредно объявлять о вашем присутствии и имеется риск обнаружения из-за неожиданных сетевых взаимодействий.

Очевидно, что по умолчанию отключены SSH и Apache, которые в основе своей деятельности подразумевают сетевую активность. Может показаться неочевидным, почему по умолчанию отключена служба MySQL, которая является системой управления базами данных? MySQL также позволяет удалённое подключение, по этой причине MySQL и некоторые другие службы, которые не являются сетевыми по своему основному назначению, отключены.

Apache в Kali Linux

Типичная установка Kali Linux включает веб-сервер Apache, предоставляемый пакетом apache2. Будучи сетевым сервисом, он по умолчанию отключен. Вы можете запустить его вручную с помощью

systemctl start apache2

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

Apache – это модульный сервер, и многие функции реализуются внешними модулями, которые загружаются основной программой во время его инициализации. Конфигурация по умолчанию включает только самые распространенные модули, но включение новых модулей легко выполняется с помощью скрипта a2enmod, после которого нужно указать имя желаемого модуля:

a2enmod модуль

Используйте

a2dismod модуль

для отключения модулей. Эти программы фактически создают (или удаляют) символические ссылки в /etc/apache2/mods-enabled/, указывающие на фактические файлы (хранящиеся в /etc/apache2/mods-available/).

Существует много модулей, но два из них заслуживают первостепенного внимания: PHP и SSL. Веб-приложения, написанные на PHP, выполняются веб-сервером Apache с помощью выделенного модуля, предоставляемого пакетом libapache-mod-php, и его установка автоматически включает этот модуль.

Apache 2.4 «из коробки» имеет модуль SSL, необходимый для безопасного HTTP (HTTPS). Сначала его нужно включить с помощью

a2enmod ssl

затем в файлы конфигурации должны быть добавлены необходимые директивы. Пример конфигурации приведен в файле /etc/apache2/sites-available/default-ssl.conf. Дополнительную информацию см. в http://httpd.apache.org/docs/2.4/mod/mod_ssl.html.

Полный список стандартных модулей Apache можно найти в Интернете по адресу http://httpd.apache.org/docs/2.4/mod/index.html.

Со стандартной конфигурацией веб-сервер прослушивает порт 80 (как настроено в /etc/apache2/ports.conf) и по умолчанию использует страницы из каталога /var/www/html/ (как указано в /etc/apache2/sites-enabled/000-default.conf).

Дополнительную информацию про структуру файлов веб-сервера вы найдёте в статье «Азы работы с веб-сервером для пентестера».

Настройка виртуальных хостов

Виртуальный хост является дополнительной идентификацией для веб-сервера. Apache может обслуживать несколько веб-сайтов (например, hackware.ru и kali.tools), поскольку HTTP-запросы включают в себя как имя запрашиваемого веб-сайта, так и локальную часть URL (эта функция называется виртуальные хосты на основе имени).

Конфигурация по умолчанию для Apache 2 включает виртуальные хосты на основе имени. Кроме того, виртуальный хост по умолчанию определяется в файле /etc/apache2/sites-enabled/000-default.conf; этот виртуальный хост будет использоваться, если не найден хост, соответствующий запросу, отправленному клиентом.

Важное замечание: Запросы о неизвестных виртуальных хостах всегда будут обслуживаться первым определенным виртуальным хостом, поэтому пакет поставляется с файлом конфигурации 000-default.conf, который в сортировке идёт впереди всех других файлов, которые вы могли бы создать.

Затем каждый дополнительный виртуальный хост описывается файлом, хранящимся в /etc/apache2/sites-available/. Обычно файл называется именем хоста сайта, за которым следует суффикс .conf (например: www.example.com.conf). Затем вы можете включить новый виртуальный хост с помощью

a2ensite www.example.com

Ниже приведена минимальная конфигурация виртуального хоста для веб-сайта, файлы которого хранятся в /srv/www.example.com/www/ (определенном с помощью директивы DocumentRoot):

ServerName www.example.com
ServerAlias example.com
DocumentRoot /srv/www.example.com/www

Вы также можете рассмотреть возможность добавления директив CustomLog и ErrorLog для настройки Apache, которые укажут на файлы для сохранения журналов веб-сервера.

Подробную пошаговую инструкцию о настройки виртуальных хостов вы найдёте в статье «Как настроить виртуальные хосты веб-сервера Apache». Хотя в заголовке указано, что она для Ubuntu, эта инструкция в полной мере применима и к Kali Linux.

Часто используемые директивы

Кратко рассматриваются некоторые из обычно используемых конфигурационных настроек Apache.

Основной файл конфигурации обычно включает несколько блоков Directory; они позволяют указывать разные типы поведения для сервера в зависимости от местоположения обслуживаемого файла. Такой блок обычно включает в себя директивы Options и AllowOverride:

Options Includes FollowSymLinks
AllowOverride All
DirectoryIndex index.php index.html index.htm

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

За директивой Options следует список опций, которые нужно включить: значение None отключает все опции; соответственно, All включает их все кроме MultiViews. Имеются следующие доступные опции:

  • ExecCGI – указывает, что могут быть выполнены скрипты CGI.
  • FollowSymLinks – сообщает серверу, что можно переходить по символическим ссылкам, и что ответ должен содержать то, на что указывает эта ссылка.
  • SymLinksIfOwnerMatch – также сообщает серверу следовать символическим ссылкам, но только тогда, когда ссылка и ее цель имеют одного и того же владельца.
  • Includes – включает Server Side Includes (SSI). Это директивы, встроенные в HTML-страницы и выполняемые «на лету» для каждого запроса.
  • Indexes – сообщает серверу об отображении содержимого каталога если HTTP-запрос, отправленный клиентом, указывает на каталог без индексного файла (то есть, когда в этом каталоге не существует файлов, упомянутых директивой DirectoryIndex).
  • MultiViews – включает согласование контента; это может быть использовано сервером для возврата веб-страницы, соответствующей предпочитаемому языку, указанному в браузере.

Дополнительно смотрите «Файлы настроек веб-сервера Apache».

Требование аутентификации

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

Файл .htaccess содержит директивы конфигурации Apache, которые применяются каждый раз, когда запрос относится к элементу из каталога, в котором хранится этот файл .htaccess. Эти директивы являются рекурсивными, т.е. действуют на все подкаталоги.

Большинство директив, которые могут выполняться в блоке Directory, также применимы в файле .htaccess. В директиве AllowOverride перечислены все параметры, которые можно включить или отключить с помощью .htaccess. Обычным использованием этой опции является ограничение ExecCGI, так что администратор выбирает, какие пользователи могут запускать программы под идентификатором веб-сервера (пользователь www-data).

Пример файла .htaccess, требующего аутентификации

Require valid-user
AuthName "Private directory"
AuthType Basic
AuthUserFile /etc/apache2/authfiles/htpasswd-private

Базовая аутентификация не обеспечивает безопасность: Система аутентификации, используемая в приведенном выше примере (Basic), имеет минимальную безопасность, поскольку пароль отправляется в открытом тексте (он кодируется только как base64, что является простой кодировкой, а не методом шифрования). Следует также отметить, что документы, защищенные этим механизмом, проходят через сеть в открытом виде. Если важна безопасность, весь HTTP-сеанс должен быть зашифрован с помощью Transport Layer Security (TLS).

Файл /etc/apache2/authfiles/htpasswd-private содержит список пользователей и паролей; его обычно обрабатывают с помощью команды htpasswd. Например, для добавления пользователя или изменения пароля используется следующая команда:

htpasswd /etc/apache2/authfiles/htpasswd-private user
New password:
Re-type new password:
Updating password for user user

Если файл ещё не создан, то его можно создать командой:

mkdir /etc/apache2/authfiles/
htpasswd -c /etc/apache2/authfiles/htpasswd-private user
New password:
Re-type new password:
Adding password for user user

Ограничение доступа

Директива Require управляет ограничениями доступа для каталога (и, рекурсивно, его подкаталогов).

Её можно использовать для ограничения доступа по многим критериям; мы остановимся на описании ограничения доступа на основе IP-адреса клиента, но его можно сделать гораздо более мощным, особенно если несколько Requiredirectives объединены в блоке RequireAll.

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

Require ip 192.168.0.0/16

MySQL в Kali Linux

Многие веб-приложения используют базы данных MySQL для хранения информации. Поэтому вместе с Apache, обычно, используют и MySQL.

Пакет MySQL уже установлен в Kali Linux, для его запуска выполните:

sudo systemctl start mysql

Чтобы включить автозапуск MySQL выполните:

sudo systemctl enable mysql

Чтобы отключить автозапуск MySQL выполните:

sudo systemctl disable mysql

Решение проблемы с ошибкой #1698 - Access denied for user ‘root’@’localhost’ в Kali Linux

MySQL 5.7 изменила модель безопасности: теперь вход в MySQL под рутом (root) требует sudo (при этом пароль всё равно может быть пустым). При этих настройках многие веб-приложения не смогут работать.

Для получения доступа к базе данных MySQL/MariaDB обычному пользователю без использования sudo привилегий, зайдите в приглашение командной строки MySQL

sudo mysql

и запустите следующие команды:

use mysql;
update user set plugin='' where User='root';
flush privileges;
exit

Затем перезапустите службу MySQL:

sudo systemctl restart mysql

Более безопасным вариантом является создание новых пользователей для работы с MySQL. Рассмотрим на примере создания пользователя для phpMyAdmin:

1. Подключитесь к mysql

sudo mysql --user=root mysql

2. Создайте пользователя для phpMyAdmin

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

CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Если ваш phpMyAdmin подключается к localhost, то этого должно быть достаточно.

Пароль MySQL в Kali Linux

Для только что установленной MySQL пароль пользователя root является пустым. Чтобы его изменить запустите и следуйте инструкциям:

sudo mysql_secure_installation

Как сбросить пароль MySQL в Kali Linux

Если вы вдруг забыли пароль от MySQL в Kali Linux, то вы можете сбросить пароль рута, откройте два терминала, в первом наберите:

sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables

В другом терминале

mysql -u root mysql
update user set password=PASSWORD("НОВЫЙ ПАРОЛЬ") where User='root';
flush privileges;
quit

Обратите внимание, что строку НОВЫЙ ПАРОЛЬ нужно заменить на тот пароль, который вы хотите установить для рута MySQL.

В первом терминале CTRL+C

В любом терминале:

sudo systemctl start mysql

Всё, теперь у вашей MySQL новый пароль.

Ошибка «ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")» в Kali Linux

Если при попытке использовать MySQL, например:

sudo mysql

вы видите ошибку

«ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")»

это означает, что служба MySQL не запущена. Для запуска выполните:

sudo systemctl start mysql

Ошибка «ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)»

Эта ошибка вызвана тем, что вы пытаетесь подключиться к СУБД без пароля, например, так:

sudo mysql

Для подключения с паролем используйте опцию -p, после которой нужно указать пароль:

sudo mysql -p ПАРОЛЬ

Ошибка «ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)»

Эта ошибка вызвана тем, что вы ввели неверный пароль.

SSH в Kali Linux

SSH позволяет удаленно входить в систему, передавать файлы или выполнять команды. Это инструмент (ssh) и сервис (sshd) стали отраслевым стандартом для удаленного подключения к машинам.

Хотя пакет openssh-server установлен по умолчанию, служба SSH отключена по умолчанию и, таким образом, не запускается во время загрузки. Вы можете вручную запустить службу SSH с помощью:

systemctl start ssh

или настроить её для запуска во время загрузки с помощью:

systemctl enable ssh

Служба SSH имеет относительно нормальную конфигурацию по умолчанию, но, учитывая ее мощные возможности и чувствительный характер, хорошо знать, что вы можете сделать с ее конфигурационным файлом /etc/ssh/sshd_config. Все параметры задокументированы в sshd_config (5).

Конфигурация по умолчанию отключает вход на основе пароля для пользователя root, а это означает, что вы должны сначала настроить SSH-ключи с помощью ssh-keygen. Вы можете распространить это на всех пользователей, установив PasswordAuthentication на no, или вы можете снять это ограничение, изменив PermitRootLogin на yes (вместо стандартного prohibit-password). Служба SSH прослушивает по умолчанию на порту 22, но вы можете изменить это с помощью директивы Port.

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

systemctl reload ssh

Создание новых ключей хоста SSH

Каждый SSH-сервер имеет свои собственные криптографические ключи; они называются «SSH host keys» и хранятся в /etc/ssh/ssh_host_*. Они должны быть конфиденциальными, нельзя использовать одинаковые ключи на нескольких машинах.

Когда вы устанавливаете свою систему путем копирования полного образа диска (вместо использования debian-installer), образ может содержать предварительно сгенерированные ключи хоста SSH, которые вы должны заменить новыми ключами. Возможно, образ также содержит пароль root по умолчанию, который вы захотите сбросить одновременной с генерацией ключей. Вы можете сделать всё это с помощью следующих команд:

passwd [...]
rm /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server
service ssh restart

Настройка входа в Kali Linux через SSH без пароля

Если вы регулярно работаете с системой по SSH, то, скорее всего, вам захочется настроить статичный IP адрес, для этого обратитесь к инструкции «Как настроить Kali Linux на использование статичного IP адреса».

На локальной машине (с которой заходим):

ssh-keygen -t rsa

Без предварительного подключения, выполняем команду на удалённой машине - IP (192.168.1.35) и имя пользователя (mial) поменяйте на свои:

ssh mial@192.168.1.35 mkdir .ssh

Теперь нам нужно скопировать содержимое файла id_rsa.pub на удалённую машину. Сделать это очень просто (не забываем менять данные – имя пользователя и IP на свои):

cat .ssh/id_rsa.pub | ssh mial@192.168.1.35 'cat >> .ssh/authorized_keys'

С этого момента больше не нужно набирать пароль входа:

ssh mial@192.168.1.35

Настройка баз данных PostgreSQL

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

systemctl start postgresql

Поддерживается несколько версий PostgreSQL: Пакет PostgreSQL позволяет совместно устанавливать несколько версий сервера базы данных. Также возможно обрабатывать несколько кластеров (кластер представляет собой набор баз данных, обслуживаемых одним и тем же postmaster). Для этого файлы конфигурации хранятся в файле /etc/postgresql/version/cluster-name/.

Для того, чтобы кластеры работали бок о бок, каждому новому клану присваивается следующий доступный номер порта (обычно 5433 для второго кластера). Файл postgresql.service представляет собой пустую оболочку, что упрощает работу со всеми кластерами, поскольку каждый кластер имеет свой собственный блок (postgresql@version-cluster.service).

Тип подключения и аутентификация клиента

По умолчанию PostgreSQL прослушивает входящие соединения двумя способами: на TCP-порту 5432 интерфейса localhost и на файловом сокете /var/run/postgresql/.s.PGSQL.5432. Это можно настроить в postgresql.conf с различными директивами: listen_addresses для адресов для прослушивания, port для TCP-порта и unix_socket_directories, чтобы определить каталог, в котором созданы сокеты на основе файлов.

В зависимости от того, как они подключаются, клиенты аутентифицируются по-разному. Файл конфигурации pg_hba.conf определяет, кому разрешено подключаться к каждому сокету и как они аутентифицируются. По умолчанию соединения в файловом сокете используют учетную запись пользователя Unix в качестве имени пользователя PosgreSQL и предполагают, что дальнейшая проверка подлинности не требуется. В TCP-соединении PostgreSQL требует, чтобы пользователь аутентифицировался с именем пользователя и паролем (хотя это не имя пользователя/пароль Unix, а самого PostgreSQL).

Пользователь postgres является специальным и имеет полные административные привилегии по всем базам данных. Мы будем использовать этот идентификатор для создания новых пользователей и новых баз данных.

Создание пользователей и баз данных

Команда createuser добавляет нового пользователя, а dropuser удаляет его. Аналогично, команда createdb добавляет новую базу данных, а dropdb удаляет ее. Каждая из этих команд имеет свои собственные страницы руководства. Каждая команда действует на кластер по умолчанию (работает на порту 5432), но вы можете передать порт --port= для изменения пользователей и баз данных альтернативного кластера.

Эти команды должны подключаться к серверу PostgreSQL для выполнения своей работы, и они должны быть аутентифицированы как пользователь с достаточными полномочиями для выполнения указанной операции. Самый простой способ добиться этого – использовать учетную запись postgres Unix и подключиться к файловому сокету:

su - postgres
createuser -P king_phisher
Введите пароль для новой роли:
Повторите его:
createdb -T template0 -E UTF-8 -O king_phisher king_phisher
exit

В приведенном выше примере опция -P просит createuser запросить пароль после создания нового пользователя king_phisher. Посмотрим на команду createdb, -O определяет пользователя, владеющего новой базой данных (который, таким образом, имеет полные права на создание таблиц, предоставление разрешений и т. д.). Мы также хотим иметь возможность использовать строки Unicode, поэтому мы добавляем параметр -E UTF-8 для установки кодировки, что, в свою очередь, требует от нас использовать опцию -T для выбора другого шаблона базы данных.

Теперь мы можем проверить, что мы можем подключиться к базе данных через сокет, прослушивающий localhost (-h localhost) в качестве пользователя king_phisher (-U king_phisher):

psql -h localhost -U king_phisher king_phisher
Пароль пользователя king_phisher:
psql (9.6.5)
SSL-соединение (протокол: TLSv1.2, шифр: ECDHE-RSA-AES256-GCM-SHA384, бит: 256, сжатие: выкл.)
Введите "help", чтобы получить справку.

king_phisher=>

Как вы можете видеть, соединение было успешным.

Управление кластерами PostgreSQL

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

Тем не менее, Debian’овский пакет postgresql-common предоставляет несколько инструментов для управления такими кластерами: pg_createcluster, pg_dropcluster, pg_ctlcluster, pg_upgradecluster, pg_renamecluster и pg_lsclusters. Мы не будем описывать все эти инструменты здесь, но вы можете обратиться к их соответствующим страницам руководства для получения дополнительной информации.

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

Вы можете получить список всех кластеров и их статус с помощью pg_lsclusters. Что еще более важно, вы можете автоматизировать перенос своего кластера на последнюю версию PostgreSQL с помощью pg_upgradecluster old-version cluster-name. Для этого вам может потребоваться сначала удалить кластер (пустой), созданный для новой версии (с помощью pg_dropcluster new-version cluster-name). Старый кластер не отбрасывается в процессе, но он также не запускается автоматически. Вы можете удалить его, как только вы проверили, что обновленный кластер работает нормально.

Рекомендуемые статьи:

Добавить комментарий

Ваш e-mail не будет опубликован.