Основные концепции безопасности (триада CIA) в Linux

CompTIABeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы получите практический опыт работы с основополагающими принципами информационной безопасности, известными как Триада ЦРУ (CIA Triad): Конфиденциальность (Confidentiality), Целостность (Integrity) и Доступность (Availability). Работая в среде Linux, вы освоите практические навыки защиты данных и обеспечения надежности системы. Лабораторная работа проведет вас через настройку разрешений файлов, демонстрацию целостности файлов с помощью криптографических хешей и симуляцию базового мониторинга служб, чтобы понять, как эти основные концепции применяются в реальных сценариях.

Вы начнете с манипулирования разрешениями файлов Linux с помощью команды chmod для обеспечения конфиденциальности и целостности конфиденциального файла, гарантируя, что он доступен и может быть изменен только авторизованными пользователями. Далее вы изучите целостность файлов, генерируя хеши MD5 и SHA256 для создания базовой линии, а затем проверите, что файл остается неизменным. Наконец, вы симулируете простую службу и будете использовать базовые команды мониторинга для понимания концепции доступности и способов обнаружения сбоев в работе служб.

Настройка прав доступа к файлам в Linux для конфиденциальности и целостности

В этом разделе вы научитесь использовать основные права доступа к файлам в Linux для обеспечения двух ключевых принципов информационной безопасности: конфиденциальности и целостности. Конфиденциальность гарантирует, что данные доступны только авторизованным пользователям, а целостность гарантирует, что данные не будут изменены несанкционированным образом. Вы создадите файл, изучите его права доступа по умолчанию, а затем используете команду chmod для ограничения доступа и предотвращения изменений. Все операции будут выполняться в вашей домашней директории проекта, ~/project.

Теперь, находясь в директории ~/project, создайте пример файла, представляющего конфиденциальные данные. Мы используем команду echo для помещения некоторого текста в него.

echo "Top Secret Details" > confidential_data.txt

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

ls -l confidential_data.txt

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

-rw-rw-r-- 1 labex labex 19 Jul 21 15:09 confidential_data.txt

Разберем строку прав доступа -rw-rw-r--:

  • Первый символ - указывает, что это обычный файл.
  • Следующие три символа rw- — это права для владельца (пользователь labex). r означает чтение, w означает запись.
  • Следующие три rw- — для группы (группа labex). Группа может читать и записывать файл.
  • Последние три r-- — для других (всех остальных пользователей системы). Они также могут только читать файл.

Эта настройка по умолчанию нарушает конфиденциальность, поскольку любой пользователь в системе может прочитать наш файл "Top Secret". Исправим это, изменив права доступа так, чтобы только владелец мог читать и записывать. Мы будем использовать команду chmod с числовыми (восьмеричными) кодами: 4 для чтения, 2 для записи и 1 для выполнения. Чтобы предоставить владельцу права на чтение/запись (4+2=6) и убрать все права для группы (0) и других (0), мы используем код 600.

chmod 600 confidential_data.txt

Проверьте права доступа еще раз:

ls -l confidential_data.txt

Вывод теперь отражает новые, более безопасные права доступа, обеспечивающие конфиденциальность.

-rw------- 1 labex labex 19 Jul 21 15:09 confidential_data.txt

Далее, давайте защитим целостность файла, сделав его доступным только для чтения, даже для владельца. Это предотвратит случайные изменения. Мы установим права доступа 400, что означает только чтение для владельца, сохраняя как конфиденциальность, так и целостность.

chmod 400 confidential_data.txt

Теперь попробуем изменить файл, добавив в него новый текст.

echo "This should not be added." >> confidential_data.txt

Операция завершится неудачей, и вы увидите ошибку "Permission denied" (Отказано в доступе). Это демонстрирует, что целостность файла защищена от изменений.

zsh: permission denied: confidential_data.txt

Наконец, проверьте права доступа в последний раз, чтобы увидеть состояние "только для чтения".

ls -l confidential_data.txt
-r-------- 1 labex labex 19 Jul 21 15:09 confidential_data.txt

Вы успешно настроили права доступа к файлам для защиты как его конфиденциальности, так и целостности.

Демонстрация целостности файлов с помощью хэширования (MD5/SHA256)

В этом шаге вы научитесь использовать криптографическое хеширование для проверки целостности файлов. Хотя права доступа к файлам могут предотвратить изменение файла неавторизованными пользователями, они не защищают от случайных изменений, внесенных авторизованным пользователем, или от более сложных атак. Хеш-функция создает уникальный цифровой отпечаток (строку символов фиксированной длины) для файла. Даже однобитное изменение в файле приведет к совершенно другому хешу, что делает его отличным инструментом для обнаружения подделки. Мы будем использовать команду sha256sum, стандартный и безопасный инструмент хеширования в Linux.

Сначала убедитесь, что вы находитесь в правильном каталоге. Если вы продолжаете с предыдущего шага, вы должны уже находиться в ~/project.

На предыдущем шаге мы сделали файл confidential_data.txt доступным только для чтения, чтобы защитить его целостность. Чтобы продемонстрировать, как работает хеширование, нам сначала нужно снова сделать файл доступным для записи для владельца. Мы используем chmod, чтобы вернуть права на запись пользователю (u+w).

chmod u+w confidential_data.txt
ls -l confidential_data.txt

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

-rw------- 1 labex labex 19 Jul 21 15:09 confidential_data.txt

Теперь давайте сгенерируем хеш SHA256 для нашего исходного, доверенного файла. Этот хеш послужит нашей базой для проверок целостности.

sha256sum confidential_data.txt

Команда выведет длинную строку символов, которая является хешем, за которой следует имя файла.

106b4d0169831f239fec7a53b072640a2c0b815e00b088bbe44e6689e92cb96d  confidential_data.txt

Чтобы упростить проверку в дальнейшем, обычной практикой является сохранение этого доверенного значения хеша в отдельном файле. Перенаправим вывод команды в новый файл с именем hashes.sha256.

sha256sum confidential_data.txt > hashes.sha256

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

cat hashes.sha256
106b4d0169831f239fec7a53b072640a2c0b815e00b088bbe44e6689e92cb96d  confidential_data.txt

Теперь давайте смоделируем несанкционированное изменение. Мы добавим новую строку текста в наш конфиденциальный файл.

echo "This is an unauthorized modification." >> confidential_data.txt

Файл confidential_data.txt теперь изменен. Чтобы проверить его целостность, мы можем использовать флаг -c (или --check) с командой sha256sum, указав ей сравнить текущий хеш файла с доверенным значением, хранящимся в hashes.sha256.

sha256sum -c hashes.sha256

Поскольку содержимое файла изменилось, новый хеш не будет соответствовать сохраненному хешу. Команда сообщит о сбое, доказывая, что целостность файла была нарушена.

confidential_data.txt: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match

Этот мощный метод позволяет быстро и надежно проверять, были ли какие-либо файлы изменены по сравнению с их исходным состоянием.

Симуляция доступности сервиса и базовый мониторинг

На этом этапе вы изучите принцип доступности (Availability), третий компонент триады безопасности CIA. Доступность гарантирует, что системы и сервисы работают и доступны, когда это необходимо. Вы симулируете простой веб-сервис, научитесь проверять, запущен ли он, симулируете сбой сервиса, а затем напишете простой скрипт мониторинга для автоматизации проверки доступности.

Сначала убедитесь, что вы находитесь в директории ~/project.

Мы будем использовать встроенный веб-сервер Python для симуляции работающего сервиса. Эта команда запустит веб-сервер на порту 8000 и будет обслуживать файлы из текущей директории. Символ & в конце запускает процесс в фоновом режиме, позволяя вам продолжать использовать терминал.

python3 -m http.server 8000 &

Вы увидите сообщение, указывающее на запуск процесса, вместе с его идентификатором процесса (PID).

[1] 12345

Нажмите Enter для продолжения.

Ваш сервис теперь запущен. Базовый способ проверить, запущен ли сервис, — это увидеть, существует ли его процесс. Мы можем использовать команду pgrep для поиска PID процесса по имени.

pgrep -f http.server

Это должно вернуть PID серверного процесса, подтверждая, что он запущен в памяти.

12345

Однако запущенный процесс не гарантирует, что сервис работает правильно. Лучшая проверка — это попытаться подключиться к нему, как это сделал бы пользователь. Мы будем использовать команду curl для отправки запроса на наш локальный сервер.

curl http://localhost:8000/confidential_data.txt

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

Top Secret Details
This is an unauthorized modification.

Теперь давайте симулируем сбой сервиса. Мы будем использовать команду kill для завершения процесса веб-сервера. Вам понадобится PID, который вы нашли ранее.

## Замените 12345 на фактический PID из команды pgrep
kill 12345

После выполнения команды kill вы можете увидеть сообщение "Terminated" для фонового задания. Теперь давайте снова попробуем получить доступ к сервису с помощью curl.

curl http://localhost:8000/confidential_data.txt

На этот раз команда завершится неудачей, потому что сервис больше не запущен и не может принять соединение. Это демонстрирует отсутствие доступности.

curl: (7) Failed to connect to localhost port 8000 after 0 ms: Connection refused

Наконец, давайте создадим простой скрипт мониторинга для автоматизации этой проверки. Создайте новый файл с именем monitor.sh с помощью nano.

nano monitor.sh

Введите следующий скрипт в редактор. Этот скрипт использует curl для проверки сервиса. Если он получает успешный ответ (200 OK), он сообщает, что сервис "UP" (работает); в противном случае он сообщает "DOWN" (не работает).

#!/bin/bash

## Проверяем, отвечает ли сервис на localhost:8000
if curl -s --head http://localhost:8000 | grep "200 OK" > /dev/null; then
  echo "Service Status: UP"
else
  echo "Service Status: DOWN"
fi

Сохраните файл и выйдите из nano, нажав Ctrl+X, затем Y и Enter.

Сделайте скрипт исполняемым с помощью chmod:

chmod +x monitor.sh

Теперь запустите ваш скрипт мониторинга. Поскольку сервис остановлен, он должен сообщить "DOWN".

./monitor.sh
Service Status: DOWN

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

Резюме

В этой лабораторной работе вы получили практический опыт работы с основополагающими принципами триады безопасности CIA (Конфиденциальность, Целостность, Доступность) с использованием распространенных инструментов Linux. Вы научились обеспечивать конфиденциальность путем манипулирования разрешениями файлов Linux с помощью команды chmod, ограничивая доступ к конфиденциальному файлу таким образом, чтобы только авторизованный владелец мог просматривать его содержимое. Кроме того, вы исследовали целостность, сначала установив разрешения файлов для предотвращения несанкционированных изменений, а затем используя алгоритмы хеширования, такие как MD5 и SHA256, для генерации уникальной контрольной суммы, позволяющей проверить, не был ли файл подделан.

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