HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>В одной из прошлых статей мы рассматривали<a>общие советы по безопасности Linux-систем</a>. Сегодня проведём краткий экскурс в наиболее распространённые<strong>средства и инструменты</strong>, связанные с безопасностью<strong>Linux</strong>.</p>
1 <p>В одной из прошлых статей мы рассматривали<a>общие советы по безопасности Linux-систем</a>. Сегодня проведём краткий экскурс в наиболее распространённые<strong>средства и инструменты</strong>, связанные с безопасностью<strong>Linux</strong>.</p>
2 <p>Информация предоставлена в весьма сжатом виде, и если какое-то средство вас заинтересует, можно пройтись в интернете по интересующим темам и прочитать более подробно.</p>
2 <p>Информация предоставлена в весьма сжатом виде, и если какое-то средство вас заинтересует, можно пройтись в интернете по интересующим темам и прочитать более подробно.</p>
3 <p>В сегодняшней публикации мы рассмотрим POSIX ACL, sudo, chroot, PAM, SELinux, AppArmor, PolicyKit. Виртуализация, хотя и относится в какой-то мере к средствам безопасности, рассматриваться не будет, тем более, что это отдельная и обширная тема.</p>
3 <p>В сегодняшней публикации мы рассмотрим POSIX ACL, sudo, chroot, PAM, SELinux, AppArmor, PolicyKit. Виртуализация, хотя и относится в какой-то мере к средствам безопасности, рассматриваться не будет, тем более, что это отдельная и обширная тема.</p>
4 <h2>1. POSIX ACL</h2>
4 <h2>1. POSIX ACL</h2>
5 <p><strong>Описание</strong>: разграничение прав доступа к файлам на основе их атрибутов (Discretionary Access Control, DAC).</p>
5 <p><strong>Описание</strong>: разграничение прав доступа к файлам на основе их атрибутов (Discretionary Access Control, DAC).</p>
6 <p><strong>Механизм работы</strong>: Система (в частности, менеджер файловой системы) считывает атрибуты файла, к которому обращается пользователь (или программа, работающая от имени какого-либо пользователя), после чего решает, предоставлять ли доступ на основе этих атрибутов. При ошибке доступа приложению возвращается соответствующий код ошибки.</p>
6 <p><strong>Механизм работы</strong>: Система (в частности, менеджер файловой системы) считывает атрибуты файла, к которому обращается пользователь (или программа, работающая от имени какого-либо пользователя), после чего решает, предоставлять ли доступ на основе этих атрибутов. При ошибке доступа приложению возвращается соответствующий код ошибки.</p>
7 <p><strong>Пример использования</strong>: чтобы запретить/разрешить доступ остальных пользователей к своему файлу, можно поменять его атрибуты через<strong>chmod</strong>, и поменять владельца/группу через<strong>chown</strong>и<strong>chgrp</strong>(либо использовать более общую команду<strong>setfacl</strong>). Текущие права доступа можно посмотреть через<strong>ls</strong>и<strong>getfacl</strong>.</p>
7 <p><strong>Пример использования</strong>: чтобы запретить/разрешить доступ остальных пользователей к своему файлу, можно поменять его атрибуты через<strong>chmod</strong>, и поменять владельца/группу через<strong>chown</strong>и<strong>chgrp</strong>(либо использовать более общую команду<strong>setfacl</strong>). Текущие права доступа можно посмотреть через<strong>ls</strong>и<strong>getfacl</strong>.</p>
8 <h2>2. Sudo</h2>
8 <h2>2. Sudo</h2>
9 <p><strong>Описание</strong>: выполнение программ от своего и/или чужого имени.</p>
9 <p><strong>Описание</strong>: выполнение программ от своего и/или чужого имени.</p>
10 <p><strong>Механизм работы</strong>: при вызове команды<strong>sudo/sudoedit</strong>система считывает файл<strong>/etc/sudoers</strong>и на его основе определяет, какие команды может вызывать пользователь.</p>
10 <p><strong>Механизм работы</strong>: при вызове команды<strong>sudo/sudoedit</strong>система считывает файл<strong>/etc/sudoers</strong>и на его основе определяет, какие команды может вызывать пользователь.</p>
11 <p><strong>Пример использования</strong>: вся конфигурация определяется в файле<strong>/etc/sudoers</strong>. Например, можно разрешать выполнять только определённые команды и только от определенного пользователя:</p>
11 <p><strong>Пример использования</strong>: вся конфигурация определяется в файле<strong>/etc/sudoers</strong>. Например, можно разрешать выполнять только определённые команды и только от определенного пользователя:</p>
12 WEBMASTERS www = (www) ALL, (root) /usr/bin/su www<p>Данная строчка говорит о том, что пользователи, определённые в алиасе<strong>WEBMASTERS</strong>, могут выполнять все команды от имени пользователя<strong>www</strong>, или делать<strong>su</strong>только в<strong>www</strong>.</p>
12 WEBMASTERS www = (www) ALL, (root) /usr/bin/su www<p>Данная строчка говорит о том, что пользователи, определённые в алиасе<strong>WEBMASTERS</strong>, могут выполнять все команды от имени пользователя<strong>www</strong>, или делать<strong>su</strong>только в<strong>www</strong>.</p>
13 <h2>3. Chroot</h2>
13 <h2>3. Chroot</h2>
14 <p><strong>Описание</strong>: операция, ограничивающая доступ процесса к файловой системе, изменяя её корень в контексте процесса.</p>
14 <p><strong>Описание</strong>: операция, ограничивающая доступ процесса к файловой системе, изменяя её корень в контексте процесса.</p>
15 <p><strong>Механизм работы</strong>: запускает программу (по умолчанию<strong>/bin/sh</strong>) с контекстом, в котором переопределён корневой каталог файловой системы. Теперь все обращения вызванной программы не могут выйти за пределы корневого каталога (т. е. программа работает в весьма условной "песочнице"). Обойти данный механизм не составляет труда, особенно из под рута, так что это средство не рекомендуется для обеспечения безопасности. Настоящую песочницу сможет обеспечить только<strong>виртуализация</strong>.</p>
15 <p><strong>Механизм работы</strong>: запускает программу (по умолчанию<strong>/bin/sh</strong>) с контекстом, в котором переопределён корневой каталог файловой системы. Теперь все обращения вызванной программы не могут выйти за пределы корневого каталога (т. е. программа работает в весьма условной "песочнице"). Обойти данный механизм не составляет труда, особенно из под рута, так что это средство не рекомендуется для обеспечения безопасности. Настоящую песочницу сможет обеспечить только<strong>виртуализация</strong>.</p>
16 <p><strong>Пример использования</strong>: создаётся специальный каталог, в него копируется необходимое для работы окружение (также можно использовать команду mount --bind). Далее делается<strong>chroot</strong>на этот каталог, и запущенная программа работает только с предварительно подготовленным окружением. Для упрощения можно использовать различные<strong>jail-инструменты</strong>, доступные в дистрибутивах.</p>
16 <p><strong>Пример использования</strong>: создаётся специальный каталог, в него копируется необходимое для работы окружение (также можно использовать команду mount --bind). Далее делается<strong>chroot</strong>на этот каталог, и запущенная программа работает только с предварительно подготовленным окружением. Для упрощения можно использовать различные<strong>jail-инструменты</strong>, доступные в дистрибутивах.</p>
17 <h2>4. PAM</h2>
17 <h2>4. PAM</h2>
18 <p><strong>Описание</strong>: подключаемые модули аутентификации.</p>
18 <p><strong>Описание</strong>: подключаемые модули аутентификации.</p>
19 <p><strong>Механизм работы</strong>: программы, написанные с использованием PAM, обращаются к его библиотеке, которая уже собственно проводит процедуру аутентификации пользователя. При ошибке авторизации приложению возвращается соответствующий код ошибки.</p>
19 <p><strong>Механизм работы</strong>: программы, написанные с использованием PAM, обращаются к его библиотеке, которая уже собственно проводит процедуру аутентификации пользователя. При ошибке авторизации приложению возвращается соответствующий код ошибки.</p>
20 <p><strong>Пример использования</strong>: PostgreSQL, Apache, Squid и другие программы (включая написанные вами) могут работать с учётными записями пользователей не через собственные конфигурационные файлы, а обращаться к PAM, тем самым обеспечивая различные варианты аутентификации - Kerberos, eTokens, биометрия и др. Естественно, это касается и самого Linux-а - можно входить не только вбивая пару логин/пароль.</p>
20 <p><strong>Пример использования</strong>: PostgreSQL, Apache, Squid и другие программы (включая написанные вами) могут работать с учётными записями пользователей не через собственные конфигурационные файлы, а обращаться к PAM, тем самым обеспечивая различные варианты аутентификации - Kerberos, eTokens, биометрия и др. Естественно, это касается и самого Linux-а - можно входить не только вбивая пару логин/пароль.</p>
21 <h2>5. SELinux</h2>
21 <h2>5. SELinux</h2>
22 <p><strong>Описание</strong>: реализация системы принудительного контроля доступа (Mandatory Access Control, MAC), основанная на политиках и контекстах безопасности.</p>
22 <p><strong>Описание</strong>: реализация системы принудительного контроля доступа (Mandatory Access Control, MAC), основанная на политиках и контекстах безопасности.</p>
23 <p><em>Контроль называется принудительным, когда применение контроля производится администраторами и системой, и не зависит от решения пользователей, как это происходит при обычном контроле доступа.</em></p>
23 <p><em>Контроль называется принудительным, когда применение контроля производится администраторами и системой, и не зависит от решения пользователей, как это происходит при обычном контроле доступа.</em></p>
24 <p><strong>Механизм работы</strong>: для проверки прав доступа используется LSM-модуль ядра, который проверяет политику безопасности приложения и сверяет его тип с контекстом безопасности используемых файлов (объектов). При ошибке доступа соответствующая запись добавляется в<strong>/var/log/audit/audit.log</strong>. Пользователь может получить нотификацию об этом через утилиту<strong>setroubleshoot</strong>.</p>
24 <p><strong>Механизм работы</strong>: для проверки прав доступа используется LSM-модуль ядра, который проверяет политику безопасности приложения и сверяет его тип с контекстом безопасности используемых файлов (объектов). При ошибке доступа соответствующая запись добавляется в<strong>/var/log/audit/audit.log</strong>. Пользователь может получить нотификацию об этом через утилиту<strong>setroubleshoot</strong>.</p>
25 <p><strong>Пример использования</strong>: в targeted-режиме SELinux позволяет апачу читать только определённые каталоги. Стандартный (для кого-то) путь сделать веб-сайт в домашнем каталоге и открыть его через симлинк в<strong>/var/www</strong>не пройдёт процедуру проверки, т. к. SELinux проверяет контекст безопасности файлов, делая полное сканирование. Чтобы поменять контекст безопасности файла, необходимо использовать команду chcon (в данном случае, chcon -R -h -t httpd_sys_content_t /path/to/directory). Текущие контексты безопасности можно посмотреть через<strong>ls -Z</strong>.</p>
25 <p><strong>Пример использования</strong>: в targeted-режиме SELinux позволяет апачу читать только определённые каталоги. Стандартный (для кого-то) путь сделать веб-сайт в домашнем каталоге и открыть его через симлинк в<strong>/var/www</strong>не пройдёт процедуру проверки, т. к. SELinux проверяет контекст безопасности файлов, делая полное сканирование. Чтобы поменять контекст безопасности файла, необходимо использовать команду chcon (в данном случае, chcon -R -h -t httpd_sys_content_t /path/to/directory). Текущие контексты безопасности можно посмотреть через<strong>ls -Z</strong>.</p>
26 <h2>6. AppArmor</h2>
26 <h2>6. AppArmor</h2>
27 <p><strong>Описание</strong>: система упреждающей защиты, основанная на политиках безопасности (профилях).</p>
27 <p><strong>Описание</strong>: система упреждающей защиты, основанная на политиках безопасности (профилях).</p>
28 <p><strong>Механизм работы</strong>: для проверки прав доступа используется LSM-модуль ядра, который при запуске приложения проверяет наличие его профиля (<strong>/etc/apparmor.d</strong>), и если профиль существует, то ограничивает выполнение системных вызовов в соответствии с профилем. При ошибке доступа соответствующая запись добавляется в<strong>/var/log/audit/audit.log</strong>. Пользователь может получить нотификацию об этом через утилиту<strong>apparmor-notify</strong>.</p>
28 <p><strong>Механизм работы</strong>: для проверки прав доступа используется LSM-модуль ядра, который при запуске приложения проверяет наличие его профиля (<strong>/etc/apparmor.d</strong>), и если профиль существует, то ограничивает выполнение системных вызовов в соответствии с профилем. При ошибке доступа соответствующая запись добавляется в<strong>/var/log/audit/audit.log</strong>. Пользователь может получить нотификацию об этом через утилиту<strong>apparmor-notify</strong>.</p>
29 <p><strong>Пример использования</strong>: с помощью команды aa-genprof можно создать профиль интересующего приложения, отработав в нем все необходимые use-case-ы. Далее полученный файл профиля можно модифицировать интересующим вас образом, сохранить в<strong>/etc/apparmor.d</strong>и активировать через aa-enforce.</p>
29 <p><strong>Пример использования</strong>: с помощью команды aa-genprof можно создать профиль интересующего приложения, отработав в нем все необходимые use-case-ы. Далее полученный файл профиля можно модифицировать интересующим вас образом, сохранить в<strong>/etc/apparmor.d</strong>и активировать через aa-enforce.</p>
30 <h2>7. PolicyKit</h2>
30 <h2>7. PolicyKit</h2>
31 <p><strong>Описание</strong>: Средство контроля системных привилегий.</p>
31 <p><strong>Описание</strong>: Средство контроля системных привилегий.</p>
32 <p><strong>Механизм работы</strong>: при обращении приложения к сервису (любое обращение проходит как<strong>action</strong>), он проверяет через<strong>PolicyKit</strong>права доступа пользователя для данного action-а. В зависимости от политик доступ может быть запрещен, разрешён или требовать аутентификации. Отображение ошибок (или запрос пароля) должно на себя брать клиентское приложение.</p>
32 <p><strong>Механизм работы</strong>: при обращении приложения к сервису (любое обращение проходит как<strong>action</strong>), он проверяет через<strong>PolicyKit</strong>права доступа пользователя для данного action-а. В зависимости от политик доступ может быть запрещен, разрешён или требовать аутентификации. Отображение ошибок (или запрос пароля) должно на себя брать клиентское приложение.</p>
33 <p><strong>Пример использования</strong>:<strong>Ubuntu</strong>при настройке сети позволяет просматривать всю информацию без запроса пароля (т. к. конфигурация<strong>PolicyKit</strong>разрешает чтение без авторизации), но когда необходимо настройки сохранить, то запрашивается пароль. Причем пользователю не даются рутовские права на всю систему, т. к. он работает только в пределах используемого сервиса.</p>
33 <p><strong>Пример использования</strong>:<strong>Ubuntu</strong>при настройке сети позволяет просматривать всю информацию без запроса пароля (т. к. конфигурация<strong>PolicyKit</strong>разрешает чтение без авторизации), но когда необходимо настройки сохранить, то запрашивается пароль. Причем пользователю не даются рутовские права на всю систему, т. к. он работает только в пределах используемого сервиса.</p>
34 <h2>Заключение</h2>
34 <h2>Заключение</h2>
35 <p>Естественно, есть и другие средства, связанные с безопасностью, не рассмотренные в данной статье. Однако всё вышеперечисленное<strong>является стандартом де-факто</strong>для наиболее распространенных дистрибутивов, и если вы заботитесь о безопасности, желательно их знать.</p>
35 <p>Естественно, есть и другие средства, связанные с безопасностью, не рассмотренные в данной статье. Однако всё вышеперечисленное<strong>является стандартом де-факто</strong>для наиболее распространенных дистрибутивов, и если вы заботитесь о безопасности, желательно их знать.</p>
36  
36