Настройка и управление службами Kali Linux

5.3 Настройка служб Kali Linux

В этом разделе мы рассмотрим службы (иногда называемые демонами) или программы, которые работают в фоновом режиме и выполняют различные функции для системы. Мы начнем с обсуждения конфигурационных файлов и далее затронем тему касательно того, как работают некоторые важные службы (такие как SSH, Post-greSQL и Apache) и как их можно настроить.

Перейти к содержанию книги Kali Linux Revealed

5.3.1 Настройка конкретной программы

Если вы хотите настроить неизвестный пакет, вы должны действовать поэтапно. Сначала, вам следует прочитать документацию. предоставленную непосредственно эксплуатационником. Debian файл /usr/share/doc/package/README  — довольно таки хорошее место для начала. Этот файл чаще всего будет содержать информацию о пакете, включая ссылки, которые могут перенаправить вас на дополнительную документацию. Вы всегда сэкономите себе много времени и избегнете утомительной работы, прочитав этот файл с самого начала, поскольку он часто довольно детально описывает наиболее распространенные ошибки и решения большинства распространенных проблем.

Далее вам нужно ознакомиться с официальной документацией данного программного обеспечения. Мы отсылаем вас к разделу 6.1, «Источники документации» для получения дополнительных советов о том, каким образом лучше искать различные источники документации. Команда dpkg -L  пакет предоставляет список файлов, включенных в пакет; вы можете быстро определить имеющуюся документацию (а также файлы конфигурации, расположенные в /etc/ ). Также, команда dpkg -s пакет отображает метаданные пакета и показывает любые возможные рекомендуемые или предлагаемые пакеты; там вы можете найти документацию или, возможно, утилиту, которая облегчит настройку программного обеспечения.

Наконец, файлы конфигурации часто самодокументируются многими пояснительными комментариями, подробно описывающими различные возможные значения для каждого параметра конфигурации. В некоторых случаях вы можете запустить программное обеспечение путем раскоментирования одной строки в файле конфигурации. В других случаях примеры файлов конфигурации содержатся в каталоге /usr/share/doc /package/examptes/ . Они могут служить основой для вашего собственного файла конфигурации.

5.3.2 Настройка SSH для удаленного входа

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

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

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

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

Служба SSH прослушивает по умолчанию на порту 22, но вы можете изменить это с помощью директивы Port.

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

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

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

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

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

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

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

Поддержка множества версий PostgreSQL

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

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

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

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

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

Создание пользователей и баз данных в Кали Линукс

Команда createuser добавляет нового пользователя, а dropuser удаляет его. Аналогично, команда createdb добавляет новую базу данных, а dropdb удаляет ее. Каждая из этих команд имеет свои собственные страницы руководства, но мы обсудим некоторые из вариантов здесь. Каждая команда действует на кластере по умолчанию (работает на порту 5432), но вы можете указать —port=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_createctuster, pg_dropctuster, pg_cttctuster, pg_upgradecluster, pg_renamectuster и pg_tsctusters. Мы не будем описывать все эти инструменты здесь, но вы можете обратиться к их соответствующим страницам руководства для получения дополнительной информации.

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

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

5.3.4 Настройка Apache для Кали линукс

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

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

Apache является модульным сервером, и многие функции реализуются внешними модулями, которые загружаются основной программой во время его инициализации. Конфигурация по умолчанию включает только самые распространенные модули, но включение новых модулей легко выполняется с помощью запуска a2enmod модуля. Также вы можете использовать a2dismod модуль для отключения модуля. Эти программы на самом деле только создают (или удаляют) символьные ссылки в /etc/apache2/mods-enabted/ , указывая на фактические файлы (хранящиеся в /etc/apache2/mods-avaitabte/ ).

Существует много модулей, но два из них заслуживают первоначального рассмотрения: 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 for more information.

Полный список стандартных 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 может обслуживать несколько веб-сайтов (например, www.kali.org и www.offensive-security.com), поскольку HTTP-запросы включают в себя как имя запрашиваемого веб-сайта, так и локальную часть URL (эта функция называется name-based virtual hosts).

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

Важно знать

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

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

минимальная конфигурация виртуального хоста

минимальная конфигурация виртуального хоста

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

Общие директивы

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

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

Общие директивы

Директива 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 требует аутентификацию
Пример 5.3 Файл .htaccess требует аутентификацию

Базовая аутентификация не предоставляет достаточную безопасность

Система аутентификации, используемая в приведенном выше примере (Basic), имеет минимальную степень безопасности

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

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

Базовая аутентификация не предоставляет достаточную безопасность

Ограничение доступа Директива: Require directive управляет ограничениями доступа для директории (и её суб-директорий, рекурсивно).

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

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

blank

5.4 Управление службами в Кали Линукс

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

systemd можно запрашивать и контролировать с помощью systemctl. Без каких-либо аргументов он запускает команду systemctl list-units, которая выводит список активных структурных элементов. Если вы запустите systemctl status, на выходе будет показан иерархический обзор работающих служб. Сравнивая оба выхода, вы сразу видите, что существует несколько видов структурных элементов, и что службы являются лишь одним из них.

Каждая служба представлена служебным структурным элементом, который описывается служебным файлом, обычно отправленным в / lib / systemd / system / (или / run / systemd / system /, или / etc / systemd / system / ; они перечислены путем увеличения порядок важности, где последний является самым важным). Каждый из них может быть изменен другим файлом имя-службы .service.d/*.conf в том же наборе директорий. Эти файлы являются простыми текстовыми файлами, чей формат вдохновлен хорошо известными файлами «*.ini» в Microsoft Windows, с парами key = value сгруппированными между [section] заголовками. Здесь мы видим пример служебного файла для /lib/ systemd/system/ssh.service :

Управление службами в Кали Линукс

Целевые структурные элементы являются частью дизайна systemd. Они представляют желаемое состояние, которое вы хотите достичь исходя из активированных элементов (что означает работающую службу в отношении служебного элемента). Они существуют главным образом как способ группировки зависимостей от других элементов. Когда система запускается, она позволяет элементам, требуемым для достижения default.target (которая является символьной ссылкой на graphic.target и, в свою очередь, зависит от multi-user.target). Таким образом, все зависимости этих целей активируются во время загрузки.

Подобные зависимости выражаются с помощью директивы Wants на целевом элементе. Но вам не нужно редактировать целевой элемент для добавления новых зависимостей, вы также можете создать символьную ссылку, указывающую зависимый элемент в директории /etc/systemd/system/target-name .target.wants/ . И это как раз является именно тем, что делает systemctl enable foo.service. Когда вы включаете службу, вы говорите systemd добавить зависимость от целей, указанных в записи WantedBy раздела [Install] файла служебного элемента. И наоборот, systemctl disable foo.service сбрасывает ту же символьную ссылку и, следовательно, зависимость.

Команды включения и выключения ничего не меняют в отношении текущего состояния служб. Они влияют только на то, что произойдет при следующей загрузке. Если вы хотите немедленно запустить службу, вы должны выполнить команду systemctl start foo.service. И наоборот, вы можете остановить её с помощью команды systemctl stop foo.service. Вы также можете проверить текущий статус службы, используя команду systemctl status foo.service, которая очень кстати включает в себя последние строки сопутствующего журнала. После изменения конфигурации службы вы можете перезагрузить или перезапустить её: эти операции выполняются с помощью with systemctl reload foo.service и systemctl restart foo. service  соответственно.

Управление службами в Кали Линукс

5.5 Подведем итоги

В этой главе мы узнали, как настроить Kali Linux. Мы настроили параметры сети, поговорили о пользователях и группах и обсудили, как создавать и изменять учетные записи пользователей, устанавливать пароли, отключать учетные записи и управлять группами. Наконец, мы затронули тему о службах и объяснили, как настраивать и поддерживать общие службы, в частности SSH, PostgreSQL и Apache.

Основные моменты:

  • При обычной установке через интерфейс рабочего стола у ​​вас уже установлен NetworkManager, и его можно контролировать и настраивать через центр управления GNOME, а также с помощью меню, находящегося в правом верхнем углу;
  • Вы можете настроить сеть с помощью командной строки с помощью инструментов ifup и ifdown, которые черпают свои инструкции из /etc/network/interfaces  файла конфигурации. Даже более новый инструмент systemd-networkd работает с инициирующей системой
    systemd;
  • По умолчанию база данных пользователей и групп Unix состоит из текстовых файлов /etc/passwd  (список пользователей), /etc/shadow  (зашифрованные пароли пользователей), /etc/group  (список групп), and /etc/gshadow  (зашифрованные пароли групп);
  • Вы можете использовать команду getent, чтобы ознакомиться с пользовательской базой данных и другими системными базами данных;
  • Команда adduser задает несколько вопросов перед созданием учетной записи, но является прямым способом создания новой учетной записи пользователя;
  • Несколько команд могут быть использованы для изменения некоторых областей в пользовательской базе данных: passwd (изменить пароль), chfn (изменить полное имя и поле GECOS, или общее информационное поле), chsh (изменить оболочку входа), chage (изменить «возраст» пароля), и passwd -e пользователь (заставляет пользователя менять свой пароль при следующем входе в систему);
  • Каждый пользователь может быть членом одной или нескольких групп. Для изменения идентификатора группы можно использовать несколько команд: newgrp изменяет текущий идентификатор группы, sg выполняет команду, используя предоставленную альтернативную группу, setgid bit может быть помещен в директорию, заставляя файлы, созданные в этом каталоге, автоматически принадлежать к нужной группе. Кроме того, команда id отображает текущее состояние пользователя, включая список членов своей группы;
  • Вы можете вручную запустить SSH с помощью systemctl start ssh или включить его на постоянной основе с помощью systemctl enable ssh. Конфигурация по умолчанию отключает пароли для аутентификации пользователя root, что означает, что вы должны сначала настроить SSH-ключи с помощью ssh-keygen;
  • PostgreSQL — это сервер базы данных. Он редко бывает полезен сам по себе, но используется многими другими службами для хранения данных;
  • Обычная установка Kali Linux включает в себя веб-сервер Apache, предоставляемый пакетом apache2. Будучи сетевой службой, он по умолчанию отключен. Вы можете вручную запустить его с помощью systemctl start apache2;
  • Исходя из настроек по умолчанию, Apache прослушивает порт 80 (как настроено в /etc/apache2/ports.conf ) и по умолчанию использует страницы из директории /var/www/html/  (как указано в /etc/apache2/sites-enabled/000-default.conf ).

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

Перевод: Анна Давыдова
Источник: kali.training

Перейти к содержанию книги Kali Linux Revealed

Это интересно:

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *