Control++: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
мНет описания правки
(не показано 38 промежуточных версий 1 участника)
Строка 1: Строка 1:
<b>Control++</b> - консольная программа для настройки GNU+Linux системы, позволяющая переключать режимы, каждый из которых определяется своим файлом ulimits, а также своим набором описаний прав на файлы системы и запускаемым сценарием оболочки. Написана на C++. Распространяется по лицензии GPLv3.0.
<b>control++</b> - консольная программа для настройки GNU+Linux системы, позволяющая переключать режимы, каждый из которых определяется своим файлом ulimits, а также своим набором описаний прав на файлы системы и запускаемым сценарием оболочки, а также контролировать соответствие между параметрами установленного ранее режима и текущим состоянием системы.
 
Написана на C++, имеет минималистический дизайн (зависит лишь от собственной библиотеки). Распространяется по лицензии GPLv3.0.


== Принцип работы ==
== Принцип работы ==


Параметры <b>control++</b> определяются файлом ini-формата <code>/etc/control++/control++.conf</code>. Данный ini-файл состоит из секции <i>main</i> и секций описания каждого из режимов. Секция <i>main</i> включает определение текущего режима (<i>current_mode</i>), списка доступных режимов (<i>modes</i>), списка вариантов ограничений (<i>ulimits</i>) и списка вариантов наборов прав на файлы (<i>permissions</i>). Каждая из секций режимов может состоять из определения варианта ограничений (<i>ulimits</i>), варианта набора прав (<i>permissions</i>) и запускаемого сценария оболочки для данного режима (<i>scripts</i>).
При запуске программы для переключения режима, например <code>control++ <название_режима></code>, которому соответствует вариант ограничений <i>ulims_x</i>, вариант прав <i>perm_y</i> и сценарий <i>sh_z</i>, программа попытается скопировать файл <code>/etc/control++/ulimits/ulims_x</code> в каталог <code>/etc/security/limits.d/</code> (таким образом, чтобы он имел наивысший приоритет среди уже имеющихся файлов <i>ulimits</i>), попытается применить права на файлы в соответствии с описанием в <code>/etc/control++/permissions/perm_y</code> и запустить сценарий <code>/etc/control++/permissions/sh_z/do</code>. В случае невозможности осуществления какой-либо из операций будет выведено сообщение об ошибке. Если какой-то из параметров не указан (например, название сценария оболочки), то соответствующая операция не будет выполняться.
 
При установке режима ограничений и прав формируются данные, обеспечивающие возможность возврата к исходному состоянию при сбросе текущего режима. Также при каждой установке режима сохраняется описание установленного режима. Файлы, содержащие обозначенные данные, хранятся в <code>/var/lib/control++</code> и никогда не должны изменяться пользователем вручную. При каждой установке режима происходит предварительный сброс текущего режима.
 
При проверке соответствия текущего состояния системы параметрам установленного ранее режима осуществляется:
#Сравнение содержимого наиболее приоритетного <i>ulimits</i>-файла из каталога <code>/etc/security/limits.d/</code> с содержимым <i>ulimits</i>-файла, сохранённого при установке данного режима;
#Сравнение текущих режимов всех файлов, затронутых установкой данного режима, с текущим описанием прав, которое носит название установленного подрежима;
#Запуск <i>test</i>-сценария данного режима, при наличии такого сценария (его отсутствие не считается ошибкой).


Файлы ulimits для каждого варианта ограничений находятся в <code>/etc/control++/ulimits/название_варианта</code>.
Если какой-то из файлов, перечисленных в описании прав для данного режима, отсутствует в системе, то установка данного режима не будет считаться по этой причине неуспешной. Также, при проверке соответствия режима, права отсутствующего файла не считаются несоответствующими правам, указанным в описании режима.


Файлы с описанием набора прав являются файлами ini-формата и находятся в <code>/etc/control++/permissions/название_варианта</code>.
== Настройка ==


Файлы сценариев оболочки находятся в <code>/etc/control++/scripts/название_варианта</code>.
=== Основной режим ===
Параметры <i>control++</i> определяются файлом ini-формата <code>/etc/control++/control++.conf</code>. Данный ini-файл состоит из секций описания каждого из режимов; Название секции соответствует названию режима; Каждая из секций может состоять из определения варианта ограничений (<i>ulimits</i>), варианта набора прав (<i>permissions</i>) и запускаемого сценария оболочки для данного режима (<i>scripts</i>). Далее приведён пример описания режима под названием <i>workstation</i>, который имеет тип <i>ulimits</i> под названием <i>u_x</i>, тип <i>permissions</i> под названием <i>p_y</i> и запускаемый сценарий оболочки <i>s_z/do</i>:
:<source lang="text">[workstation]
ulimits = u_x
permissions = p_y
scripts = s_z
</source>


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


При запуске программы от имени <i>su</i> для переключения режима, например <code>control++ set some_mode</code>, которому соответствует вариант ограничений ulims_x, вариант прав perm_y и сценарий sh_z, программа попытается скопировать файл <code>/etc/control++/ulimits/ulims_x</code> в каталог <code>/etc/security/limits.d/</code>, попытается применить права на файлы в соответствии с описанием в <code>/etc/control++/permissions/perm_y</code> и запустить сценарий <code>/etc/control++/permissions/sh_z</code>. В случае невозможности осуществления какой-либо из операций будет выведено сообщение об ошибке. Если какой-то из параметров не указан (например название сценария оболочки) то соответствующая операция не будет выполняться.
=== Режим ULimits===
Файлы <i>ulimits</i> для каждого варианта ограничений находятся в <code>/etc/control++/ulimits/название_варианта</code>.
 
=== Режим прав на файлы ===
Файлы с описанием набора прав являются файлами ini-формата и находятся в <code>/etc/control++/permissions/название_варианта</code>. Описание прав может состоять из следующих секций:
* <code>file</code> - секция, задающая права на файл, абсолютный путь которого определяется значением <code>path</code> данной секции;
* <code>dir</code> - секция, задающая права на файлы каталога и всех содержащихся в нём файлов (без учёта содержимого подкаталогов), абсолютный путь которого определяется значением <i>path</i> данной секции;
** <code>dir_r</code> -  вариация секции <i>dir</i>, задающая права не только на файлы каталога, но и на все содержащиеся в нём файлы с учётом содержимого подкаталогов (рекурсивный обход дерева подкаталогов);
* <code>list</code> - секция, задающая права на файлы, список абсолютных путей которых задан в текстовом файле, абсолютный путь которого определяется значением <i>path</i> данной секции;
** <code>list_r</code> - вариация секции <i>list</i>, задающая права не только на файлы из списка, но и на все файлы перечисленных в нём каталогов с учётом содержимого подкаталогов;
*** <code>whitelist</code> - вариация секции <i>list_r</i>, для которой устанавливаемый режим файлов определён как <code>*********</code> (<code>*</code> означает не менять данный бит режима), при этом для всех остальных файлов базового каталога (см. <i>base_dir</i> далее) устанавливается режим <code>**-**-**-</code>;
*** <code>blacklist</code> - вариация секции <i>list_r</i>, для которой устанавливаемый режим файлов определён как <code>**-**-**-</code>.
 
Помимо значения <i>path</i> для всех секций могут быть определены значения следующих параметров:
* <code>owner</code> - название учётной записи владельца файла;
* <code>group</code> - название группы, к которой относится файл;
* <code>mode</code> - режим файла в формате <code>rwxrwxrwx</code> (например, <code>rw-rw-rw-</code> означает разрешить всем чтение и запись, но запретить всем запуск данного файла; <code>rwx------</code> означает разрешить все действия владельцу файла и запретить все действия всем остальным; Для того, чтобы не изменять какой-то бит режима, следует использовать символ <code>*</code>, например <code>r**r**r**</code> означает разрешить всем чтение файла и не менять остальные права).
 
Единственным необходимым параметром является <i>path</i>. При отсутствии определения остальных параметров данные свойства файла не будут изменены.
 
Для секций <i>dir</i> и <i>list</i> (а также всех их вариаций) может быть определен дополнительный параметр <code>excluded_paths</code>, определяющий набор каталогов, содержимое которых (в том числе содержимое вложенных каталогов) не будет затронуто применением прав, описанных данной секцией.
 
Для секций <i>dir</i>, <i>dir_r</i> и <i>list_r</i>, <i>whitelist</i>, <i>blacklist</i> может быть определен дополнительный параметр <code>mode_for_dirs</code>, определяющий режим для каталогов, затрагиваемых применением прав, описанных данной секцией (по-умолчанию режим для каталогов определяется так же как для обычных файлов).
 
Для секций <i>list</i>, <i>list_r</i>, <i>whitelist</i> и <i>blacklist</i> может быть определен дополнительный параметр <code>base_dir</code>, определяющий каталог, рассматриваемый при применении данного режима прав как каталог верхнего уровня. Например, пусть в секции <i>whitelist</i> параметру <i>base_dir</i> присвоено значение <code>/home/your_home_dir/</code>, пусть в списке файлов, к которым должен быть применён данный режим, указаны два пути - <code>/d1/f1</code>, <code>f2</code> и пусть <i>excluded_paths</i> присвоено значение <code>/d0</code>, тогда при установке данного режима файлы <code>/home/your_home_dir/d1/f1</code> и <code>/home/your_home_dir/f2</code>, станут исполняемыми, файлы каталога <code>/home/your_home_dir/d0</code> (включая содержимое вложенных каталогов) сохранят свой режим, а все остальные файлы каталога <code>/home/your_home_dir/</code> станут неисполняемыми.
 
Значение параметра <i>path</i> секции <i>list</i> и производных от неё секций должно представлять собой абсолютный путь к текстовому файлу, каждая строка которого представляет собой абсолютный путь какого-либо файла системы, при этом допустимы комментарии, обозначаемые комбинацией символов <code>//</code>.
 
Пример описания набора прав:
:<source lang="text">
[file]
path = ~/some_dir_1/some_file_1
owner = some_user
group = some_group
mode = rwxrwx---
 
[file]
path = ~/some_dir_1/some_file_2
mode = rw-rw----
 
[dir_r]
path = ~/some_dir_2/
owner = some_user
group = some_group
mode = **x**x**x
mode_for_dirs = r*xr*xr*x
 
[list]
path = ~/list_of_executables.txt
excluded_paths = "/some_path/", "/some_other_path/"
owner = some_user
group = some_group
mode = **x**x**-
 
[blacklist]
path = ~/some_blacklist.txt
 
[whitelist]
path = ~/some_whitelist.txt
base_dir = /mnt/some_vol/
excluded_paths = /some_path_inside_base_dir/
</source>
 
<b>ВНИМАНИЕ</b> - при установке прав для секции <i>whitelist</i> следует помнить, что при наличии запускаемого сценария <code>/etc/control++/scripts/<название_режима>/do</code> у режима данный файл сценария следует учесть в списке разрешённых для запуска файлов, или изменить порядок действий в главном файле настроек (переместить определение переменной <i>scripts</i> выше определения переменной <i>permissions</i>), в противном случае возможна ситуация, при которой в результате установки режима прав данный файл станет неисполняемым, что приведёт к невозможности завершения установки данного режима. Для того, чтобы добавить в белый список все файлы системы, являющиеся на данный момент исполняемыми, можно воспользоваться следующей командой:
:<code>find / -type f -executable > <путь_к_файлу_белого_списка></code>
 
=== Запускаемые сценарии ===
Файлы сценариев оболочки находятся в <code>/etc/control++/scripts/название_варианта/do</code>. Также каталог <code>/etc/control++/scripts/название_варианта/</code> может содержать файлы <code>undo</code> и <code>test</code> для выполнения действий обратных действиям сценария <code>do</code> и проверки действенности сценария <code>do</code> соответственно.


== Использование ==
== Использование ==


Переключение\установка режима:
Как правило, осуществлять изменение прав на системные файлы, а также осуществлять запись в каталог <code>/etc/security/limits.d/</code> может только пользователь <i>root</i>, поэтому для успешной работы <i>control++</i> возможно будет необходимым запускать его от пользователя <i>root</i>.
<code>control++ <название_режима></code>
 
Установка режима:
:<code>control++ <название_режима></code>


Установка режима по-умолчанию:
Сброс текущего режима:
<code>control++ reset</code>
:<code>control++ reset</code>


Отображение списка доступных режимов:
Отображение списка доступных режимов:
<code>control++ list</code>
:<code>control++ list</code>


Отображение текущего режима:
Проверка соответствия состояния системы текущему режиму:
<code>control++ status</code>
:<code>control++ status</code>


Отображение содержимого главного файла настройки:
Отображение содержимого главного файла настройки:
<code>control++ conf</code>
:<code>control++ conf</code>


Отображение справочной информации:
Отображение справочной информации:
<code>control++ help</code>
:<code>control++ help</code>
 
Для включения режима упрощённого формата вывода следует передать дополнительный флаг <code>--plain | -p</code>;
 
Для выключения режима подробного вывода следует передать флаг <code>--verbose | -v</code>;
 
Для принудительной установки режима (отмены диалогов подтверждения) следует передать флаг <code>--force | -f</code>;
 
Для выключения проверки уникальности записей режима прав следует передать флаг <code>--nonuniq  | -n</code>.
 
=== Коды возврата ===
 
Код 1 возвращается в следующих случаях:
* Какой-то из конфигурационных файлов не может быть прочитан;
* Не получилось настроить программу в соответствии с конфигурационными файлами;
* При проверке соответствия текущего состояния системы установленному режиму (команда <code>control++ status</code> или <code>control++ [ulimits | permissions | scripts] status</code>) было выявлено, что описание режима было изменено, и пользователь отказался от продолжения проверки;
* При проверке соответствия текущего состояния системы установленному режиму было выявлено несоответствие;
* Попытка установки режима (команда <code>control++ <название_режима></code> или <code>control++ [ulimits | permissions | scripts] <название_индивидуального_режима></code>) оказалась неуспешной.
 
Во всех остальных случаях при завершении работы программы возвращается код 0.
 
== Нововведения версии 0.19.0 ==
 
Начиная с версии 0.19.0 возможно устанавливать индивидуальный режим для подконтрольной единицы (т.е. <i>ulimits</i>, <i>permissions</i> и <i>scripts</i>) отдельно от основного режима, а также определять соответствие текущего состояния системы данного режиму. Названия индивидуальных режимов соответствуют названиям вариантов <i>ulimits</i>, <i>permissions</i> и <i>scripts</i> соответственно.
 
Установка режима для определённой подконтрольной единицы:
:<code>control++ [ulimits | permissions | scripts] <название_индивидуального_режима></code>
 
Восстановление состояния, существовавшего до установки индивидуального режима определённой подконтрольной единицы:
:<code>control++ [ulimits | permissions | scripts] reset</code>
 
Проверка соответствия состояния системы текущему индивидуальному режиму определённой подконтрольной единицы:
:<code>control++ [ulimits | permissions | scripts] status</code>


== Ссылки ==
== Ссылки ==


[http://git.altlinux.org/people/alexey/packages/?p=controlplusplus.git;a=summary Проект на git.altlinux.org]
[http://git.altlinux.org/people/alexey/packages/?p=controlplusplus.git;a=summary Проект на git.altlinux.org]<br>
 
[http://git.altlinux.org/people/alexey/packages/?p=libcontrolplusplus.git;a=summary libcontrol++]<br>
[https://www.altlinux.org/Control%2B%2B:Blacklist/Whitelist Подробное описание применения чёрных/белых списков]
[[Категория:Безопасность]]
[[Категория:Безопасность]]
[[Категория:Admin]]
[[Категория:Admin]]

Версия от 14:03, 20 апреля 2022

control++ - консольная программа для настройки GNU+Linux системы, позволяющая переключать режимы, каждый из которых определяется своим файлом ulimits, а также своим набором описаний прав на файлы системы и запускаемым сценарием оболочки, а также контролировать соответствие между параметрами установленного ранее режима и текущим состоянием системы.

Написана на C++, имеет минималистический дизайн (зависит лишь от собственной библиотеки). Распространяется по лицензии GPLv3.0.

Принцип работы

При запуске программы для переключения режима, например control++ <название_режима>, которому соответствует вариант ограничений ulims_x, вариант прав perm_y и сценарий sh_z, программа попытается скопировать файл /etc/control++/ulimits/ulims_x в каталог /etc/security/limits.d/ (таким образом, чтобы он имел наивысший приоритет среди уже имеющихся файлов ulimits), попытается применить права на файлы в соответствии с описанием в /etc/control++/permissions/perm_y и запустить сценарий /etc/control++/permissions/sh_z/do. В случае невозможности осуществления какой-либо из операций будет выведено сообщение об ошибке. Если какой-то из параметров не указан (например, название сценария оболочки), то соответствующая операция не будет выполняться.

При установке режима ограничений и прав формируются данные, обеспечивающие возможность возврата к исходному состоянию при сбросе текущего режима. Также при каждой установке режима сохраняется описание установленного режима. Файлы, содержащие обозначенные данные, хранятся в /var/lib/control++ и никогда не должны изменяться пользователем вручную. При каждой установке режима происходит предварительный сброс текущего режима.

При проверке соответствия текущего состояния системы параметрам установленного ранее режима осуществляется:

  1. Сравнение содержимого наиболее приоритетного ulimits-файла из каталога /etc/security/limits.d/ с содержимым ulimits-файла, сохранённого при установке данного режима;
  2. Сравнение текущих режимов всех файлов, затронутых установкой данного режима, с текущим описанием прав, которое носит название установленного подрежима;
  3. Запуск test-сценария данного режима, при наличии такого сценария (его отсутствие не считается ошибкой).

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

Настройка

Основной режим

Параметры control++ определяются файлом ini-формата /etc/control++/control++.conf. Данный ini-файл состоит из секций описания каждого из режимов; Название секции соответствует названию режима; Каждая из секций может состоять из определения варианта ограничений (ulimits), варианта набора прав (permissions) и запускаемого сценария оболочки для данного режима (scripts). Далее приведён пример описания режима под названием workstation, который имеет тип ulimits под названием u_x, тип permissions под названием p_y и запускаемый сценарий оболочки s_z/do:

[workstation]
ulimits = u_x
permissions = p_y
scripts = s_z

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

Режим ULimits

Файлы ulimits для каждого варианта ограничений находятся в /etc/control++/ulimits/название_варианта.

Режим прав на файлы

Файлы с описанием набора прав являются файлами ini-формата и находятся в /etc/control++/permissions/название_варианта. Описание прав может состоять из следующих секций:

  • file - секция, задающая права на файл, абсолютный путь которого определяется значением path данной секции;
  • dir - секция, задающая права на файлы каталога и всех содержащихся в нём файлов (без учёта содержимого подкаталогов), абсолютный путь которого определяется значением path данной секции;
    • dir_r - вариация секции dir, задающая права не только на файлы каталога, но и на все содержащиеся в нём файлы с учётом содержимого подкаталогов (рекурсивный обход дерева подкаталогов);
  • list - секция, задающая права на файлы, список абсолютных путей которых задан в текстовом файле, абсолютный путь которого определяется значением path данной секции;
    • list_r - вариация секции list, задающая права не только на файлы из списка, но и на все файлы перечисленных в нём каталогов с учётом содержимого подкаталогов;
      • whitelist - вариация секции list_r, для которой устанавливаемый режим файлов определён как ********* (* означает не менять данный бит режима), при этом для всех остальных файлов базового каталога (см. base_dir далее) устанавливается режим **-**-**-;
      • blacklist - вариация секции list_r, для которой устанавливаемый режим файлов определён как **-**-**-.

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

  • owner - название учётной записи владельца файла;
  • group - название группы, к которой относится файл;
  • mode - режим файла в формате rwxrwxrwx (например, rw-rw-rw- означает разрешить всем чтение и запись, но запретить всем запуск данного файла; rwx------ означает разрешить все действия владельцу файла и запретить все действия всем остальным; Для того, чтобы не изменять какой-то бит режима, следует использовать символ *, например r**r**r** означает разрешить всем чтение файла и не менять остальные права).

Единственным необходимым параметром является path. При отсутствии определения остальных параметров данные свойства файла не будут изменены.

Для секций dir и list (а также всех их вариаций) может быть определен дополнительный параметр excluded_paths, определяющий набор каталогов, содержимое которых (в том числе содержимое вложенных каталогов) не будет затронуто применением прав, описанных данной секцией.

Для секций dir, dir_r и list_r, whitelist, blacklist может быть определен дополнительный параметр mode_for_dirs, определяющий режим для каталогов, затрагиваемых применением прав, описанных данной секцией (по-умолчанию режим для каталогов определяется так же как для обычных файлов).

Для секций list, list_r, whitelist и blacklist может быть определен дополнительный параметр base_dir, определяющий каталог, рассматриваемый при применении данного режима прав как каталог верхнего уровня. Например, пусть в секции whitelist параметру base_dir присвоено значение /home/your_home_dir/, пусть в списке файлов, к которым должен быть применён данный режим, указаны два пути - /d1/f1, f2 и пусть excluded_paths присвоено значение /d0, тогда при установке данного режима файлы /home/your_home_dir/d1/f1 и /home/your_home_dir/f2, станут исполняемыми, файлы каталога /home/your_home_dir/d0 (включая содержимое вложенных каталогов) сохранят свой режим, а все остальные файлы каталога /home/your_home_dir/ станут неисполняемыми.

Значение параметра path секции list и производных от неё секций должно представлять собой абсолютный путь к текстовому файлу, каждая строка которого представляет собой абсолютный путь какого-либо файла системы, при этом допустимы комментарии, обозначаемые комбинацией символов //.

Пример описания набора прав:

[file]
path = ~/some_dir_1/some_file_1
owner = some_user
group = some_group
mode = rwxrwx---

[file]
path = ~/some_dir_1/some_file_2
mode = rw-rw----

[dir_r]
path = ~/some_dir_2/
owner = some_user
group = some_group
mode = **x**x**x
mode_for_dirs = r*xr*xr*x

[list]
path = ~/list_of_executables.txt
excluded_paths = "/some_path/", "/some_other_path/"
owner = some_user
group = some_group
mode = **x**x**-

[blacklist]
path = ~/some_blacklist.txt

[whitelist]
path = ~/some_whitelist.txt
base_dir = /mnt/some_vol/
excluded_paths = /some_path_inside_base_dir/

ВНИМАНИЕ - при установке прав для секции whitelist следует помнить, что при наличии запускаемого сценария /etc/control++/scripts/<название_режима>/do у режима данный файл сценария следует учесть в списке разрешённых для запуска файлов, или изменить порядок действий в главном файле настроек (переместить определение переменной scripts выше определения переменной permissions), в противном случае возможна ситуация, при которой в результате установки режима прав данный файл станет неисполняемым, что приведёт к невозможности завершения установки данного режима. Для того, чтобы добавить в белый список все файлы системы, являющиеся на данный момент исполняемыми, можно воспользоваться следующей командой:

find / -type f -executable > <путь_к_файлу_белого_списка>

Запускаемые сценарии

Файлы сценариев оболочки находятся в /etc/control++/scripts/название_варианта/do. Также каталог /etc/control++/scripts/название_варианта/ может содержать файлы undo и test для выполнения действий обратных действиям сценария do и проверки действенности сценария do соответственно.

Использование

Как правило, осуществлять изменение прав на системные файлы, а также осуществлять запись в каталог /etc/security/limits.d/ может только пользователь root, поэтому для успешной работы control++ возможно будет необходимым запускать его от пользователя root.

Установка режима:

control++ <название_режима>

Сброс текущего режима:

control++ reset

Отображение списка доступных режимов:

control++ list

Проверка соответствия состояния системы текущему режиму:

control++ status

Отображение содержимого главного файла настройки:

control++ conf

Отображение справочной информации:

control++ help

Для включения режима упрощённого формата вывода следует передать дополнительный флаг --plain | -p;

Для выключения режима подробного вывода следует передать флаг --verbose | -v;

Для принудительной установки режима (отмены диалогов подтверждения) следует передать флаг --force | -f;

Для выключения проверки уникальности записей режима прав следует передать флаг --nonuniq | -n.

Коды возврата

Код 1 возвращается в следующих случаях:

  • Какой-то из конфигурационных файлов не может быть прочитан;
  • Не получилось настроить программу в соответствии с конфигурационными файлами;
  • При проверке соответствия текущего состояния системы установленному режиму (команда control++ status или control++ [ulimits | permissions | scripts] status) было выявлено, что описание режима было изменено, и пользователь отказался от продолжения проверки;
  • При проверке соответствия текущего состояния системы установленному режиму было выявлено несоответствие;
  • Попытка установки режима (команда control++ <название_режима> или control++ [ulimits | permissions | scripts] <название_индивидуального_режима>) оказалась неуспешной.

Во всех остальных случаях при завершении работы программы возвращается код 0.

Нововведения версии 0.19.0

Начиная с версии 0.19.0 возможно устанавливать индивидуальный режим для подконтрольной единицы (т.е. ulimits, permissions и scripts) отдельно от основного режима, а также определять соответствие текущего состояния системы данного режиму. Названия индивидуальных режимов соответствуют названиям вариантов ulimits, permissions и scripts соответственно.

Установка режима для определённой подконтрольной единицы:

control++ [ulimits | permissions | scripts] <название_индивидуального_режима>

Восстановление состояния, существовавшего до установки индивидуального режима определённой подконтрольной единицы:

control++ [ulimits | permissions | scripts] reset

Проверка соответствия состояния системы текущему индивидуальному режиму определённой подконтрольной единицы:

control++ [ulimits | permissions | scripts] status

Ссылки

Проект на git.altlinux.org
libcontrol++
Подробное описание применения чёрных/белых списков