Меню Рубрики

Apache linux kali linux

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

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

Оглавление

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

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

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

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

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

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

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

Apache в Kali Linux

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

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

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

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

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

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

затем в файлы конфигурации должны быть добавлены необходимые директивы. Пример конфигурации приведен в файле /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). Затем вы можете включить новый виртуальный хост с помощью

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

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

Читайте также:  Нужен ли антивирус на linux mint

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

MySQL в Kali Linux

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

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

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

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

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

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

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

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

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

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

Читайте также:  Virtual light router on linux from box

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

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

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

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

Пароль MySQL в Kali Linux

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

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

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

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

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

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

Всё, теперь у вашей 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, например:

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

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

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

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

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

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

SSH в Kali Linux

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Установка linux поверх windows

Поддерживается несколько версий 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 и подключиться к файловому сокету:

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

Теперь мы можем проверить, что мы можем подключиться к базе данных через сокет, прослушивающий localhost (-h localhost) в качестве пользователя king_phisher (-U 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). Старый кластер не отбрасывается в процессе, но он также не запускается автоматически. Вы можете удалить его, как только вы проверили, что обновленный кластер работает нормально.

Источник

Adblock
detector