Compare commits

...

7 Commits
v9.1 ... v12.0

Author SHA1 Message Date
nnz1024
720969dee5 Version v12.0 (2012-07-13 17:52) [AUTO] 2017-08-17 23:05:39 +03:00
nnz1024
f54a9fa59c Version v11.2 (2012-07-12 17:06) [AUTO] 2017-08-17 23:05:39 +03:00
nnz1024
a59846be38 Version v11.1 (2012-07-09 00:59) [AUTO] 2017-08-17 23:05:39 +03:00
nnz1024
4539170bae Version v11.0 (2012-06-29 22:28) [AUTO] 2017-08-17 23:05:39 +03:00
nnz1024
6a698b3e9a Version v10.0 (2012-06-03 02:30) [AUTO] 2017-08-17 23:05:39 +03:00
nnz1024
e71d20b589 Version v9.3 (2012-02-02 02:43) [AUTO] 2017-08-17 23:05:39 +03:00
nnz1024
946aabe425 Version v9.2 (2012-01-30 02:30) [AUTO] 2017-08-17 23:05:39 +03:00

461
s4a.tex
View File

@@ -19,12 +19,17 @@ pdfauthor={Lennart Poettering, Sergey Ptashnick}}
\newcommand{\sectiona}[1]{\section*{#1}\addcontentsline{toc}{section}{#1}} \newcommand{\sectiona}[1]{\section*{#1}\addcontentsline{toc}{section}{#1}}
\newcommand{\hreftt}[2]{\href{#1}{\texttt{#2}}} \newcommand{\hreftt}[2]{\href{#1}{\texttt{#2}}}
\newcommand{\tbs}{\textbackslash} \newcommand{\tbs}{\textbackslash}
\newcommand{\hrf}[2]{\href{#1}{#2}}
\newenvironment{caveat}[1][]{\smallskip\par\textbf{Предупреждение#1: }}% \newenvironment{caveat}[1][]{\smallskip\par\textbf{Предупреждение#1: }}%
{\smallskip\par} {\smallskip\par}
% Примерный аналог символа \testSFii (присутствует в листингах), % Примерный аналог символа \testSFii (присутствует в листингах),
% но без использования пакета pmboxdraw, средствами graphicx % но без использования пакета pmboxdraw, средствами graphicx
\newcommand{\mytextSFii}{\raisebox{0pt}[0pt][\depth]{% \newcommand{\mytextSFii}{\raisebox{0pt}[0pt][\depth]{%
\reflectbox{\rotatebox[origin=t]{270}{$\neg$}}}} \reflectbox{\rotatebox[origin=t]{270}{$\neg$}}}}
% Из-за бага в пакете fancyvrb, в окружениях Verbatim нельзя использовать URL,
% содержащие дефисы. Поэтому их определение приходится выносить за пределы
% окружения
\newcommand{\defhref}[3]{\newcommand{#1}{\href{#2}{#3}}}
% Настройка макета страницы % Настройка макета страницы
\setlength{\hoffset}{-1.5cm} \setlength{\hoffset}{-1.5cm}
\addtolength{\textwidth}{2cm} \addtolength{\textwidth}{2cm}
@@ -44,7 +49,7 @@ pdfauthor={Lennart Poettering, Sergey Ptashnick}}
\begin{document} \begin{document}
\sloppy \sloppy
\title{systemd для администраторов} \title{systemd для администраторов}
\author{Lennart P\"{o}ttering (автор)\thanks{Первоисточник (на английском \author{Lennart Poettering (автор)\thanks{Первоисточник (на английском
языке) опубликован на сайте автора: \url{http://0pointer.de/blog/projects}}\\% языке) опубликован на сайте автора: \url{http://0pointer.de/blog/projects}}\\%
Сергей Пташник (русский перевод)\thanks{Актуальная версия перевода Сергей Пташник (русский перевод)\thanks{Актуальная версия перевода
доступна на личной странице переводчика: доступна на личной странице переводчика:
@@ -74,7 +79,7 @@ Unported}}
будем рассматривать ключевые новшества systemd, что может потребовать несколько будем рассматривать ключевые новшества systemd, что может потребовать несколько
более подробного изложения. более подробного изложения.
\begin{flushright} \begin{flushright}
Lennart P\"{o}ttering, 23 августа 2010~г. Lennart Poettering, 23 августа 2010~г.
\end{flushright} \end{flushright}
\section{Контроль процесса загрузки} \section{Контроль процесса загрузки}
@@ -2105,7 +2110,7 @@ systemd?
\item Найдите для них более подходящее место. Например, в случае с \item Найдите для них более подходящее место. Например, в случае с
некоторыми общесистемными настройками (такими, как локаль или некоторыми общесистемными настройками (такими, как локаль или
часовой пояс), мы надеемся аккуратно подтолкнуть дистрибутивы в часовой пояс), мы надеемся аккуратно подтолкнуть дистрибутивы в
правильно направлении (см. предыдущую главу). правильном направлении (см. предыдущую главу).
\item Добавьте их поддержку в штатную систему настройки демона через \item Добавьте их поддержку в штатную систему настройки демона через
собственные файлы конфигурации. К счастью, большинство служб, собственные файлы конфигурации. К счастью, большинство служб,
работающих в Linux, являются свободным программным обеспечением, работающих в Linux, являются свободным программным обеспечением,
@@ -2116,8 +2121,8 @@ systemd?
время: необходимо обеспечить совместимость при обновлении. Тем не~менее, как время: необходимо обеспечить совместимость при обновлении. Тем не~менее, как
минимум в новых пакетах, от таких файлов лучше отказаться. минимум в новых пакетах, от таких файлов лучше отказаться.
Если требование совместимости критично, вы можете задействовать эти В том случае, если требование совместимости критично, вы можете задействовать
конфигурационные файлы даже в том случае, если настраиваете службы через эти конфигурационные файлы даже в том случае, если настраиваете службы через
штатные unit-файлы systemd. Если ваш файл из +sysconfig+ содержит лишь штатные unit-файлы systemd. Если ваш файл из +sysconfig+ содержит лишь
определения переменных, можно воспользоваться опцией определения переменных, можно воспользоваться опцией
+EnvironmentFile=-/etc/sysconfig/foobar+ (подробнее об этой опции см. +EnvironmentFile=-/etc/sysconfig/foobar+ (подробнее об этой опции см.
@@ -2282,11 +2287,10 @@ systemd и заложен предварительный поиск файла
одноименному устройству). В то время как +%I+ удобно использовать в командной одноименному устройству). В то время как +%I+ удобно использовать в командной
строке (+ExecStart+) и для формирования читабельных строк описания. Рассмотрим строке (+ExecStart+) и для формирования читабельных строк описания. Рассмотрим
работу этих принципов на примере нашего юнит-файла\footnote{Прим. перев.: как работу этих принципов на примере нашего юнит-файла\footnote{Прим. перев.: как
видно из нижеприведенного примера, в командной строке +systemctl+ необходимо видно из нижеприведенного примера, в командной строке +systemctl+ используется
указывать экранированное имя юнита, что создает определенные трудности даже при экранированное имя юнита, что создает определенные трудности даже при
наличии в оболочке <<умного>> автодополнения. Однако, на момент написания этих наличии в оболочке <<умного>> автодополнения. Однако, начиная с systemd v186,
строк, в TODO проекта содержится пункт о добавлении в systemctl поддержки при работе с +systemctl+ можно указывать неэкранированные имена юнитов.}:
неэкранированных имен юнитов.}:
\begin{landscape} \begin{landscape}
\begin{Verbatim}[fontsize=\small,commandchars=|\{\}] \begin{Verbatim}[fontsize=\small,commandchars=|\{\}]
# systemctl start 'serial-getty@serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0.service' # systemctl start 'serial-getty@serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0.service'
@@ -2446,7 +2450,7 @@ service ssh {
Подобный подход был некогда весьма популярен в Unix, но сейчас он уже постепенно Подобный подход был некогда весьма популярен в Unix, но сейчас он уже постепенно
выходит из моды, и поэтому в современных версиях xinetd поддерживается возможность выходит из моды, и поэтому в современных версиях xinetd поддерживается возможность
явного указания номера порта. Одна из наиболее интересных настроек названа явного указания номера порта. Одна из наиболее интересных настроек названа
не~очень очевидно~--- +nowait+ (+wait=no+). Она определяет, будет ли служба не~вполне очевидно~--- +nowait+ (+wait=no+). Она определяет, будет ли служба
работать по второй (+wait+) или третьей (+nowait+) схеме. И наконец, ключ +-i+ работать по второй (+wait+) или третьей (+nowait+) схеме. И наконец, ключ +-i+
активирует inetd-режим в SSH-сервере (без этого ключа он работает в независимом активирует inetd-режим в SSH-сервере (без этого ключа он работает в независимом
режиме). режиме).
@@ -2568,7 +2572,7 @@ sshd.socket loaded active listening SSH So
В завершение нашей дискуссии, сравним возможности xinetd и systemd, и выясним, В завершение нашей дискуссии, сравним возможности xinetd и systemd, и выясним,
может ли systemd полностью заменить xinetd, или нет. Вкратце: systemd может ли systemd полностью заменить xinetd, или нет. Вкратце: systemd
поддерживает далеко не~все возможности xinetd и поэтому отнюдь не~является его поддерживает далеко не~все возможности xinetd и поэтому отнюдь не~является его
полноценной заменой на все случаи жизни. В частности, если вы загляните в полноценной заменой на все случаи жизни. В частности, если вы заглянете в
\href{http://linux.die.net/man/5/xinetd.conf}{список параметров конфигурации} \href{http://linux.die.net/man/5/xinetd.conf}{список параметров конфигурации}
xinetd, вы заметите, что далеко не~все эти опции доступны в systemd. Например, в xinetd, вы заметите, что далеко не~все эти опции доступны в systemd. Например, в
systemd нет и никогда не~будет встроенных служб +echo+, +time+, +daytime+, systemd нет и никогда не~будет встроенных служб +echo+, +time+, +daytime+,
@@ -2596,8 +2600,8 @@ Linux подсистема ipset гораздо лучше подходит дл
ценителей устаревших технологий systemd предлагает поддержку tcpwrap. С другой ценителей устаревших технологий systemd предлагает поддержку tcpwrap. С другой
стороны, systemd тоже предоставляет ряд возможностей, отсутствующих в xinetd, в стороны, systemd тоже предоставляет ряд возможностей, отсутствующих в xinetd, в
частности, индивидуальный контроль над каждым экземпляром службы (см. выше), и частности, индивидуальный контроль над каждым экземпляром службы (см. выше), и
куда более полный внушительный
\href{http://0pointer.de/public/systemd-man/systemd.exec.html}{список настроек} \href{http://0pointer.de/public/systemd-man/systemd.exec.html}{набор настроек}
для контроля окружения, в котором запускаются экземпляры. Я надеюсь, что для контроля окружения, в котором запускаются экземпляры. Я надеюсь, что
возможностей systemd должно быть достаточно для решения большинства задач, а в возможностей systemd должно быть достаточно для решения большинства задач, а в
тех редких случаях, когда вам потребуются специфические опции xinetd~--- ничто тех редких случаях, когда вам потребуются специфические опции xinetd~--- ничто
@@ -2614,32 +2618,33 @@ systemd. Но, конечно, будет лучше, если этим займ
\section{К вопросу о безопасности} \section{К вопросу о безопасности}
Одно из важнейших достоинств Unix-систем~--- концепция разделения привилегий Одно из важнейших достоинств Unix-систем~--- концепция разделения привилегий
между различными компонентами ОС. Многие системные службы работают от имени между различными компонентами ОС. В частности, службы обычно работают от имени
специальных системных пользователей, имеющих ограниченные полномочия, что специальных системных пользователей, имеющих ограниченные полномочия, что
позволяет уменьшить ущерб для системы в случае взлома этих служб. позволяет уменьшить ущерб для системы в случае взлома этих служб.
Однако, такой подход предоставляет лишь самую минимальную защиту, так как Однако, такой подход предоставляет лишь самую минимальную защиту, так как
системные службы, хотя уже и не~имеют полномочий администратора (root), все системные службы, хотя уже и не~получают полномочий администратора (root), все
равно имеют практически те же права, что и обычные пользователи. Чтобы равно имеют практически те же права, что и обычные пользователи. Чтобы
обеспечить более эффективную защиту, нужно поставить более жесткие ограничения, обеспечить более эффективную защиту, нужно поставить более жесткие ограничения,
отняв у служб ряд возможностей, разрешенных для обычного пользователя. отняв у служб некоторые привилегии, присущие обычным пользователям.
В частности, такая возможность предоставляется системами мандатного контроля Такая возможность предоставляется системами мандатного контроля доступа (далее
доступа (далее MAC, от Mandatory Access Control), например, SELinux. Если вам MAC, от Mandatory Access Control), например, SELinux. Если вам нужно обеспечить
нужно обеспечить высокий уровень безопасности на своем сервере~--- SELinux будет высокий уровень безопасности на своем сервере, то вам определенно стоит обратить
вам неплохим подспорьем. Что касается systemd, то он предоставляет разработчикам свое внимание на SELinux. Что же касается systemd, то он предоставляет
и администраторам целый арсенал возможностей по ограничению локальных служб, и разработчикам и администраторам целый арсенал возможностей по ограничению
эти механизмы работают независимо от систем MAC. Таким образом, вне локальных служб, и эти механизмы работают независимо от систем MAC. Таким
зависимости от того, смогли ли вы разобраться с SELinux~--- у вас появляется ряд образом, вне зависимости от того, смогли ли вы разобраться с SELinux~--- у вас
дополнительных возможностей по усилению мер безопасности. появляется еще несколько инструментов, позволяющих повысить уровень
безопасности.
В этой главе мы рассмотрим несколько таких опций, предоставляемых systemd, и В этой главе мы рассмотрим несколько таких опций, предоставляемых systemd, и
обсудим вопросы их практического применения. Реализация этих опций основана на обсудим вопросы их практического применения. Реализация этих опций основана на
использовании ряда уникальных технологий безопасности, реализованных в ядре использовании ряда уникальных технологий безопасности, интегрированных в ядро
Linux уже очень давно, но при этом практически неизвестных для большинства Linux уже очень давно, но при этом практически неизвестных для большинства
разработчиков. Мы постарались сделать соответствующие опции systemd максимально разработчиков. Мы постарались сделать соответствующие опции systemd максимально
простыми в использовании, чтобы заинтересовать администраторов и апстримных простыми в использовании, чтобы заинтересовать администраторов и апстримных
разработчиков: разработчиков. Вот краткий перечень наиболее интересных возможностей:
\begin{itemize} \begin{itemize}
\item Изолирование служб от сети \item Изолирование служб от сети
\item Предоставление службам независимых каталогов +/tmp+ \item Предоставление службам независимых каталогов +/tmp+
@@ -2659,14 +2664,14 @@ SELinux или любой другой реализации MAC.
Все эти опции не~так уж и обременительны, и поэтому их разумнее будет Все эти опции не~так уж и обременительны, и поэтому их разумнее будет
использовать даже в тех случаях, когда явная необходимость в них, казалось бы, использовать даже в тех случаях, когда явная необходимость в них, казалось бы,
отсутствует. Например: даже если вы полагаете, что ваша служба не~пишет в отсутствует. Например: даже если вы полагаете, что ваша служба никогда не~пишет
каталог +/tmp+, и поэтому использование +PrivateTmp=yes+ (см. ниже) вроде бы и в каталог +/tmp+, и поэтому использование +PrivateTmp=yes+ (см. ниже) вроде бы и
не~обязательно~--- лучше включить эту опцию, просто потому, что вы не~можете не~обязательно~--- лучше включить эту опцию, просто потому, что вы не~можете
знать наверняка, как будут вести себя используемые вами сторонние библиотеки (и знать наверняка, как будут вести себя используемые вами сторонние библиотеки (и
плагины для них). В частности, вы никогда не~узнаете, какие модули NSS могут плагины для них). В частности, вы никогда не~узнаете, какие модули NSS могут
быть включены в каждой конкретной системе, и пользуются ли они каталогом +/tmp+. быть включены в каждой конкретной системе, и пользуются ли они каталогом +/tmp+.
Мы надеемся, что эти опции окажутся полезными как для администраторов, Мы надеемся, что перечисленные опции окажутся полезными как для администраторов,
защищающих свои системы, так и для апстримных разработчиков, желающих сделать защищающих свои системы, так и для апстримных разработчиков, желающих сделать
свои службы безопасными <<из коробки>>. Мы настоятельно рекомендуем свои службы безопасными <<из коробки>>. Мы настоятельно рекомендуем
разработчикам использовать такие опции по умолчанию в апстримных разработчикам использовать такие опции по умолчанию в апстримных
@@ -2686,20 +2691,20 @@ PrivateNetwork=yes
\end{Verbatim} \end{Verbatim}
Добавление этой строчки обеспечивает полную изоляцию от сети всех процессов Добавление этой строчки обеспечивает полную изоляцию от сети всех процессов
данной службы. Они будут видеть лишь интерфейс обратной петли (+lo+), причем данной службы. Они будут видеть лишь интерфейс обратной петли (+lo+), причем
полностью изолированный от обратной петли, используемой в основной системе. полностью изолированный от обратной петли основной системы. Чрезвычайно
Чрезвычайно эффективная защита против сетевых атак. эффективная защита против сетевых атак.
\begin{caveat} \begin{caveat}
Некоторым службам сеть необходима для нормальной Некоторым службам сеть необходима для нормальной работы. Разумеется, никто и
работы. Разумеется, никто и не~говорит о том, чтобы применять не~говорит о том, чтобы применять +PrivateNetwork=yes+ к сетевым службам, таким,
+PrivateNetwork=yes+ к сетевым службам, таким, как Apache. Однако даже те как Apache. Однако даже те службы, которые не~ориентированы на сетевое
службы, которые не~ориентированы на сетевое взаимодействие, могут нуждаться в взаимодействие, могут нуждаться в сети для нормального функционирования, и порой
сети для нормальной работы (порой эта потребность не~вполне очевидна). Например, эта потребность не~вполне очевидна. Например, если ваша система хранит
если ваша система хранит пользовательские учетные записи в базе LDAP, для учетные записи пользователей в базе LDAP, для выполнения системных вызовов
выполнения системных вызовов наподобие +getpwnam()+ может потребоваться наподобие +getpwnam()+ может потребоваться обращение к сети. Впрочем, даже в
обращение к сети. Впрочем, даже в такой ситуации, как правило, можно такой ситуации, как правило, можно использовать +PrivateNetwork=yes+, за
использовать +PrivateNetwork=yes+, за исключением случаев, когда службе может исключением случаев, когда службе может потребоваться информация о пользователях
потребоваться информация о пользователях с ID~$\geq1000$. с UID~$\geq1000$.
\end{caveat} \end{caveat}
Если вас интересуют технические подробности: эта возможность реализована с Если вас интересуют технические подробности: эта возможность реализована с
@@ -2722,9 +2727,9 @@ PrivateTmp=yes
в Unix-системах каталог +/tmp+ является общедоступным для всех локальных служб и в Unix-системах каталог +/tmp+ является общедоступным для всех локальных служб и
пользователей. За все эти годы, он стал источником огромного количества проблем пользователей. За все эти годы, он стал источником огромного количества проблем
безопасности. Чаще всего встречаются атаки с использованием символьных ссылок безопасности. Чаще всего встречаются атаки с использованием символьных ссылок
(symlink attacks) и атаки на отказ в обслуживании (DoS attacks). Изолирование (symlink attacks) и атаки на отказ в обслуживании (DoS attacks). Использование
этого каталога для каждой службы делает подобные уязвимости практически независимой версии данного каталога для каждой службы делает подобные уязвимости
бесполезными. практически бесполезными.
Для релиза Fedora~17 Для релиза Fedora~17
\href{https://fedoraproject.org/wiki/Features/ServicesPrivateTmp}{утверждена} \href{https://fedoraproject.org/wiki/Features/ServicesPrivateTmp}{утверждена}
@@ -2735,22 +2740,22 @@ PrivateTmp=yes
Некоторые службы используют +/tmp+ не~по назначению, Некоторые службы используют +/tmp+ не~по назначению,
помещая туда сокеты IPC и другие подобные элементы, что само по себе уже помещая туда сокеты IPC и другие подобные элементы, что само по себе уже
является уязвимостью (хотя бы потому, что используемые при передаче информации является уязвимостью (хотя бы потому, что используемые при передаче информации
файлы и каталоги должны иметь предсказуемые имена, что делает ваш код уязвимым к файлы и каталоги должны иметь предсказуемые имена, что делает подобные службы
атакам через символьные ссылки и атакам на отказ в обслуживании. Такие объекты уязвимыми к атакам через символьные ссылки и атакам на отказ в обслуживании).
лучше помещать в каталог +/run+, так как в нем присутствует строгое разделение Подобные объекты лучше помещать в каталог +/run+, так как в нем присутствует
доступа. В качестве примера такого некорректного использования +/tmp+ можно строгое разделение доступа. В качестве примера такого некорректного
привести X11, размещающий там свои коммуникационные сокеты (впрочем, в данном использования +/tmp+ можно привести X11, размещающий там свои коммуникационные
конкретном случае некоторые меры безопасности все же присутствуют: сокеты сокеты (впрочем, в данном конкретном случае некоторые меры безопасности все же
размещаются в защищенном подкаталоге, который создается на ранних стадиях присутствуют: сокеты размещаются в защищенном подкаталоге, который создается на
загрузки). Разумеется, для служб, использующих +/tmp+ в целях коммуникации, ранних стадиях загрузки). Разумеется, для служб, использующих +/tmp+ в целях
включение опции +PrivateTmp=yes+ недопустимо. К счастью, таких служб коммуникации, включение опции +PrivateTmp=yes+ недопустимо. К счастью, таких
сейчас уже не~так уж и много. служб сейчас уже не~так уж и много.
\end{caveat} \end{caveat}
С технической точки зрения, эта опция построена на использовании технологии Эта опция использует технологию пространств имен файловых систем (filesystem
пространств имен файловых систем (filesystem namespaces), реализованной в Linux. namespaces), реализованную в Linux. При включении данной опции, для службы
При включении данной опции, для службы создается новое пространство имен, создается новое пространство имен, отличающееся от иерархии каталогов основной
отличающееся от иерархии каталогов основной системы только каталогом +/tmp+. системы только каталогом +/tmp+.
\subsection{Ограничение доступа служб к отдельным каталогам} \subsection{Ограничение доступа служб к отдельным каталогам}
@@ -2771,11 +2776,11 @@ ReadOnlyDirectories=/var
+/var+. +/var+.
\begin{caveat} \begin{caveat}
К сожалений, в настоящее время опция +ReadOnlyDirectories=+ не~применяется К сожалению, в настоящее время опция +ReadOnlyDirectories=+ не~применяется
рекурсивно к точкам монтирования, расположенным в поддереве указанного каталога рекурсивно к точкам монтирования, расположенным в поддереве указанного каталога
(т.е. смонтированные внутри +/var+ и его подкаталогов файловые системы (т.е. файловые системы, смонтированные в подкаталогах +/var+, по-прежнему
по-прежнему останутся доступными на запись, если, конечно, не~перечислить их останутся доступными на запись, если, конечно, не~перечислить их все поименно).
всех поименно). Мы собираемся исправить это в ближайшее время. Мы собираемся исправить это в ближайшее время.
\end{caveat} \end{caveat}
Механизм работы этой опции тоже реализован с использованием пространств имен Механизм работы этой опции тоже реализован с использованием пространств имен
@@ -2797,15 +2802,16 @@ CapabilityBoundingSet=CAP_CHOWN CAP_KILL
использованием suid-бинарников, будут пресекаться. Список возможных полномочий использованием suid-бинарников, будут пресекаться. Список возможных полномочий
приведен на странице документации приведен на странице документации
\href{http://linux.die.net/man/7/capabilities}{capabilities(7)}. К сожалению, \href{http://linux.die.net/man/7/capabilities}{capabilities(7)}. К сожалению,
некоторые из этих полномочий являются слишком общими (разрешают очень многое), некоторые из них являются слишком общими (разрешают очень многое), например,
например, +CAP_SYS_ADMIN+, однако они все же остаются неплохой альтернативой +CAP_SYS_ADMIN+, однако выборочное делегирование полномочий все же является
запуску службы с полными административными (рутовыми) привилегиями. неплохой альтернативой запуску службы с полными административными (рутовыми)
привилегиями.
Как правило, определение списка полномочий, необходимых для работы конкретной Как правило, определение списка полномочий, необходимых для работы конкретной
службы, является довольно трудоемким процессом, требующим ряда проверок. Чтобы службы, является довольно трудоемким процессом, требующим ряда проверок. Чтобы
немного упростить эту задачу, мы добавили возможность создания <<черного немного упростить эту задачу, мы добавили возможность создания <<черного
списка>> привилегий, как альтернативы описанному выше механизму <<белого списка>> привилегий, как альтернативы описанному выше механизму <<белого
списка>>. Вместо того, чтобы указывать, какие привилегии нужно оставить, вы списка>>. Вместо того, чтобы указывать, какие привилегии можно оставить, вы
можете перечислить, какие из них оставлять точно нельзя. Например: привилегия можете перечислить, какие из них оставлять точно нельзя. Например: привилегия
+CAP_SYS_PTRACE+, предназначенная для отладчиков, дает очень широкие полномочия +CAP_SYS_PTRACE+, предназначенная для отладчиков, дает очень широкие полномочия
в отношении всех процессов системы. Очевидно, что такие службы, как Apache, в отношении всех процессов системы. Очевидно, что такие службы, как Apache,
@@ -2826,12 +2832,12 @@ CapabilityBoundingSet=~CAP_SYS_PTRACE
Некоторые службы, при отсутствии определенных привилегий, могут вести себя Некоторые службы, при отсутствии определенных привилегий, могут вести себя
некорректно. Как уже говорилось выше, формирование списка необходимых полномочий некорректно. Как уже говорилось выше, формирование списка необходимых полномочий
для каждой конкретной службы может оказаться довольно трудной задачей, и лучше для каждой конкретной службы может оказаться довольно трудной задачей, и лучше
всего будет обратиться с соответствующим вопросом к разработчикам службы. всего будет обратиться с соответствующим запросом к разработчикам службы.
\end{caveat} \end{caveat}
\begin{caveat}[~2] \begin{caveat}[~2]
\href{https://forums.grsecurity.net/viewtopic.php?f=7&t=2522}{Привилегии~--- это \href{https://forums.grsecurity.net/viewtopic.php?f=7&t=2522}{Привилегии~---
не~лекарство от всех бед.} Чтобы они работали действительно эффективно, отнюдь не~лекарство от всех бед.} Чтобы они работали действительно эффективно,
возможно, придется дополнить их другими методиками защиты. возможно, придется дополнить их другими методиками защиты.
\end{caveat} \end{caveat}
@@ -2839,16 +2845,16 @@ CapabilityBoundingSet=~CAP_SYS_PTRACE
воспользоваться программой +pscap+ из комплекта +libcap-ng-utils+. воспользоваться программой +pscap+ из комплекта +libcap-ng-utils+.
Применение опции +CapabilityBoundingSet=+ является простой, прозрачной и удобной Применение опции +CapabilityBoundingSet=+ является простой, прозрачной и удобной
альтернативой введению аналогично механизма путем модификации исходного кода альтернативой введению аналогичных ограничений через модификацию исходного кода
всех системных служб. всех системных служб.
\subsection{Запрет форка, ограничение на создание файлов} \subsection{Запрет форка, ограничение на создание файлов}
Некоторые ограничения безопасности можно применить, используя механизм Некоторые меры безопасности можно ввести при помощи механизма ограничения
ограничения ресурсов. Прежде всего, как ясно из его названия, этот механизм ресурсов. Как следует из его названия, этот механизм предназначен прежде всего
предназначен для контроля использования ресурса, а не~для контроля доступа. для контроля использования ресурсов, а не~для контроля доступа. Однако, две его
Однако, две его настройки могут быть использованы для запрета определенных настройки могут быть использованы для запрета определенных действий:
действий: +RLIMIT_NPROC+ может запретить службе форкаться (запускать с помощью +RLIMIT_NPROC+ можно запретить службе форкаться (запускать
дополнительные процессы), а +RLIMIT_FSIZE+ позволяет блокировать запись в файлы дополнительные процессы), а +RLIMIT_FSIZE+ позволяет блокировать запись в файлы
ненулевого размера: ненулевого размера:
\begin{Verbatim} \begin{Verbatim}
@@ -2861,7 +2867,7 @@ LimitFSIZE=0
\end{Verbatim} \end{Verbatim}
Обратите внимание, что эти ограничения будут эффективно работать только в том Обратите внимание, что эти ограничения будут эффективно работать только в том
случае, если служба будет работать от имени простого пользователя (не~root) и случае, если служба будет работать от имени простого пользователя (не~root) и
не~будет иметь привилегии +CAP_SYS_RESOURCE+ (блокирование этой привилегии можно без привилегии +CAP_SYS_RESOURCE+ (блокирование этой привилегии можно
обеспечить, например, описанной выше опцией +CapabilityBoundingSet=+). В обеспечить, например, описанной выше опцией +CapabilityBoundingSet=+). В
противном случае, ничто не~мешает процессу поменять соответствующие ограничения. противном случае, ничто не~мешает процессу поменять соответствующие ограничения.
@@ -2878,8 +2884,8 @@ LimitFSIZE=0
\subsection{Контроль доступа служб к файлам устройств} \subsection{Контроль доступа служб к файлам устройств}
Файлы устройств предоставляют приложениям возможность доступа к ядру и Файлы устройств предоставляют приложениям интерфейс для доступа к ядру и
драйверам. Причем драйверы, как правило менее тщательно тестируются и не~так драйверам. Причем драйверы, как правило, менее тщательно тестируются и не~так
аккуратно проверяются на предмет наличия уязвимостей, по сравнению с основными аккуратно проверяются на предмет наличия уязвимостей, по сравнению с основными
компонентами ядра. Именно поэтому драйверы часто становятся объектами атаки компонентами ядра. Именно поэтому драйверы часто становятся объектами атаки
злоумышленников. systemd позволяет контролировать доступ к устройствам злоумышленников. systemd позволяет контролировать доступ к устройствам
@@ -2892,35 +2898,306 @@ DeviceAllow=/dev/null rw
... ...
\end{Verbatim} \end{Verbatim}
Приведенная конфигурация разрешит службе доступ только к файлу +/dev/null+, Приведенная конфигурация разрешит службе доступ только к файлу +/dev/null+,
полностью запретив доступ к остальным файлам устройств. запретив доступ ко всем остальным файлам устройств.
Реализация данной опции построена на использование cgroups-контроллера Реализация данной опции построена на использовании cgroups-контроллера
+devices+. +devices+.
\subsection{Прочие настройки} \subsection{Прочие настройки}
Помимо приведенных выше, простых и удобных в использовании опций, существует и Помимо приведенных выше, простых и удобных в использовании опций, существует и
ряд других других настроек, позволяющих повысить уровень безопасности. Но ряд других других настроек, позволяющих повысить уровень безопасности. Но
использование этих настроек, как правило, уже требует определенных изменений в для их использования, как правило, уже требуются определенные изменения в
исходном коде службы, и поэтому такие настройки представляют интерес прежде исходном коде службы, и поэтому такие настройки представляют интерес прежде
всего для апстримных разработчиков. В частности, сюда относится опция всего для апстримных разработчиков. В частности, сюда относится опция
+RootDirectory=+ (позволяющая запустить службу +chroot()+-окружении), а также +RootDirectory=+ (позволяющая запустить службу +chroot()+-окружении), а также
параметры +User=+ и +Group=+, определяющие пользователя и группу, от имени параметры +User=+ и +Group=+, определяющие пользователя и группу, от имени
которых работает служба. Использование этих опций значительно упрощает написание которых работает служба. Использование этих опций значительно упрощает
демонов, так как работа по понижению привилегий ложится на плечи systemd. написание демонов, так как работа по понижению привилегий ложится на плечи
systemd.
Возможно, у вас возникнет вопрос, почему эти опции не~включены по умолчанию. Возможно, у вас возникнет вопрос, почему описанные выше опции не~включены по
Отвечаем: чтобы не~нарушать совместимость. Многие из них несколько отступают от умолчанию. Отвечаем: чтобы не~нарушать совместимость. Многие из них несколько
традиций, принятых в Unix. Например, исторически сложилось, так что +/tmp+ отступают от традиций, принятых в Unix. Например, исторически сложилось, так что
является общим для всех процессов и пользователей. Существуют программы, +/tmp+ является общим для всех процессов и пользователей. Существуют программы,
использующие этот каталог для IPC, и включение по умолчанию режима изоляции использующие этот каталог для IPC, и включение по умолчанию режима изоляции для
для +/tmp+ нарушит работу таких программ. +/tmp+ нарушит работу таких программ.
И несколько слов в заключение. Если вы занимаетесь сопровождением unit-файлов И несколько слов в заключение. Если вы занимаетесь сопровождением unit-файлов
в апстримном проекте или в дистрибутиве, пожалуйста, подумайте о том, чтобы в апстримном проекте или в дистрибутиве, пожалуйста, подумайте о том, чтобы
воспользоваться приведенными выше настройками. Если сопровождаемая вами служба воспользоваться приведенными выше настройками. Если сопровождаемая вами служба
станет более безопасной <<из коробки>>, от этого выиграют не~только ваши станет более защищенной в конфигурации по умолчанию (<<из коробки>>), от этого
пользователи, но и все мы, потому что Интернет станет чуть более безопасным. выиграют не~только ваши пользователи, но и все мы, потому что Интернет станет
чуть более безопасным.
\section{Отчет о состоянии службы и ее журнал}
При работе с системами, использующими systemd, одной из наиболее важных и часто
используемых команд является +systemctl status+. Она выводит отчет о состоянии
службы (или другого юнита). В таком отчете приводится статус службы (работает
она или нет), список ее процессов и другая полезная информация.
В Fedora~17 мы ввели
\href{http://0pointer.de/blog/projects/the-journal.html}{Journal}, новую
реализацию системного журнала, обеспечивающую структурированное, индексированное
и надежное журналирование, при сохранении совместимости с классическими
реализациями syslog. Собственно, мы начали работу над~Journal только потому, что
хотели добавить одну, казалось бы, простую, возможность: включить в вывод
+systemctl status+ последние 10 сообщений, поступивших от службы в системный
журнал. Но на практике оказалось, что в рамках классических механизмов syslog,
реализация этой возможности чрезвычайно сложна и малоэффективна. С другой
стороны, сообщения службы в системный журнал несут очень важную информацию о ее
состоянии, и такая возможность действительно была бы очень полезной, особенно
при диагностике нештатных ситуаций.
Итак, мы интегрировали Journal в systemd, и научили +systemctl+ работать с ним.
Результат выглядит примерно так:
\begin{Verbatim}[fontsize=\small,commandchars=\\\{\}]
$ systemctl status avahi-daemon.service
avahi-daemon.service - Avahi mDNS/DNS-SD Stack
Loaded: loaded (/usr/lib/systemd/system/avahi-daemon.service; enabled)
Active: active (running) since Fri, 18 May 2012 12:27:37 +0200; 14s ago
Main PID: 8216 (avahi-daemon)
Status: "avahi-daemon 0.6.30 starting up."
CGroup: name=systemd:/system/avahi-daemon.service
\mytextSFii{} 8216 avahi-daemon: running [omega.local]
\mytextSFii{} 8217 avahi-daemon: chroot helper
May 18 12:27:37 omega avahi-daemon[8216]: Joining mDNS multicast group on interface eth1.IPv4 with address 172.31.0.52.
May 18 12:27:37 omega avahi-daemon[8216]: New relevant interface eth1.IPv4 for mDNS.
May 18 12:27:37 omega avahi-daemon[8216]: Network interface enumeration completed.
May 18 12:27:37 omega avahi-daemon[8216]: Registering new address record for 192.168.122.1 on virbr0.IPv4.
May 18 12:27:37 omega avahi-daemon[8216]: Registering new address record for fd00::e269:95ff:fe87:e282 on eth1.*.
May 18 12:27:37 omega avahi-daemon[8216]: Registering new address record for 172.31.0.52 on eth1.IPv4.
May 18 12:27:37 omega avahi-daemon[8216]: Registering HINFO record with values 'X86_64'/'LINUX'.
May 18 12:27:38 omega avahi-daemon[8216]: Server startup complete. Host name is omega.local. Local service cookie is 3555095952.
May 18 12:27:38 omega avahi-daemon[8216]: Service "omega" (/services/ssh.service) successfully established.
May 18 12:27:38 omega avahi-daemon[8216]: Service "omega" (/services/sftp-ssh.service) successfully established.
\end{Verbatim}
Очевидно, это отчет о состоянии всеми любимого демона mDNS/DNS-SD, причем после
списка процессов, как мы и обещали, приведены сообщения этого демона в системный
журнал. Миссия выполнена!
Команда +systemctl status+ поддерживает ряд опций, позволяющих настроить вывод
информации в соответствии с вашими пожеланиями. Отметим две наиболее интересные
из них: ключ +-f+ позволяет в реальном времени отслеживать обновление сведений
(по аналогии с +tail -f+), а ключ +-n+ задает количество выводимых журнальных
записей (как нетрудно догадаться, по аналогии с +tail -n+).
Журнальные записи собираются из трех различных источников. Во-первых, это
сообщения службы в системный журнал, отправленные через функцию libc
+syslog()+. Во-вторых, это сообщения, отправленные через штатный API системы
Journal. И наконец, это весь текст, выводимый демоном в STDOUT и STDERR. Проще
говоря, все, что демон считает нужным сказать администратору, собирается,
упорядочивается и отображается в одинаковом формате.
Добавленная нами возможность, при всей своей простоте, может оказаться
чрезвычайно полезной практически любому администратору. По-хорошему, ее стоило
реализовать еще 15 лет назад.
\section{Самодокументированный процесс загрузки}
Нам часто приходится слышать жалобы, что процесс загрузки при использовании
systemd очень сложен для понимания. Не~могу с этим согласиться. Более того, я
берусь даже утверждать обратное: по сравнению с тем, что мы имели раньше (когда
для того, чтобы разобраться в загрузке, нужно было иметь хорошие навыки
программирования на языке Bourne Shell\footnote{Чья привлекательность очень
коварна и обманчива.}), процесс загрузки стал более простым и прозрачным. Но
определенная доля истины в этом критическом замечании все же есть: даже опытному
Unix-администратору при переходе на systemd нужно изучить некоторые новые для
себя вещи. Мы, разработчики systemd, обязаны максимально упростить такое
обучение. Решая поставленную задачу, мы подготовили для вас кое-какие приятные
сюрпризы, и предоставили хорошую документацию даже там, где это казалось
невозможным.
Уже сейчас systemd располагает довольно обширной документацией, включая
\href{http://www.freedesktop.org/software/systemd/man/}{страницы руководства}
(на данный момент, их около сотни),
\href{http://www.freedesktop.org/wiki/Software/systemd}{wiki-сайт проекта}, а
также ряд статей в моем блоге. Тем не~менее, большое количество документации еще
не~гарантирует простоты понимания. Огромные груды руководств выглядят пугающе, и
неподготовленный читатель не~может разобраться, с какого места ему начинать
чтение, если его интересует просто общая концепция.
Чтобы решить данную проблему, мы добавили в systemd небольшую, но очень изящную
возможность: самодокументированный\footnote{Прим. перев.: В оригинале
использован термин <<self-explanatory>>, который также можно перевести как
<<само-объясняющий>>, <<самоочевидный>>.} процесс загрузки. Что мы под этим
подразумеваем? То, что для каждого элемента процесса загрузки теперь имеется
документация, прозрачно привязанная к этому элементу, так что ее поиск
не~представляет трудности.
Иными словами, все штатные юниты systemd (которые, собственно, и формируют
процесс загрузки, вызывая соответствующие программы) включают ссылки на страницы
документации, описывающие назначение юнита/программы, используемые ими
конфигурационные файлы и т.д. Если пользователь хочет узнать, для чего
предназначен какой-либо юнит, какова его роль в процессе загрузки и как его
можно настроить, может получить ссылки на соответствующую документацию, просто
воспользовавшись давно известной командой +systemctl status+. Возьмем для
примера +systemd-logind.service+:
\defhref{\logind}{http://www.freedesktop.org/software/systemd/man/systemd-logind.service.html}%
{man:systemd-logind.service(7)}
\begin{Verbatim}[fontsize=\small,commandchars=\\\{\}]
$ systemctl status systemd-logind.service
systemd-logind.service - Login Service
Loaded: loaded (/usr/lib/systemd/system/systemd-logind.service; static)
Active: active (running) since Mon, 25 Jun 2012 22:39:24 +0200; 1 day and 18h ago
Docs: \logind{}
\href{http://www.freedesktop.org/software/systemd/man/logind.conf.html}{man:logind.conf(5)}
\url{http://www.freedesktop.org/wiki/Software/systemd/multiseat}
Main PID: 562 (systemd-logind)
CGroup: name=systemd:/system/systemd-logind.service
\mytextSFii{} 562 /usr/lib/systemd/systemd-logind
Jun 25 22:39:24 epsilon systemd-logind[562]: Watching system buttons on /dev/input/event2 (Power Button)
Jun 25 22:39:24 epsilon systemd-logind[562]: Watching system buttons on /dev/input/event6 (Video Bus)
Jun 25 22:39:24 epsilon systemd-logind[562]: Watching system buttons on /dev/input/event0 (Lid Switch)
Jun 25 22:39:24 epsilon systemd-logind[562]: Watching system buttons on /dev/input/event1 (Sleep Button)
Jun 25 22:39:24 epsilon systemd-logind[562]: Watching system buttons on /dev/input/event7 (ThinkPad Extra Buttons)
Jun 25 22:39:25 epsilon systemd-logind[562]: New session 1 of user gdm.
Jun 25 22:39:25 epsilon systemd-logind[562]: Linked /tmp/.X11-unix/X0 to /run/user/42/X11-display.
Jun 25 22:39:32 epsilon systemd-logind[562]: New session 2 of user lennart.
Jun 25 22:39:32 epsilon systemd-logind[562]: Linked /tmp/.X11-unix/X0 to /run/user/500/X11-display.
Jun 25 22:39:54 epsilon systemd-logind[562]: Removed session 1.
\end{Verbatim}
На первый взгляд, в выводе этой команды почти ничего не~изменилось. Но если вы
вглядитесь повнимательнее, то заметите новое поле +Docs+, в котором приведены
ссылки на документацию по данной службе. В нашем случае случае это два URI,
ссылающихся на man-страницы, и один URL, указывающий на веб-страницу.
man-страницы описывают соответственно предназначение службы и ее настройки, а
веб-страница~--- базовые концепции, которые реализуются этой службой.
Тем, кто использует современные графические эмуляторы терминала, чтобы открыть
соответствующую страницу документации, достаточно щелкнуть мышью по
URI\footnote{Для нормальной работы данной функции, в эмуляторе терминала должен
быть исправлена \href{https://bugzilla.gnome.org/show_bug.cgi?id=676452}{эта
ошибка}, а в программе просмотра страниц помощи~---
\href{https://bugzilla.gnome.org/show_bug.cgi?id=676482}{вот эта}.}. Иными
словами, доступ к документации компонентов загрузки становится предельно
простым: достаточно вызвать +systemctl status+, после чего щелкнуть по
полученным ссылкам.
Если же вы используете не~графический эмулятор терминала (где можно просто
щелкнуть по URI), а настоящий терминал, наличие URI где-то в середине вывода
+systemctl status+ вряд ли покажется вам удобным. Чтобы упростить обращение к
соответствующим страницам документации без использования мыши и
копирования/вставки, мы ввели новую команду
\begin{Verbatim}
systemctl help systemd-logind.service
\end{Verbatim}
которая просто откроет в вашем терминале соответствующие man-страницы.
URI, ссылающиеся на документацию, формируются в соответствии со страницей
руководства
\href{https://www.kernel.org/doc/man-pages/online/pages/man7/url.7.html}{uri(7)}.
Поддерживаются схемы +http+/+https+ (URL для веб-страниц) и +man+/+info+
(локальные страницы руководства).
Разумеется, добавленная нами возможность не~обеспечивает полной очевидности
абсолютно всего, хотя бы потому, что пользователь должен как минимум знать про
команду +systemctl status+ (а также вообще про программу +systemctl+ и про то,
что такое юнит). Но при наличии этих базовых знаний, пользователю уже
не~составит труда получить информацию по интересующим его вопросам.
Мы надеемся, что добавленный нами механизм для связи работающего кода и
соответствующей документации станет значительным шагом к полностью прозрачному и
предельно простому для понимания процессу загрузки.
Описанная функциональность частично присутствует в Fedora~17, а в полном
объеме она будет представлена в Fedora~18.
В завершение, стоит отметить, что использованная нами идея не~является такой уж
новой: в SMF, системе инициализации Solaris, уже используется практика
добавления ссылок на документацию в описании службы. Однако, в Linux такой
подход является принципиально новым, и systemd сейчас является наиболее
документированной и прозрачной системой загрузки для данной платформы.
Если вы занимаетесь разработкой или сопровождением пакетов и создаете файл
конфигурации юнита, пожалуйста, включите в него ссылки на документацию. Это
очень просто: достаточно добавить в секции +[Unit]+ поле +Documentation=+ и
перечислить в нем соответствующие URI. Подробнее об этом поле см. на странице
руководства
\href{http://www.freedesktop.org/software/systemd/man/systemd.unit.html}{systemd.unit(5)}.
Чем больше будет документированных юнитов, тем проще станет работа системного
администратора. (В частности, я уже направил в FPC
\href{https://fedorahosted.org/fpc/ticket/192}{предложение} внести
соответствующие пожелания в нормативные документы, регулирующие подготовку
пакетов для Fedora.)
Да, кстати: если вас интересует общий обзор процесса загрузки systemd, то вам
стоит обратить внимание на
\href{http://www.freedesktop.org/software/systemd/man/bootup.html}{новую
страницу руководства}, где представлена псевгдорафическая потоковая диаграмма,
описывающая процесс загрузки и роль ключевых юнитов.
\section{Сторожевые таймеры}
Разрабатывая systemd, мы ориентируемся на три основных области его применения:
мобильные/встраиваемые устройства, настольные системы и промышленные серверы.
Мобильные и встраиваемые системы, как правило, располагают очень скромными
ресурсами и вынуждены очень экономно расходовать энергию. Настольные системы
куда менее ограничены по мощности но, тем не~менее, все же проигрывают в этом
плане промышленным серверам. Но, как ни~странно это прозвучит, существуют
возможности, востребованные в обоих крайних случаях (встраиваемые системы и
серверы), но не~очень актуальные в промежуточной ситуации (десктопы). В
частности, к ним относится поддержка
\href{http://ru.wikipedia.org/wiki/Watchdog}{сторожевых таймеров} (watchdogs),
как аппаратных, так и программных.
Во встраиваемых системах часто используются аппаратные сторожевые таймеры,
выполняющие сброс системы, когда программа перестает отвечать (точнее, перестает
периодически посылать таймеру сигнал <<все в порядке>>). Таким образом,
обеспечивается повышение надежности системы: что бы ни~случилось, система
обязательно попытается привести себя в рабочее состояние. На десктопах такая
функциональность практически не~востребована\footnote{Тем не~менее, сейчас
аппаратные сторожевые таймеры все чаще появляются и в настольных системах, так
как стоят они относительно дешево и доступны практически во всех современных
чипсетах.}. В то же время, она весьма актуальна для высокодоступных серверных
систем.
Начиная с версии 183, systemd полностью поддерживает аппаратные сторожевые
таймеры (доступные через интерфейс +/dev/watchdog+), а также обеспечивает
программный сторожевой контроль системных служб. В целом эта схема (если она
задействована) работает так. systemd периодически обращается к аппаратному
таймеру. В том случае, если systemd или ядро зависают, аппаратный таймер,
не~получив очередного обращения, автоматически перезапустит систему. Таким
образом, ядро и systemd защищены от бесконечного зависания на аппаратном уровне.
В то же время, сам systemd предоставляет интерфейс, реализующий логику
программных сторожевых таймеров для отдельных служб. Таким образом можно
обеспечить, например, принудительный перезапуск службы в случае ее зависания.
Для каждой службы можно независимо настроить частоту опроса и задать
соответствующее действие. Соединив оба звена (аппаратный сторожевой таймер,
контролирующий ядро и systemd, и программные сторожевые таймеры, посредством
которых systemd контролирует отдельные службы), мы получаем надежную схему
надзора за всеми системными компонентами.
Чтобы задействовать аппаратный таймер, достаточно задать ненулевое значение
параметра +RuntimeWatchdogSec=+ в файле +/etc/systemd/system.conf+. По умолчанию
этот параметр равен нулю (т.е. аппаратный таймер не~задействован). Установив его
равным, например, <<20s>>, мы включим аппаратный сторожевой таймер. Если в
течение 20 секунд таймер не~получит очередного сигнала <<все в порядке>>,
система автоматически перезагрузится. Отметим, что systemd отправляет такие
сигналы с периодом, равным половине заданного интервала~--- в нашем случае,
через каждые 10 секунд. Собственно, это все. Просто задав один простой параметр,
вы обеспечите аппаратный контроль работоспособности systemd и
ядра\footnote{Небольшой совет: если вы занимаетесь отладкой базовых системных
компонентов~--- не~забудьте отключить сторожевой таймер. Иначе ваша система
может неожиданно перезагрузиться, когда отладчик остановит процесс init и тот
не~может вовремя отправить сообщение таймеру.}.
Заметим, что с аппаратным сторожевым таймером (+/dev/watchdog+)
должна работать только одна программа. Этой программой может быть либо systemd,
либо отдельный демон сторожевого таймера (например,
\href{http://linux.die.net/man/8/watchdog}{watchdogd})~--- выбор остается за
вами.
Стоит упомянуть здесь еще одну опцию из файла +/etc/systemd/system.conf+~---
+ShutdownWatchdogSec=+. Она позволяет настроить аппаратный сторожевой таймер для
контроля процесса перезагрузки. По умолчанию она равна <<10min>>. Если в
процессе остановки системы перед перезагрузкой она зависнет, аппаратный таймер
принудительно перезагрузит ее по истечении данного интервала.
\end{document} \end{document}
vim:ft=tex:tw=80:spell:spelllang=ru vim:ft=tex:tw=80:spell:spelllang=ru