На крупных и производственных предприятиях (например, работающих в конфигурации «1С:Управление производственным предприятием») часто возникает хаос в управлении правами: сотрудники передают пароли коллегам при уходе в отпуск, уволенные пользователи остаются активными, а администраторы выдают избыточный доступ без контроля. Попытка привлечь к контролю службу безопасности (СБ) нередко заходит в тупик: безопасники не знают названий технических ролей платформы 1С, а программисты не могут описывать права простым языком.
Разберем комплексный подход к решению этой проблемы: от создания понятной для СБ матрицы доступа до автоматизации контроля учетных записей программными средствами 1С.
Главная ошибка при подаче заявки безопаснику — перечисление пообъектных прав или сотен метаданных. Служба безопасности мыслит должностными обязанностями и рисками, а не техническими ролями конфигуратора.
Проанализируем шаги для стандартизации прав:
Бухгалтер по банку, Менеджер по оптовым продажам, Кладовщик готовой продукции. В 90% случаев новому сотруднику выдается стандартный профиль его подразделения.Чтобы заявка была прозрачной и понятной для всех участников, выстроим электронный маршрут согласования со следующими обязательными полями в форме запроса:
Посмотрим на типовую цепочку согласования заявки:
Организационные запреты не работают без жестких технических ограничений. Для устранения передачи паролей и работы под чужими учетными записями применим следующие меры:
ПользовательОС.Для регулярного выявления нарушений политик безопасности (появление локальных паролей, выдача полных прав, забытые заблокированные доменные учетные записи) разработаем регламентную процедуру аудита на встроенном языке 1С.
Рассмотрим пример кода внешней обработки или регламентного задания, сканирующего пользователей информационной базы:
// Процедура выполняет аудит безопасности пользователей информационной базы
МассивАдминов = Новый Массив;
МассивАдминов.Добавить(ВРЕГ("ДОМЕН\АДМИНИСТРАТОР"));
МассивАдминов.Добавить(ВРЕГ("ДОМЕН\1CADMIN"));
// Массивы активных и заблокированных учетных записей AD формируются предварительно через LDAP/ADSI
МассивАктивныхУчеток = глОбщиеДанные.МассивАктивныхУчеток;
МассивЗаблокированыхУчеток = глОбщиеДанные.МассивЗаблокированыхУчеток;
Попытка
мПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ПользовательИБ Из мПользователи Цикл
ОшибкаТекущегоПользователя = "";
// Исключаем технологическую учетную запись администратора
Если СокрЛП(ПользовательИБ.Имя) = "Админ" Тогда
Продолжить;
КонецЕсли;
// Проверка 1: Запрет стандартной аутентификации по паролю 1С
Если ПользовательИБ.АутентификацияСтандартная = Истина Тогда
ОшибкаТекущегоПользователя = ОшибкаТекущегоПользователя + "; открыт вход по паролю 1С";
КонецЕсли;
// Проверка 2: Запрет показа в стартовом списке выбора
Если ПользовательИБ.ПоказыватьВСпискеВыбора = Истина Тогда
ОшибкаТекущегоПользователя = ОшибкаТекущегоПользователя + "; включен показ в списке выбора";
КонецЕсли;
// Проверка критических прав для рядовых пользователей
Если МассивАдминов.Найти(ВРЕГ(СокрЛП(ПользовательИБ.ПользовательОС))) = Неопределено Тогда
Если ПользовательИБ.АутентификацияСтандартная = Истина
ИЛИ ПользовательИБ.АутентификацияОС = Истина Тогда
// Проверка 3: Наличие административных прав (ПолныеПрава / Администрирование)
Если ПравоДоступа("Администрирование", Метаданные, ПользовательИБ) = Истина Тогда
ОшибкаТекущегоПользователя = ОшибкаТекущегоПользователя + "; выданы полные права (Администрирование)";
КонецЕсли;
// Проверка 4: Несанкционированный доступ к внешним обработкам и отчетам
Если ПравоДоступа("ИнтерактивноеОткрытиеВнешнихОбработок", Метаданные, ПользовательИБ) = Истина
ИЛИ ПравоДоступа("ИнтерактивноеОткрытиеВнешнихОтчетов", Метаданные, ПользовательИБ) = Истина Тогда
ОшибкаТекущегоПользователя = ОшибкаТекущегоПользователя + "; разрешен запуск внешних обработок/отчетов";
КонецЕсли;
КонецЕсли;
КонецЕсли;
// Проверка 5: Синхронизация с Active Directory
Если ПользовательИБ.АутентификацияОС = Истина И СокрЛП(ПользовательИБ.ПользовательОС) <> "" Тогда
мИмя = ВРЕГ(СокрЛП(ПользовательИБ.ПользовательОС));
Если МассивЗаблокированыхУчеток.Найти(мИмя) <> Неопределено Тогда
ОшибкаТекущегоПользователя = ОшибкаТекущегоПользователя + "; учетная запись заблокирована в AD (" + мИмя + ")";
ИначеЕсли МассивАктивныхУчеток.Найти(мИмя) = Неопределено Тогда
ОшибкаТекущегоПользователя = ОшибкаТекущегоПользователя + "; учетная запись не найдена в AD";
КонецЕсли;
КонецЕсли;
// Вывод или отправка отчета службе безопасности
Если СокрЛП(ОшибкаТекущегоПользователя) <> "" Тогда
Сообщить("Нарушение безопасности: " + ПользовательИБ.Имя + " (" + ПользовательИБ.ПолноеИмя + ")" + ОшибкаТекущегоПользователя);
КонецЕсли;
КонецЦикла;
Исключение
Сообщить("Ошибка при проведении аудита прав: " + ОписаниеОшибки());
КонецПопытки;
Для предотвращения несанкционированной выгрузки конфиденциальных данных и расследования инцидентов службе безопасности необходимо учитывать два ключевых фактора:
Вывод. Это заблокирует сохранение отчетов и табличных документов в Excel/PDF, копирование через буфер обмена и печать на принтере._$User$_.Create, _$User$_.Update). Если администратор выдает права напрямую в конфигураторе в обход утвержденной заявки, система безопасности должна немедленно зафиксировать нарушение.