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

Материал из ALT Linux Wiki
Нет описания правки
мНет описания правки
(не показано 60 промежуточных версий 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-формата /etc/control++/control++.conf. Данный ini-файл состоит из секции <b>main</b> и секций описания каждого из режимов. Секция <b>main</b> включает определение текущего режима (current_mode), списка доступных режимов (<b>modes</b>), списка вариантов <b>ulimits</b> и списка вариантов наборов прав на файлы (<b>permissions</b>). Каждая из секций режимов состоит из определения варианта <b>ulimits</b> и варианта набора прав (<b>permissions</b>) данного режима.
При запуске программы для переключения режима, например <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>-сценария данного режима, при наличии такого сценария (его отсутствие не считается ошибкой).
 
Если какой-то из файлов, перечисленных в описании прав для данного режима, отсутствует в системе, то установка данного режима не будет считаться по этой причине неуспешной. Также, при проверке соответствия режима, права отсутствующего файла не считаются несоответствующими правам, указанным в описании режима.
 
== Настройка ==
 
=== Основной режим ===
Параметры <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>
 
Все файлы настроек могут быть отредактированы вручную системным администратором при настройке нужных конфигураций.
 
=== Режим 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>.
<source>control++ <название_режима></source>


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


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


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


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


Отображение справочной информации:
Отображение справочной информации:
<source>control++ help</source>
:<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]<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++
Подробное описание применения чёрных/белых списков