Control++: различия между версиями
Нет описания правки |
Нет описания правки |
||
(не показано 7 промежуточных версий 2 участников) | |||
Строка 20: | Строка 20: | ||
=== Основной режим === | === Основной режим === | ||
Параметры <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>: | Параметры <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>[workstation] | :<source lang="text">[workstation] | ||
ulimits = u_x | ulimits = u_x | ||
permissions = p_y | permissions = p_y | ||
Строка 38: | Строка 38: | ||
* <code>list</code> - секция, задающая права на файлы, список абсолютных путей которых задан в текстовом файле, абсолютный путь которого определяется значением <i>path</i> данной секции; | * <code>list</code> - секция, задающая права на файлы, список абсолютных путей которых задан в текстовом файле, абсолютный путь которого определяется значением <i>path</i> данной секции; | ||
** <code>list_r</code> - вариация секции <i>list</i>, задающая права не только на файлы из списка, но и на все файлы перечисленных в нём каталогов с учётом содержимого подкаталогов; | ** <code>list_r</code> - вариация секции <i>list</i>, задающая права не только на файлы из списка, но и на все файлы перечисленных в нём каталогов с учётом содержимого подкаталогов; | ||
*** <code>whitelist</code> - вариация секции <i>list_r</i>, для которой устанавливаемый режим файлов определён как <code>** | *** <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> | *** <code>blacklist</code> - вариация секции <i>list_r</i>, для которой устанавливаемый режим файлов определён как <code>**-**-**-</code>. | ||
Помимо значения <i>path</i> для всех секций могут быть определены значения следующих параметров: | Помимо значения <i>path</i> для всех секций могут быть определены значения следующих параметров: | ||
Строка 50: | Строка 50: | ||
Для секций <i>dir</i> и <i>list</i> (а также всех их вариаций) может быть определен дополнительный параметр <code>excluded_paths</code>, определяющий набор каталогов, содержимое которых (в том числе содержимое вложенных каталогов) не будет затронуто применением прав, описанных данной секцией. | Для секций <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>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>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> | :<source lang="text"> | ||
[file] | [file] | ||
path = ~/some_dir_1/some_file_1 | path = ~/some_dir_1/some_file_1 | ||
Строка 89: | Строка 91: | ||
</source> | </source> | ||
<b>ВНИМАНИЕ</b> - при установке прав для секции <i>whitelist</i> следует помнить, что при наличии запускаемого сценария <code>/etc/control++/scripts/<название_режима>/do</code> у режима данный файл сценария следует учесть в списке разрешённых для запуска файлов, или изменить порядок действий в главном файле настроек (переместить определение переменной <i>scripts</i> выше определения переменной <i>permissions</i>), в противном случае возможна ситуация, при которой в результате установки режима прав данный файл станет неисполняемым, что приведёт к невозможности завершения установки данного режима. | <b>ВНИМАНИЕ</b> - при установке прав для секции <i>whitelist</i> следует помнить, что при наличии запускаемого сценария <code>/etc/control++/scripts/<название_режима>/do</code> у режима данный файл сценария следует учесть в списке разрешённых для запуска файлов, или изменить порядок действий в главном файле настроек (переместить определение переменной <i>scripts</i> выше определения переменной <i>permissions</i>), в противном случае возможна ситуация, при которой в результате установки режима прав данный файл станет неисполняемым, что приведёт к невозможности завершения установки данного режима. Для того, чтобы добавить в белый список все файлы системы, являющиеся на данный момент исполняемыми, можно воспользоваться следующей командой: | ||
:<code>find / -type f -executable > <путь_к_файлу_белого_списка></code> | |||
=== Запускаемые сценарии === | === Запускаемые сценарии === | ||
Строка 96: | Строка 99: | ||
== Использование == | == Использование == | ||
Как правило, осуществлять изменение прав на системные файлы, а также осуществлять запись в каталог <code>/etc/security/limits.d/</code> может только пользователь <i>root</i>, поэтому для успешной работы <i>control++</i> возможно будет необходимым | Как правило, осуществлять изменение прав на системные файлы, а также осуществлять запись в каталог <code>/etc/security/limits.d/</code> может только пользователь <i>root</i>, поэтому для успешной работы <i>control++</i> возможно будет необходимым запускать его от пользователя <i>root</i>. | ||
Установка режима: | Установка режима: | ||
:<code>control++ <название_режима></code> | :<code>control++ <название_режима></code> | ||
Сброс текущего режима: | Сброс текущего режима (до версии 0.21.0 и начиная с версии 0.21.0 соответственно): | ||
:<code>control++ reset</code> | :<code>control++ reset</code> | ||
:<code>control++ --reset</code> | |||
Отображение списка доступных режимов: | Отображение списка доступных режимов (до версии 0.21.0 и начиная с версии 0.21.0 соответственно): | ||
:<code>control++ list</code> | :<code>control++ list</code> | ||
:<code>control++ --list</code> | |||
Проверка | Проверка соответствия состояния системы текущему режиму (до версии 0.21.0 и начиная с версии 0.21.0 соответственно): | ||
:<code>control++ status</code> | :<code>control++ status</code> | ||
:<code>control++ --status</code> | |||
Отображение содержимого главного файла настройки: | Отображение содержимого главного файла настройки (до версии 0.21.0 и начиная с версии 0.21.0 соответственно): | ||
:<code>control++ conf</code> | :<code>control++ conf</code> | ||
:<code>control++ --conf</code> | |||
Отображение справочной информации: | Отображение справочной информации (до версии 0.21.0 и начиная с версии 0.21.0 соответственно): | ||
:<code>control++ help</code> | :<code>control++ help</code> | ||
:<code>control++ --help</code> | |||
Для включения режима упрощённого вывода следует передать дополнительный флаг <code>--plain | -p</code>; | Для включения режима упрощённого формата вывода следует передать дополнительный флаг <code>--plain | -p</code>; | ||
Для выключения режима подробного вывода следует передать флаг <code>--verbose | -v</code>; | |||
Для принудительной установки режима (отмены диалогов подтверждения) следует передать флаг <code>--force | -f</code>; | Для принудительной установки режима (отмены диалогов подтверждения) следует передать флаг <code>--force | -f</code>; | ||
Для выключения проверки уникальности записей режима прав следует передать флаг <code>--nonuniq | -n</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> | |||
Восстановление состояния, существовавшего до установки индивидуального режима определённой подконтрольной единицы (до версии 0.21.0 и начиная с версии 0.21.0 соответственно): | |||
:<code>control++ [ulimits | permissions | scripts] reset</code> | |||
:<code>control++ [ulimits | permissions | scripts] --reset</code> | |||
Проверка соответствия состояния системы текущему индивидуальному режиму определённой подконтрольной единицы (до версии 0.21.0 и начиная с версии 0.21.0 соответственно): | |||
:<code>control++ [ulimits | permissions | scripts] status</code> | |||
:<code>control++ [ulimits | permissions | scripts] --status</code> | |||
== Ссылки == | == Ссылки == | ||
[ | [https://git.altlinux.org/people/alexey/packages/controlplusplus.git Проект на git.altlinux.org]<br> | ||
[ | [https://git.altlinux.org/people/alexey/packages/libcontrolplusplus.git libcontrol++]<br> | ||
[https://www.altlinux.org/Control | [https://www.altlinux.org/Control++:Blacklist/Whitelist Подробное описание применения чёрных/белых списков] | ||
[[Категория:Безопасность]] | [[Категория:Безопасность]] | ||
[[Категория:Admin]] | [[Категория:Admin]] |
Текущая версия от 16:39, 24 января 2024
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++
и никогда не должны изменяться пользователем вручную. При каждой установке режима происходит предварительный сброс текущего режима.
При проверке соответствия текущего состояния системы параметрам установленного ранее режима осуществляется:
- Сравнение содержимого наиболее приоритетного ulimits-файла из каталога
/etc/security/limits.d/
с содержимым ulimits-файла, сохранённого при установке данного режима; - Сравнение текущих режимов всех файлов, затронутых установкой данного режима, с текущим описанием прав, которое носит название установленного подрежима;
- Запуск 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++ <название_режима>
Сброс текущего режима (до версии 0.21.0 и начиная с версии 0.21.0 соответственно):
control++ reset
control++ --reset
Отображение списка доступных режимов (до версии 0.21.0 и начиная с версии 0.21.0 соответственно):
control++ list
control++ --list
Проверка соответствия состояния системы текущему режиму (до версии 0.21.0 и начиная с версии 0.21.0 соответственно):
control++ status
control++ --status
Отображение содержимого главного файла настройки (до версии 0.21.0 и начиная с версии 0.21.0 соответственно):
control++ conf
control++ --conf
Отображение справочной информации (до версии 0.21.0 и начиная с версии 0.21.0 соответственно):
control++ help
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] <название_индивидуального_режима>
Восстановление состояния, существовавшего до установки индивидуального режима определённой подконтрольной единицы (до версии 0.21.0 и начиная с версии 0.21.0 соответственно):
control++ [ulimits | permissions | scripts] reset
control++ [ulimits | permissions | scripts] --reset
Проверка соответствия состояния системы текущему индивидуальному режиму определённой подконтрольной единицы (до версии 0.21.0 и начиная с версии 0.21.0 соответственно):
control++ [ulimits | permissions | scripts] status
control++ [ulimits | permissions | scripts] --status
Ссылки
Проект на git.altlinux.org
libcontrol++
Подробное описание применения чёрных/белых списков