From adb49af977b86c937e78ba57ab89cbf3e1de0192 Mon Sep 17 00:00:00 2001 From: nnz1024 <0comffdiz@inbox.ru> Date: Sun, 22 Jan 2012 00:10:00 +0400 Subject: [PATCH] Version v9.0 (2012-01-22 00:10) [AUTO] --- s4a.tex | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 146 insertions(+), 1 deletion(-) diff --git a/s4a.tex b/s4a.tex index ba34a06..b735162 100644 --- a/s4a.tex +++ b/s4a.tex @@ -6,17 +6,21 @@ \usepackage[T1,T2A]{fontenc} \usepackage{indentfirst} % Отступ в первом абзаце главы \usepackage{fancyvrb} % Продвинутые листинги и in-line commands -% listings для данной ситуации, имхо, избыточен +% listings в данной ситуации, IMHO, избыточен \usepackage{pdflscape} % Внимание! При выводе в DVI выборочный % поворот страниц работать не будет, хотя текст будет повернут. \usepackage[colorlinks,unicode,urlcolor=blue]{hyperref} % Заполняем поля PDF уже со включенной опцией unicode \hypersetup{pdftitle={systemd для администраторов},% pdfauthor={Lennart Poettering, Sergey Ptashnick}} +% Не засоряем оглавление подразделами +\setcounter{tocdepth}{1} % Несколько сокращений \newcommand{\sectiona}[1]{\section*{#1}\addcontentsline{toc}{section}{#1}} \newcommand{\hreftt}[2]{\href{#1}{\texttt{#2}}} \newcommand{\tbs}{\textbackslash} +\newenvironment{caveat}[1][]{\smallskip\par\textbf{Предупреждение#1: }}% + {\smallskip\par} % Примерный аналог символа \testSFii (присутствует в листингах), % но без использования пакета pmboxdraw, средствами graphicx \newcommand{\mytextSFii}{\raisebox{0pt}[0pt][\depth]{% @@ -2607,6 +2611,147 @@ Linux подсистема ipset гораздо лучше подходит дл systemd. Но, конечно, будет лучше, если этим займутся разработчики из апстрима приложения, или сопровождающие вашего дистрибутива. +\section{К вопросу о безопасности} + +Одно из важнейших достоинств Unix-систем~--- концепция разделения привилегий +между различными компонентами ОС. Многие системные службы работают от имени +специальных системных пользователей, имеющих ограниченные полномочия, что +позволяет уменьшить ущерб для системы в случае взлома этих служб. + +Однако, такой подход предоставляет лишь самую минимальную защиту, так как +системные службы, хотя уже и не~имеют полномочий администратора (root), все +равно имеют практически те же права, что и обычные пользователи. Чтобы +обеспечить более эффективную защиту, нужно поставить более жесткие ограничения, +отняв у служб ряд возможностей, разрешенных для обычного пользователя. + +В частности, такая возможность предоставляется системами мандатного контроля +доступа (далее MAC, от Mandatory Access Control), например, SELinux. Если вам +нужно обеспечить высокий уровень безопасности на своем сервере~--- SELinux будет +вам неплохим подспорьем. Что касается systemd, то он предоставляет разработчикам +и администраторам целый арсенал возможностей по ограничению локальных служб, и +эти механизмы работают независимо от систем MAC. Таким образом, вне +зависимости от того, смогли ли вы разобраться с SELinux~--- у вас появляется ряд +дополнительных возможностей по усилению мер безопасности. + +В этой главе мы рассмотрим несколько таких опций, предоставляемых systemd, и +обсудим вопросы их практического применения. Реализация этих опций основана на +использовании ряда уникальных технологий безопасности, реализованных в ядре +Linux уже очень давно, но при этом практически неизвестных для большинства +разработчиков. Мы постарались сделать соответствующие опции systemd максимально +простыми в использовании, чтобы заинтересовать администраторов и апстримных +разработчиков: +\begin{itemize} + \item Изолирование служб от сети + \item Предоставление службам независимых каталогов +/tmp+ + \item Ограничение доступа служб к отдельным каталогам + \item Принудительное отключение capabilities для служб + \item Запрет форка, ограничение на создание файлов + \item Контроль доступа служб к файлам устройств +\end{itemize} + +Все эти опции описаны в man-страницах systemd, главным образом, в +\href{http://0pointer.de/public/systemd-man/systemd.exec.html}{systemd.exec(5)}. +Если вам потребуются какие-либо уточнения, пожалуйста, обратитесь к этим +страницам. + +Все эти опции доступны на системах с systemd, вне зависимости от использования +SELinux или любой другой реализации MAC. + +Все эти опции не~так уж и обременительны, и поэтому их разумнее будет +использовать даже в тех случаях, когда явная необходимость в них, казалось бы, +отсутствует. Например: даже если вы полагаете, что ваша служба не~пишет в +каталог +/tmp+, и поэтому использование +PrivateTmp=yes+ (см. ниже) вроде бы и +не~обязательно~--- лучше включить эту опцию, просто потому, что вы не~можете +знать наверняка, как будут вести себя используемые вами сторонние библиотеки (и +плагины для них). В частности, вы никогда не~узнаете, какие модули NSS могут +быть включены в каждой конкретной системе, и пользуются ли они каталогом +/tmp+. + +Мы надеемся, что эти опции окажутся полезными как для администраторов, +защищающих свои системы, так и для апстримных разработчиков, желающих сделать +свои службы безопасными <<из коробки>>. Мы настоятельно рекомендуем +разработчикам использовать такие опции по умолчанию в апстримных +service-файлах~--- это сравнительно несложно, но дает значительные преимущества +в плане безопасности. + +\subsection{Изолирование служб от сети} + +Простая, но мощная опция, которой вы можете воспользоваться при настройке +службы~--- +PrivateNetwork=+: +\begin{Verbatim} +... +[Service] +ExecStart=... +PrivateNetwork=yes +... +\end{Verbatim} +Добавление этой строчки обеспечивает полную изоляцию от сети всех процессов +данной службы. Они будут видеть лишь интерфейс обратной петли (+lo+), причем +полностью изолированный от обратной петли, используемой в основной системе. +Чрезвычайно эффективная защита против сетевых атак. + +\begin{caveat} +Некоторым службам сеть необходима для нормальной +работы. Разумеется, никто и не~говорит о том, чтобы применять ++PrivateNetwork=yes+ к сетевым службам, таким, как Apache. Однако даже те +службы, которые не~ориентированы на сетевое взаимодействие, могут нуждаться в +сети для нормальной работы (порой эта потребность не~вполне очевидна). Например, +если ваша система хранит пользовательские учетные записи в базе LDAP, для +выполнения системных вызовов наподобие +getpwnam()+ может потребоваться +обращение к сети. Впрочем, даже в такой ситуации, как правило, можно +использовать +PrivateNetwork=yes+, за исключением случаев, когда службе может +потребоваться информация о пользователях с ID~$\geq1000$. +\end{caveat} + +Если вас интересуют технические подробности: эта возможность реализована с +использованием технологии сетевых пространств имен (network namespaces). При +задействовании данной опции, для службы создается новое пространство имен, в +котором настраивается только интерфейс обратной петли. + +\subsection{Предоставление службам независимых каталогов \texttt{/tmp}} + +Еще одна простая, но мощная опция настройки служб~--- +PrivateTmp=+: +\begin{Verbatim} +... +[Service] +ExecStart=... +PrivateTmp=yes +... +\end{Verbatim} +При задействовании этой опции, служба получит свой собственный каталог +/tmp+, +полностью изолированный от общесистемного +/tmp+. По давно сложившейся традиции, +в Unix-системах каталог +/tmp+ является общедоступным для всех локальных служб и +пользователей. За все эти годы, он стал источником огромного количества проблем +безопасности. Чаще всего встречаются атаки с использованием символьных ссылок +(symlink attacks) и атаки на отказ в обслуживании (DoS attacks). Изолирование +этого каталога для каждой службы делает подобные уязвимости практически +бесполезными. + +Для релиза Fedora~17 +\href{https://fedoraproject.org/wiki/Features/ServicesPrivateTmp}{утверждена} +инициатива, направленная на включение этой опции по умолчанию для большинства +системных служб. + +\begin{caveat} +Некоторые службы используют +/tmp+ не~по назначению, +помещая туда сокеты IPC и другие подобные элементы, что само по себе уже +является уязвимостью (хотя бы потому, что используемые при передаче информации +файлы и каталоги должны иметь предсказуемые имена, что делает ваш код уязвимым к +атакам через символьные ссылки и атакам на отказ в обслуживании. Такие объекты +лучше помещать в каталог +/run+, так как в нем присутствует строгое разделение +доступа. В качестве примера такого некорректного использования +/tmp+ можно +привести X11, размещающий там свои коммуникационные сокеты (впрочем, в данном +конкретном случае некоторые меры безопасности все же присутствуют: сокеты +размещаются в защищенном подкаталоге, который создается на ранних стадиях +загрузки). Разумеется, для служб, использующих +/tmp+ в целях коммуникации, +включение опции +PrivateTmp=yes+ недопустимо. К счастью, таких служб +сейчас уже не~так уж и много. +\end{caveat} + +С технической точки зрения, эта опция построена на использовании технологии +пространств имен файловых систем (filesystem namespaces), реализованной в Linux. +При включении данной опции, для службы создается новое пространство имен, +отличающееся от иерархии каталогов основной системы только каталогом +/tmp+. + \end{document} vim:ft=tex:tw=80:spell:spelllang=ru