Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

except_4

.pdf
Скачиваний:
69
Добавлен:
24.06.2017
Размер:
11.13 Mб
Скачать

28. Управление системными и сетевыми сервисами. Управление targetюнитами, target-юнит по умолчанию.

.target — группа юнитов systemd

Юниты целей используются для связывания и группировки других юнитов с целью описания соответствующего состояния системы. Некоторые из этих юнитов могут быть юнитами служб. Другие юниты могут быть дополнительными юнитами целей со своими собственными группами юнитов.

Ниже приведен пример содержимого файла юнита цели multi-user.target.

[Unit] Description=Multi-User System

Documentation=man:systemd.special(7)

Requires=basic.target Conflicts=rescue.service rescue.target

After=basic.target rescue.service rescue.target AllowIsolate=yes

Обратите внимание на то, что этот файл юнита цели не содержит команды для исполнения. Вместо нее он содержит списки юнитов (в данном случае в основном юнитов целей) и используется для объединения этих юнитов. Данный файл описывает следующее правила:

Цель multi-user.target требует, чтобы была успешно достигнута цель basic.target.

В том случае, если исполняется служба, соответствующая юниту rescue.service, или достигнута цель, соответствующая юниту rescue.target, данный юнит будет остановлен и наоборот.

Достижение цели multi-user.target начинается сразу после начала инициирования достижения цели basic.target и после запуска службы rescue.target и достижения цели rescue.target в случае активации последних.

Кроме того, данный юнит цели содержит параметр AllowIsolate. Этот параметр позволяет вашей системе рассматривать юнит цели multiuser.target в качестве цели процесса загрузки системы благодаря выполнению команды systemctl isolate.

Юниты целей позволяют группировать другие юниты не только на основе содержимого соответствующих файлов юнитов. Файл юнита цели может использовать директорию .wants для размещения ссылок на юниты, которые должны запускаться вместе с юнитом цели. Например,

файл /usr/lib/systemd/system/multi-user.target имеет ассоциированную директорию /usr/lib/systemd/system/multi-user.target.wants. Эта директория содержит ссылки на юниты (не только юниты служб, но и юниты других целей), которые будут исполняться при инициировании достижения соответствующей цели. Каждый из этих юнитов может иметь свои зависимости, а также такие параметры, как приведенный выше параметр Requires, позволяющий указать юниты, которые должны быть запущенны для запуска рассматриваемого юнита.

Показать юнит по умолчанию:

systemctl get-default

Показать активные юниты:

systemctl list-units --type target

Показать все загруженные юниты:

systemctl list-units --type target –all

Изменить юнит по умолчанию:

systemctl set-default name.target

Включить все сервисы из name.target и выключить все остальные включенные сервисы:

systemctl isolate name.target

Узнать статус (запущен/остановлен):

systemctl status my-name.target

Запуск сервиса или target:

systemctl start my-name.target

Остановка сервиса или target:

systemctl stop my-name.target

29.Управление системными и сетевыми сервисами. Выгрузка системы, перезагрузка, приостановка и остановка системы.

1. Управление системными и сетевыми сервисами.

1.1 Systemd – системный менеджер инициализации демонов в linux. За счет распараллеливания запуска служб systemd позволяет ускорить загрузку операционной системы, а также обладает удобным функционалом.

Systemd оперирует специально оформленными файлами конфигурации - юнитами(unit). Каждый юнит отвечает за отдельно взятую службу, точку монтирования, подключаемое устройство, файл подкачки, виртуальную машину и т.п..

Существуют специальные типы юнитов, которые не несут функциональной нагрузки, но позволяют задействовать дополнительные возможности systemd. К ним относятся юниты типа target, slice, automount и др. systemd поддерживает следующие типы юнитов:

.target - позволяет группировать юниты, воплощая концепцию уровней запуска

(runlevel)

.service - отвечает за запуск сервисов (служб), также поддерживает вызов интерпретаторов для исполнения пользовательских скриптов

.mount - отвечает за монтирование файловых системи т.д.

Юниты разложены в трех каталогах:

/usr/lib/systemd/system/ – юниты из установленных пакетов RPM(nginx, apache, mysql и тд)

/run/systemd/system/ — юниты, созданные в рантайме /etc/systemd/system/ — юниты, созданные системным администратором

1.2Главная команда для отслеживания и контроля состояния systemd - команда systemctl. Некоторые из вариантов ее использования связаны с изучением состояния системы и управлением системой и службами.

1.3Основные команды system ($ …):

systemctl status – информация о состоянии всех юнитов

systemctl –type=service информация о состоянии всех юнитов

systemctl status имя.тип - информация о состоянии сервиса

(например: $ systemctl status auditd.service )

информация о состоянии сервиса (другим способом): systemctl is-active auditd.service systemctl is-enabled auditd.service

информация о зависимостях сервисов друг от друга:

systemctl list-dependencies --after auditd.service systemctl list-dependencies --before auditd.service

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

Пример:

shutdown -s -t 10 выключение компьютера через десять секунд .

3.Управление работой системы и питанием компьютера. Выгрузка системы, перезагрузка, приостановка и остановка системы.

выключение системы (выгрузить систему и отключить питание компьютера):

# systemctl poweroff

Пример из лабы: выключить систему в определенное время:

# shutdown --poweroff чч:мм

где чч:мм - время в 24-часовом формате. (Убедитесь в том, что за 5 минут до выгрузки системы будет создан файл /run/nologin для предотвращения новых входов пользователей в систему.)

остановить систему(выгрузить систему без отключения питания компьютера):

#systemctl halt

Перезагрузка системы :

#systemctl reboot

(в лабе было: systemctl --no-wall reboot)*

Приостановление работы системы:

# systemctl suspend

30.Система принудительного управления доступом SELinux. Режимы работы. Формат файла /etc/selinux/config. Получение информации о режиме работы. Изменение режима работы.

SELinux (Security Enhanced Linux) – система мандатного контроля доступа, встроенная в ядро. Является дополнительным уровнем безопасности к стандартной в системах GNU/Linux дискреционной модели управления доступом (user/group/other). Основная цель – защитить пользовательские данные от системных процессов, которые могут быть скомпрометированы.

Пример (почему нельзя ограничиться одной дискреционной моделью):

Допустим, имеется http-сервер Apache. Для обеспечения удаленного доступа к нему открыты соответственные порты firewall-а. Однако если в такой ситуации скомпрометировать процесс данного веб-сервера, злоумышелнник получит все разрешения пользователя “apache” и группы “apache” (в соответствии с дискреционной моделью), которые позволят ему читать из

/var/www/html, писать в каталоги /tmp, /var/tmp…

SELinux включает в себя систему правил безопасности, которые определяют, какой процесс имеет доступ к каким файлам, каталогам, портам. Каждый файл, процесс, каталог, порт в SELinux имеет специальный атрибут, который называется контекстом безопасности. Он используется в политике SELinux, чтобы разграничивать доступ. По умолчанию (если в политике нет разрешающего правила) – доступ запрещен.

Структура контекста: user : role : type : sensitivity

Режимы работы SELinux.

1) Enforcing.

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

2)Permissive

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

3)Disabled

Полное отключение системы SELinux.

Помимо режима работы к основным настройкам SELinux относится также параметр SELINUXTYPE, указывающий какую политику безопасности необходимо использовать. Учитывая сложность системы, разработчиками

SELinux и независимыми специалистами был создан ряд стандартных политик безопасности для системы мандатного контроля доступа (targeted, strict, mls)

По умолчанию SELinux использует целевую (targeted) политику безопасности, направленную на защиту от потенциально компрометируемых злоумышленниками системных процессов.

Режим работы и тип политики системы SELinux описаны в файле /etc/selinux/config. Содержимое файла включает в себя две переменные:

SELINUX=(enforcing/permissive/disabled)

// режим работы

SELINUXTYPE=(targeted/mls)

// тип политики

Команды получения информации о режиме работы:

 

 

 

 

 

Команда

Что возвращает

 

 

getenforce

Enforcing/Permissive/Disabled

 

 

 

sestatus

Статус SELinux и используемой политики:

 

SELinux status:

 

enabled

 

SELinuxfs mount:

 

/selinux

 

Current mode:

 

enforcing

 

Mode from config file:

enforcing

 

Policy version:

 

23

 

Policy from config file:

targeted

 

 

 

 

 

 

 

 

Способы изменения режима работы:

1)Сконфигурировать файл /etc/selinux/config, указать явно значение режима работы в переменной SELINUX, перезагрузить систему.

2)Использовать команду:

Команда

Что делает

 

Переключает между

setenforce [ Enforcing | Permissive | 1 | 0 ]

режимами

Enforcing/Permissive. Не

 

 

требуется перезагрузка

 

системы.

3) Отредактировать строку загрузки ядра.

/boot/grub/grub.conf – файл с конфигом для загрузчика GRUB.

В строке kernel, касающейся selinux, добавить enforcing=0 (постоянный

Permissive) или selinux=0 (постоянный Disabled)

31. Система принудительного управления доступа SELinux. Объекты и субъекты доступа. Назначение и формат контекста безопасности.

SELinux – реализация системы принудительного контроля доступа. Разграничение доступа основывается на ограничении доступа процессов к ресурсам.

Все разграничение доступа в операционной системе основывается на типах атрибутов доступа объектов и субъектов. В SELinux эти атрибуты называются security context или контекст безопасности.

Объекты доступа – то, к чему производится доступ:

файлы

сокеты

network hosts

каналы, использующиеся для связи процессов друг с другом

Субъекты доступа – это та сущность, которая пытается получить доступ

кобъекту доступа. Субъект доступа – это процесс.

Все объекты и субъекты имеют связанный с ними контекст безопасности. Контекст безопасности состоит из трех частей: пользователь, роль и тип. Обычно контекст безопасности отображается в следующем виде:

user:role:type

Чтобы увидеть отображение контекста безопасности достаточно добавить опцию -Z в команду. Например:

$ id -Z joe:user_r:user_t.

В SELinux индентификатор type является главной частью контекста безопасности, которая определяет, разрешен ли доступ или нет. По историческим причинам идентификатор type процесса часто называют

доменом.

Идентификаторы user и role имеют малое влияние на политику разграничения доступа для type enforcement. По отношению к процессам user и role имеют большее значение, так как они используются для контроля соответствия между type и идентификатором пользователя (а следовательно, с аккаунтами пользователей Linux).

По отношению к объектам user и role практически не имеют влияния. По соглашению role объекта – обычно object_r, а идентификатор user объекта - обычно пользовательский идентификатор процесса, который создал этот объект.

Назначение контекста безопасности – по сути сопоставить каждому объекту и субъекту в системе свою метку, которая будет однозначно

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

Есть несколько схем реализации разграничения доступа в SELinux. Одна из этих схем – Type Enforcement.

Type Enforcement - основной механизм контроля доступа, используемый в целевых политиках. Позволяет детально, на самом низком уровне управлять разрешениями. Самый гибкий, но и самый трудоемкий для системного администратора механизм.

В SELinux доступ к любым объектам должен быть явно разрешен. В SELinux запрещает доступ по умолчанию, это значит, что в SELinux нет суперпользователя по умолчанию, как root в Linux.

Разрешение доступа для определенного типа субъекта (для домена) к определенному типу объекта осуществляется при помощи команды allow.

Команда allow принимает 4 аргумента:

source type (обычно домен процесса, которому разрешаем доступ)

target type (тип объекта, к которому разрешаем доступ)

object class (класс объекта)

permissions (по сути действия, которые субъект может совершать над объектом с указанными типом и классом)

Пример:

allow user_t bin_t : file (read execute getattr);

Прочитать это можно примерно так: разрешить процессам с доменом user_t чтение, запуск на исполнение и получение атрибутов файлов с типом bin_t.

Права доступа в SELinux намного более многогранны, чем в Linux. Например, getattr позволяет процессу получать сведения об объекте (дату создания, время создания и тд).

Визуализация правила allow:

Рассмотрим, как программа passwd использует Type Enforcement для разграничения доступа.

Программа passwd должна иметь доступ для чтения и редактирования файла /etc/shadow. В Linux достаточно запустить passwd от root, в Type Enforcement же используется более тонкая настройка – можно разрешить доступ к файлу /etc/shadow только программе passwd, вне зависимости от того, какой пользователь ее запустил.

В данном примере мы ввели 2 идентификатора type: passwd_t (домен, который будет использовать программа passwd) и shadow_t (тип для файла

/etc/shadow).

Рассмотрим команду allow подробнее: ее назначение – разрешить домену passwd_t доступ к файлу с типом shadow_t. Это нужно для того, чтобы разрешить процессу перемещать и создавать новый shadow файл.

На картинке выше можно видеть, что управление файлом shadow будет выполнено успешно, так как процесс имеет эффективный id root и потому что правило allow Type Enforcement разрешает данному домену процесса доступ к файлу shadow.

(их очень много)

32. Система принудительного управления доступом SELinux. Классы объектов файловой системы. Права доступа к обычному файлу (объект file). Назначение контекста файлам. Наследование по умолчанию. Переход типа. Копирование и перемещение файла внутри и за пределы файловой системы.

Классы объектов представляют собой категории каких-либо ресурсов, например, files, sockets, а разрешения представляют собой доступ к этим ресурсами, например, read, write, send….

Классы объектов:

Dir

Директории

File

Обычные файлы

Fd

Дескприпторы файлов

Filesystem

Файловые системы

Lnk_file

Символьная ссылка (указатель на файл)

process

процесс

system

Система в целом

Чтобы объявить класс объекта используется оператор объявления: class class_name

Права доступа к классу file: append, create, entrypoint (file может быть использован, как точка доступа к новому домену с помощью доменного перехода (об этом далее)), execute, link (создание жесткой ссылки), getattr, setattr, read, rename и т. д.

Изменение контекста безопасности файла

сhcon – изменяет контекст безопасности файла.

restorecon – восстанавливает контекст безопасности, определенный политикой.

Наследование контекста по умолчанию:

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

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

Доменный переход

Доменный переход это изменение пользователя, роли или типа. Переход прописывается в политике безопасности.

Соседние файлы в предмете Безопасность операционных систем