Лабораторная работа. Серверы Linux
Введение
В этой лабораторной работе вы будете использовать командную строку Linux для определения серверов, работающих на данном компьютере.
Рекомендуемое оборудование
Виртуальная машина рабочей станции CyberOps
Серверы
Серверы, в сущности, являются программами, написанными для выдачи определенной информации по запросам. Клиенты, которые также являются программами, обращаются к серверу, размещают запрос и ожидают ответа сервера. Существует множество технологий клиент-серверного взаимодействия, наиболее распространенные из них ― IP-сети. Эта лабораторная работа посвящена клиентам и серверам на основе сетей IP.
Доступ к командной строке
Выполните вход на ВМ CyberOps Workstation от имени пользователя analyst с паролем cyberops. В этой лабораторной работе в качестве примера учетной записи используется учетная запись analyst.
Для получения доступа к командной строке щелкните значок терминала на док-панели в нижней части экрана виртуальной машины. Откроется эмулятор терминала.
Отобразите запущенные в настоящее время службы.
На компьютере может выполняться множество различных программ, особенно в операционной системе Linux. Многие программы работают в фоновом режиме, поэтому пользователь может не сразу определить все программы, которые работают на данном компьютере. В Linux запущенные программы также называются процессами.
Примечание. Выходные данные команды ps будут зависеть от состояния ВМ CyberOps Workstation.
Команда ps отображает все программы, работающие в фоновом режиме.
<некоторые выходные данные пропущены>
Почему было необходимо запускать команду ps от имени пользователя root (предваряя ее командой sudo)?
Этот параметр заставляет показать все процессы, которые принадлежат всем пользователям независимо от терминала, а также процессы от имени администратора
В Linux программы также могут вызывать другие программы. Команда ps также может использоваться для отображения такой иерархии процессов. Параметр –ejH отображает дерево запущенных процессов.
Примечание. Сведения о процессе для службы nginx выделяются цветом. У вас значения PID будут другими.
Примечание. Если служба nginx не запущена, введите команду sudo /usr/sbin/nginx в приглашении командной строки, чтобы запустить ее.
<некоторые выходные данные пропущены>
Как иерархия процессов представляется командой ps?
Иерархия представлена древовидно, например с ключом - f эта команда выводит как сам PID процесса, так и ветвь PPID
Как уже говорилось, серверы — это в сущности программы, которые часто запускаются самой системой во время загрузки. Задача, выполняемая сервером, называется службой. Таким образом, веб-сервер предоставляет веб-сервисы.
Команда netstat — отличное средство для определения сетевых серверов, запущенных на компьютере. Преимущество команды netstat состоит в ее способности отображать сетевые подключения.
Примечание. Вывод будет зависеть от числа сетевых подключений, открытых виртуальной машиной.
В окне терминала введите netstat.
Как показано выше, команда netstat возвращает большой объем информации, если вызвать ее без параметров. У команды netstat есть различные параметры для фильтрации и форматирования выходных данных, позволяющие сделать результат более информативным.
Команда netstat с параметром –tunap позволяет настроить вывод команды netstat. Обратите внимание, что команда netstat позволяет объединить несколько параметров в один с помощью знака «-».
Информация о сервере nginx выделена цветом.
Каково назначение параметров –t, -u, –n, –a и –p в команде netstat? (Воспользуйтесь командой man netstat при ответе на этот вопрос.)
- a показывает состояние всех сокетов;
-n показывает сетевые адреса в виде цифр;
-р идентифицирует название процесса;
-t отражает активные подключения в режиме переноса нагрузки с процессора на сетевой адаптер при передаче данных;
-u просматривает UDP соединения.
Важен ли порядок указания параметров в команде netstat?
Нет
Клиенты подключаются к порту и по соответствующему протоколу запрашивают информацию с сервера. Выходные данные netstat также содержат число служб, прослушивающих определенные порты. Интересные столбцы:
В первом столбце показаны используемые протоколы уровня 4 (UDP или TCP в данном случае).
Третий столбец представлен в формате <адрес:порт> и показывает локальный IP-адрес и порт, по которым доступен определенный сервер. IP-адрес 0.0.0.0 означает, что сервер прослушивает на всех IP-адресах, настроенных для данного компьютера.
Четвертый столбец представлен в том же формате сокета <адрес:порт> и отображает адрес и порт устройства на удаленном терминале. 0.0.0.0:* означает, что никакое удаленное устройство не использует данное подключение.
Пятый столбец отображает состояние подключения.
В шестом столбце отображается идентификатор процесса (PID), отвечающего за подключение. Также отображает короткое имя, связанное с процессом.
Исходя из вывода команды netstat в строке (d), каковы протокол уровня 4, состояние подключения и PID процесса, запущенного на порту 80?
____________________________________________________________________________________
Назначение номеров портов — это необязательное соглашение, но какая служба, вероятнее всего, запущена на TCP-порту 80?
TCP, LISTEN, 395
Иногда бывает полезно сверить информацию от команд netstat и ps. По выводу в строке (d) нам известно, что процесс с PID 395 привязан к TCP-порту 80. В этом примере используется порт 395. Используйте ps и grep для вывода строк команды ps, которые содержат PID 395.
В вышеприведенном примере выходные данные команды ps передаются конвейером команде grep, которая оставляет только те строки, которые содержат число 395. Результат содержит три строки с переносом текста.
В первой строке показан процесс, принадлежащий пользователю root (третий столбец), запущенный другим процессом с PID 1 (пятый столбец) 27 февраля (двенадцатый столбец) с командой /usr/bin/nginx -g pid /run/nginx.pid; error_log stderr;
Во второй строке показан процесс с PID 396, принадлежащий пользователю http, который был запущен процессом PID 395 27 февраля.
Третья строка показывает, что владельцем процесса c PID 3789 является пользователь analyst, а запущен он процессом с PID 1872 с командной строкой grep 395.
Процесс с PID 395 ― служба nginx. Какой вывод можно сделать из этих выходных данных?
На основе последнего столбца строки 1, на выходе отображается командную строку nginx
Что такое nginx? В чем ее функция? (Поищите в google ответы на вопросы о nginx.)
nginx – это веб-сервер, который представляет собой почтовый прокси-сервер, TCP / UDP прокси-сервер общего назначения
Во второй строке показано, что процесс 396 принадлежит пользователю с именем http, а номер его родительского процесса — 395. Что он означает? Это типичная ситуация?
Это означает, что nginx запустил процесс 396 под http именем. Это нормально, поскольку nginx работает для каждого клиента, который подключается к порту 80 TCP
Почему в последней строке отображается grep 395?
Поскольку grep 395 использовался для фильтрации вывода ps, когда вывод был сделан, grep 395 все еще работал, следовательно, он появился в списке
Использование команды Telnet для проверки служб TCP
Telnet — это простое приложение для удаленного доступа к оболочке. Telnet считается небезопасным, поскольку не обеспечивает шифрование. Администраторы, использующие протокол Telnet для удаленного управления сетевыми устройствами и серверами, подвергают риску компрометации свои учетные данные для входа на сервер, так как протокол Telnet передает данные сеанса в виде открытого текста. Хотя протокол Telnet не рекомендуется для удаленного доступа к оболочке, он может оказаться очень полезным для быстрой проверки или сбора информации о службах TCP.
Протокол Telnet работает через порт 23 с использованием протокола TCP по умолчанию. Но клиент telnet позволяет указать другой порт. Изменив порт и подключившись к серверу, клиент telnet позволяет сетевому аналитику быстро определить параметры сервера, напрямую обменявшись с ним данными.
Примечание. Настоятельно рекомендуется в качестве удаленной оболочки пользоваться программой ssh вместо telnet.
В первой части лабораторной работы мы запускали nginx и назначали ему TCP-порт 80. Хотя быстрый поиск в Google показал, что nginx является простым веб-сервером, как аналитику убедиться, что это действительно так? Что делать, если хакер просто изменил имя вредоносного ПО на nginx, чтобы сделать ее похожей на популярный веб-сервер? С помощью telnet подключитесь к локальному узлу через TCP-порт 80.
Нажмите несколько букв на клавиатуре. Все клавиши должны работать. После нажатия нескольких клавиш нажмите клавишу «ВВОД». Ниже приведены полные выходные данные, включая подключение по протоколу Telnet и случайные нажатия клавиш (в данном случае qwe).
Благодаря протоколу Telnet клиентом Telnet было установлено незашифрованное TCP-подключение напрямую к серверу nginx, который прослушивает TCP-порт 80 по адресу 127.0.0.1. Данное подключение позволяет отправлять данные непосредственно на сервер. Поскольку nginx является веб-сервером, он не понял переданную ему последовательность случайных букв и вернул ошибку в формате веб-страницы.
Почему ошибка отправляется в виде веб-страницы?
Потому, что nginx и есть веб-сервер
Поскольку сервер выдал ошибку и закрыл подключение, нам не очень много удалось узнать. Мы узнали, что:
Nginx с PID 395 — это на самом деле веб-сервер.
Версия nginx — 1.10.2.
Сетевой стек нашей ВМ CyberOps Workstation полностью работоспособен вплоть до уровня 7.
Не все службы одинаковы. Некоторые службы предназначены для получения неформатированных данных и не прерывают подключение, если ввести с клавиатуры бессмысленные данные. Ниже представлен пример такой службы.
Выберем в приведенном выше выводе команды netstat процесс, подключенный к порту 22. Подключитесь к ней с помощью команды Telnet.
Порт 22 TCP назначен службе SSH. SSH позволяет администратору безопасно подключаться к удаленному компьютеру.
Ниже представлены выходные данные.
Подключитесь через Telnet к порту 68. Что происходит? Дайте пояснение.
В соединении отказано, это объясняется тем, что данный порт не входит в конфигурации порта прослушивания как 68, в файле nginx он имеет значение 8