Services Policy: различия между версиями
Asy (обсуждение | вклад) (→SysV initscripts: скорректировано описание действий chkconfig при наличии LSB-заголовка) |
|||
(не показано 5 промежуточных версий 1 участника) | |||
Строка 25: | Строка 25: | ||
<pre># chkconfig: - 90 10</pre> | <pre># chkconfig: - 90 10</pre> | ||
Первый аргумент либо задаёт список уровней исполнения (runlevels), в которых данный сервис будет запущен автоматически (например, <tt>345</tt>), либо является прочерком (<tt>-</tt>), что указывает на состояние «выключен по умолчанию». | Первый аргумент либо задаёт список уровней исполнения (runlevels), в которых данный сервис будет запущен автоматически (например, <tt>345</tt>), либо является прочерком (<tt>-</tt>), что указывает на состояние «выключен по умолчанию» (но при наличии LSB заголовка приоритет имеют его поля Default-Start и Default-Stop). | ||
Второй и третий аргументы (в сумме дают 100) задают порядковый номер сервиса при запуске и выключении соответственно. | Второй и третий аргументы (в сумме дают 100) задают порядковый номер сервиса при запуске и выключении соответственно. | ||
Кроме порядкового номера сервиса, в инитскрипте необходимо указать LSB Init header, в котором указаны зависимости данного | Кроме порядкового номера сервиса, в инитскрипте необходимо указать LSB Init header, в котором указаны зависимости данного | ||
сервиса на другие сервисы и подсистемы. Пример LSB заголовка: | сервиса на другие сервисы и подсистемы (это особенно важно для пакета, который не имеет unit-файла, но должен использоваться в системе с systemd). Пример LSB заголовка: | ||
<pre> | <pre> | ||
### BEGIN INIT INFO | ### BEGIN INIT INFO | ||
Строка 45: | Строка 45: | ||
Большинство дистрибутивов уже используют LSB headers, поэтому готовые LSB headers | Большинство дистрибутивов уже используют LSB headers, поэтому готовые LSB headers | ||
можно поискать в другом дистрибутиве или составить самому, руководствуясь | можно поискать в другом дистрибутиве или составить самому, руководствуясь | ||
[http://wiki.debian.org/LSBInitScripts http://wiki.debian.org/LSBInitScripts] и | |||
[http://wiki.debian.org/LSBInitScripts http://wiki.debian.org/LSBInitScripts] | [http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/tocsysinit.html стандартом] | ||
[http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/tocsysinit.html | |||
=== xinetd based === | === xinetd based === | ||
Строка 56: | Строка 54: | ||
<pre>only_from = 127.0.0.1</pre> | <pre>only_from = 127.0.0.1</pre> | ||
=== systemd === | === systemd === | ||
Для совместимости сервисов с системой инициализации systemd обязательно присутствие LSB init headers, содержащих информацию о зависимостях. | Для совместимости сервисов с системой инициализации systemd обязательно присутствие LSB init headers, содержащих информацию о зависимостях, см. выше | ||
[[Services_Policy#SysV_initscripts|SysV_initscripts]]. | |||
Тест repocop (уровня warn) - '''init-lsb''' | |||
Как обеспечить нативную поддержку systemd:<br> | |||
[http://wiki.opennet.ru/Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2%2C_%D1%87%D0%B0%D1%81%D1%82%D1%8C_3:_HOW-TO:_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_SysV_init-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B2_systemd_service-%D1%84%D0%B0%D0%B9%D0%BB HOW-TO:_преобразование_SysV_init-скрипта_в_systemd_service-файл] <br> | [http://wiki.opennet.ru/Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2%2C_%D1%87%D0%B0%D1%81%D1%82%D1%8C_3:_HOW-TO:_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_SysV_init-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B2_systemd_service-%D1%84%D0%B0%D0%B9%D0%BB HOW-TO:_преобразование_SysV_init-скрипта_в_systemd_service-файл] <br> | ||
Основополагающие принципы systemd рассмотрены [http://tux-the-penguin.blogspot.com/2010/09/systemd.html здесь (часть 1)] и [http://tux-the-penguin.blogspot.com/2010/09/systemd-ii.html здесь (часть 2)]<br> | Основополагающие принципы systemd рассмотрены [http://tux-the-penguin.blogspot.com/2010/09/systemd.html здесь (часть 1)] и [http://tux-the-penguin.blogspot.com/2010/09/systemd-ii.html здесь (часть 2)]<br> | ||
Если выбранное апстримом имя сервиса systemd отличается от уже используемого в ALT Linux имени init скрипта, | |||
необходимо упаковать для systemd симлинк на имя сервиса systemd с именем init скрипта. | |||
systemd достаточно умен, чтобы понять, что это будет один и тот же сервис. | |||
См. также http://fedoraproject.org/wiki/Packaging:Systemd | |||
=== Ссылки === | === Ссылки === | ||
* [http://lists.altlinux.org/pipermail/devel/2006-December/039909.html http://lists.altlinux.org/pipermail/devel/2006-December/039909.html] | * [http://lists.altlinux.org/pipermail/devel/2006-December/039909.html http://lists.altlinux.org/pipermail/devel/2006-December/039909.html] |
Текущая версия от 19:25, 10 марта 2020
Сервисы
О чём речь
Предлагается к обсуждению и доработке драфт полиси по упаковке программ, которые для возможности использования должны принимать сетевые подключения (в силу того, что это всегда может быть связано с ненулевым риском атаки на уязвимое место).
С учётом того, что забыть выключенным нужный сервис (разве что кроме sshd) несколько сложнее, чем забыть включенным ненужный — лучше по возможности и разумности держать в пакетах умолчание «выключен». Аналогично по части доступа — рассмотрите уместность такового по умолчанию только с петлевого интерфейса (loopback, lo) 127.0.0.1 или изменением штатного адреса привязки (bind, listen) сервиса с 0.0.0.0 на 127.0.0.1, либо аналогичным ограничением средствами сервиса (менее надёжно, поскольку уязвимость иногда может быть в коде, который успеет выполниться до контроля доступа).
В случае неочевидных действий, необходимых для конфигурирования сервиса в рабочем режиме, следует описать их хотя бы парой строк в файле README.ALT, уложенном в каталог с документацией пакета; возможно и упоминание в %description вида
The service is off by default.
или
The service will only accept connections from 127.0.0.1 by default, see README.ALT and configure it as needed.
в случаях, когда предвидятся проблемы у разворачивающих сервис системных администраторов.
Внося такие изменения, следует и отметить их в changelog (хотя при обновлении уже установленного пакета, предоставляющего сконфигурированный и включенный сервис, они не должны иметь действия).
Если эта практика будет принята, то следует упомянуть о ней в официальной документации на страничке с кратким сборником отличий дистрибутива.
SysV initscripts
Для сервисов, запускаемых посредством инитскриптов в %_initdir (/etc/rc.d/init.d/), образцом является /etc/rc.d/init.d/template, а рекомендуемым видом строчки chkconfig — подобный:
# chkconfig: - 90 10
Первый аргумент либо задаёт список уровней исполнения (runlevels), в которых данный сервис будет запущен автоматически (например, 345), либо является прочерком (-), что указывает на состояние «выключен по умолчанию» (но при наличии LSB заголовка приоритет имеют его поля Default-Start и Default-Stop).
Второй и третий аргументы (в сумме дают 100) задают порядковый номер сервиса при запуске и выключении соответственно.
Кроме порядкового номера сервиса, в инитскрипте необходимо указать LSB Init header, в котором указаны зависимости данного сервиса на другие сервисы и подсистемы (это особенно важно для пакета, который не имеет unit-файла, но должен использоваться в системе с systemd). Пример LSB заголовка:
### BEGIN INIT INFO # Provides: tomcat5 # Required-Start: $network $syslog # Required-Stop: $network $syslog # Default-Start: # Default-Stop: # Description: Release implementation for Servlet 2.4 and JSP 2.0 # Short-Description: start and stop tomcat ### END INIT INFO
Большинство дистрибутивов уже используют LSB headers, поэтому готовые LSB headers можно поискать в другом дистрибутиве или составить самому, руководствуясь http://wiki.debian.org/LSBInitScripts и стандартом
xinetd based
Для сервисов, стартующих из-под xinetd, рекомендуемым является включение в файл конфигурации, укладываемый в /etc/xinetd.d/, строчки
disable = yes
и по вкусу (для достаточно недоверенных сервисов?) --
only_from = 127.0.0.1
systemd
Для совместимости сервисов с системой инициализации systemd обязательно присутствие LSB init headers, содержащих информацию о зависимостях, см. выше SysV_initscripts. Тест repocop (уровня warn) - init-lsb
Как обеспечить нативную поддержку systemd:
HOW-TO:_преобразование_SysV_init-скрипта_в_systemd_service-файл
Основополагающие принципы systemd рассмотрены здесь (часть 1) и здесь (часть 2)
Если выбранное апстримом имя сервиса systemd отличается от уже используемого в ALT Linux имени init скрипта, необходимо упаковать для systemd симлинк на имя сервиса systemd с именем init скрипта. systemd достаточно умен, чтобы понять, что это будет один и тот же сервис.
См. также http://fedoraproject.org/wiki/Packaging:Systemd