CISCO RBAC (Role-Based Access Control) — изучаем разграничение прав доступа к устройству CISCO с помощью метода Уровней привилегий (CISCO Privilege Levels).
Сразу вопрос: что такое матрица RBAC?
The concept of role-based access control (RBAC) is to create a set of permissions or limited access and assign that set of permissions to users or groups. CCNA Security 210-260 Official Cert Guide
CISCO IOS предлагает 3 способа разграничения доступа к сетевому устройству:
- Метод Уровней привилегий (Privilege Levels);
- Метод Представлений (Parser Views);
- Разграничение доступа с использованием сервера ААА.
При этом два первых метода они локальные, то есть требуют настройки на каждом устройстве, поэтому плохо масштабируются. Точнее на этапе внедрения применить настройки оптом на устройствах не проблема с помощью средств автоматизации (например, массовое выполнение команд NOC). Сложности начинаются если нужно вносить изменения.
Третий метод сильно зависит и различается в реализации от того какой протокол будем использовать RADIUS или TACACS+. И это отдельный рассказ в записях про AAA.
В этой части Уровни привилегий. Наиболее простой метод настройки прав. Вторую часть когда-нибудь допишу. Все примеры выполнены в виртуальной среде EVE-NG:
S1# show ver
Cisco IOS Software, vios_l2 Software (vios_l2-ADVENTERPRISEK9-M), Version 15.2 (CML_NIGHTLY_20150414)FLO_DSGS7
Постановка задачи
Специалисты IT-отдела в больших организациях выполняют самые разнообразные операции на оборудовании. Уровень доступа к сетевому оборудованию должен предоставляться в зависимости от выполняемых обязанностей. Берём следующее:
- Специалист хелп-деска на телефоне и ему нужно иногда просмотреть вывод команд show, конфигурацию пользовательского коммутатора, чтобы выяснить какие-то основные параметры, почитать дискрипшены на портах, если нет данных в базе знаний IT-отдела;
- Специалист 1 линии поддержки обслуживает рабочие станции и ему нужно переносить порты коммутатора из одной VLAN в другую с сохранением конфигурации коммутатора;
- Администратор сети, соответственно ему уже нужен полный доступ.
Уровни привилегий
Всего 16 уровней привилегий, с 0 по 15. Логика такая: чем выше уровень, тем больше привилегий. Переходить с одного уровня на другой можно с помощью команды enable номер_уровня
:

- Команда
enable
без указания уровня, это вход на уровень 15; - Уровень 0 — имеет только 5 команд:
disable, enable, exit, help, logout
. Не используется.
Тут надо прояснить: не используется при работе с устройством. Для чего тогда уровень 0 нужен? Например, на сетевом устройстве настроен PPTP-сервер, пользователь подключается, его нужно аутентифицировать. Поэтому создаётся запись вида:
username pptpuser privilege 0 secret..
При этом выполнения каких-то настроек на устройстве этим пользователем не подразумевается.
Есть 2 уже преднастроенных уровня привилегий:
- Пользовательский режим — уровень 1, минимальный уровень привилегий, по умолчанию пользователь входит именно на этот уровень, нельзя просматривать или изменять конфигурацию, просматривать можно только отдельные настройки.
S1>
- Привилегированный режим — уровень 15, максимальный уровень привилегий, можно полностью просматривать и полностью изменять конфигурацию;
S1#
- Уровни 2-14 — не имеют предварительной настройки и как раз могут быть использованы для внедрения различных прав.
Многим организациям преднастроенных уровней 1 и 15 вполне достаточно. Например, на RADIUS сервере создаются 2 группы пользователей и 2 политики, первая политика для первой группы с уровнем доступа 1, вторая политика для второй группы с уровнем доступа 15. Первая группа — посмотреть отдельные настройки (вывод всей конфы недоступен), попинговать что-то с устройства или трассировку запустить (ping
и traceroute
доступны для уровня 1), вторая администраторы.
В этом случае AAA сервер полностью полагается на метод Privilege Levels, но поскольку уровни 1 и 15 преднастроены, то масштабируемость отличная и нужно только один раз влить настройки AAA на устройства.
Пример 1
Посмотрим на уровень 1:
S1> show privilege Current privilege level is 1 S1> ? ... ping Send echo messages ... traceroute Trace route to destination ... S1> show ? aaa Show AAA values acircuit Access circuit info adjacency Adjacent nodes alps Alps information ancp ANCP information aps APS information ... - команды show доступны, но если промотать вниз команды running-config среди них нет S1> reload Translating "reload"...domain server (255.255.255.255) - перезагрузить устройство нельзя S1> show interf g0/0 GigabitEthernet0/0 is up, line protocol is up (connected) Hardware is iGbE, address is 5000.0001.0000 (bia 5000.0001.0000) MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec, reliability 255/255, txload 1/255, rxload 1/255 Encapsulation ARPA, loopback not set ... - возможно просмотреть различную информацию
Важно отметить что команды, доступные на каком-то уровне, будут доступны для всех уровней выше. Второй момент: если команда была настроена на каком-то уровне, то её нельзя настроить на уровнях ниже.
Пример 2
Настроим пароль для входа администратора (уровень 15):
S1# enable S1# configure terminal S1(config)# enable secret Cisco15
Вот и всё, на этом настройка для администратора завершена. 🙂
Настройка нового уровня привилегий
Настройка нового уровня производится из под привилегий уровня 15. Просмотр текущего уровня:
S1# show privilege
Сначала задаётся пароль для нового уровня привилегий:
S1(config)# enable secret level номер_уровня пароль
Затем идёт непосредственное добавление команд для нового уровня с помощью команды privilege:
privilege mode {level номер_уровня | reset } command ---------------------------------------------------- mode - режим конфигурирования для которого предназначается команда (exec, configure, interface, line), режимов очень много, дальше будет понятнее
Далее тут:
level номер_уровня command - привязывание команды к уровню reset command - отвязывание команды
После того как команды добавлены, нужно нужно зайти с уровня 15 на настраиваемый уровень и проверить их работу.
Пример 3
Настроим права для специалиста хелп-деска с уровнем 2 для просмотра конфигурации. Напоминаю, что для уровня 2 уже доступны все команды уровня 1 (полезные: пинг, трассировка и просмотр различных настроек).
Задание пароля уровня 2
Сначала нужно настроить пароль для нового уровня. Без пароля будет ругаться, точнее с более высокого уровня зайти можно, с более низкого нет, вот так это выглядит:
S1# show privilege Current privilege level is 15 S1# enable 2 S1# - всё ok, перешли с 15 уровня на 2 S1# enable 1 S1> enable 2 % No password set - с уровня 1 зайти на "беспарольный" уровень 2 уже нельзя S1> enable 0 S1> enable 1 % No password set - то же самое S1> enable - ввод пароля уровня 15 S1# config t S1(config)# enable secret level 2 Сisco2
Проверка уровня 2
Пока для уровня 2 мы ничего не настраивали (кроме пароля), зайдём на этот уровень и посмотрим:
S1# enable 2 S1# clear ? aaa Clear AAA values ancp Clear ANCP neighbor TCP connections bsc Clear counters in <show bsc> command bstun Clear counters displayed in show bstun call Call ... S1> clear http client statistics S1>
А вот это уже плохо, по умолчанию доступна очистка процессов. Понятно что много испортить не удастся, но это само по себе неправильно. Перенесём команду на 15 уровень:
S1# enable - ввод пароля уровня 15 S1# config t S1(config)# privilege exec level 15 clear S1(config)# end S1# enable 2 - ввод пароля уровня 2 S1# clear ? % Unrecognized command
Просмотр конфигурации
Ожидаемо получаем для 2 уровня привилегий:
S1# show running-config ^ % Invalid input detected at '^' marker.
Конфигурация не выводится. Хорошо, разрешаем show running-config
в явном виде и ещё раз проверим:
S1# enable S1# config t S1(config)# privilege exec level 2 show running-config S1(config)# end S1# enable 2 S1# show running-config Building configuration... Current configuration : 115 bytes ! ! Last configuration change at 15:56:39 UTC Thu Jan 23 2020 ! boot-start-marker boot-end-marker ! ! ! ! ! ! end
Выводится пустая конфигурация. Пустая, так как в режиме конфигурирования нет доступа ни к 1 элементу. Команду show running-config
для 2 уровня отвяжем, раз она не работает как надо. Тут надо отметить что если отвязывать команду через no
, то она появится на 15 уровне:
S1# enable S1# config t S1(config)# no privilege exec level 2 show running-config S1(config)# end S1# show run ... privilege exec level 15 show running-config ...
Поэтому правильно отвязывать только через reset
:
S1(config)# privilege exec reset show running-config
Разрешение команды more
Команда more
даёт возможность просматривать содержимое файлов прямо из консоли. Поэтому чтобы дать права на просмотр конфигурации для уровня 2:
S1# enable S1# config t S1(config)# privilege exec level 2 more S1(config)# end S1# enable 2 S1# more system:running-config ! ! Last configuration change at 15:58:56 UTC Thu Jan 23 2020 ! version 15.2 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption service compress-config ! hostname S1 ... --More-- - выводится полная конфигурация
Окончательно для уровня 2 будет:
... privilege exec level 2 more privilege exec level 15 clear ...
Пример 4
Настроим для для специалиста первой линии сохранение конфигурации и перенос портов между VLANs для уровня 3:
S1# config t S1(config)# enable secret level 3 Cisco3 S1(config)# privilege exec level 3 write memory S1(config)# privilege exec level 3 configure terminal S1(config)# privilege configure level 3 interface S1(config)# privilege interface level 3 switchport access vlan S1(config)# privilege exec level 3 show running-config S1(config)# end
Выделил для каких режимов мы настраиваем команды.
При такой настройке специалист не сможет ничего особенно испортить, например, если интерфейс транковый, то команда switchport access vlan
на нём просто не применится. Проверяем:
S1# enable 3 S1# show privilege Current privilege level is 3 S1# config t S1(config)# ? Configure commands: beep Configure BEEP (Blocks Extensible Exchange Protocol) cts Cisco Trusted Security commands default Set a command to its defaults end Exit from configure mode exit Exit from configure mode help Description of the interactive help system interface Select an interface to configure no Negate a command or set its defaults sasl Configure SASL S1(config)# interface g0/1 S1(config-if)# ? Interface configuration commands: default Set a command to its defaults exit Exit from interface configuration mode help Description of the interactive help system no Negate a command or set its defaults switchport Set switching mode characteristics S1(config-if)# switchport ? access Set access mode characteristics of the interface <cr> S1(config-if)# switchport access vlan 3 % Access VLAN does not exist. Creating vlan 3 S1(config-if)# end S1# write memory Building configuration... [OK] S1# show vlan br ... 3 VLAN0003 active Gi0/1 ... S1# show running-config Building configuration... Current configuration : 1747 bytes ! ! interface GigabitEthernet0/0 ! interface GigabitEthernet0/1 switchport access vlan 3 .. --More--
В режиме конфигурирования для уровня 3 определен доступ к интерфейсам, поэтому вывод конфигурации уже не пустой (но и не полный). Если нужен просмотр полной конфигурации, то опять же команда more system:running-config
доступна.
Конечная конфигурация
Что же сохранилось в конфигурации после манипуляций с уровнями?
... privilege interface level 3 switchport access vlan privilege interface level 3 switchport access privilege interface level 3 switchport privilege configure level 3 interface privilege exec level 2 more privilege exec level 3 write memory privilege exec level 3 write privilege exec level 3 configure terminal privilege exec level 3 configure privilege exec level 3 show running-config privilege exec level 3 show privilege exec level 15 clear ...
Может быть кто-то решит дополнительно дать возможность передёрнуть порт или включить неиспользуемый:
S1(config)# privilege interface level 3 shutdown S1(config)# privilege interface level 3 no shutdown
Но тогда будут права включить и выключить любой порт устройства. Кроме этого появятся следующие команды:
... privilege interface level 3 no shutdown privilege interface level 3 no switchport access vlan privilege interface level 3 no switchport access privilege interface level 3 no switchport privilege interface level 3 no ...
Мы дали доступ к no
на уровне конфигурирования интерфейса и тут же подтянулись другие команды, которые изначально не планировались.
Ассоциация с пользователем
Можно связать уровень привилегий и учетную запись пользователя на устройстве:
S1(config)# username Helpdesk privilege номер_уровня secret пароль
Тогда при входе на устройство пользователь автоматически получает связанный с ним уровень привилегий. Для создания такого пользователя необходимы привилегии уровня 15.
Вывод
Метод Уровней привилегий негибкий. Его удобно использовать в основном когда нужно добавить буквально несколько команд. Если же команд нужно добавить много (но не все) для некоторого уровня, то очень громоздкая настройка. И возможно не получится реализовать так, как ставится в задаче из-за ограничений метода.
Недостатки метода
- Не обеспечивается управление доступом к конкретным интерфейсам, портам, логическим интерфейсам и слотам на устройстве (или ко всем, или ни к какому);
- Команды, доступные на нижних уровнях привилегий, всегда выполняются на более высоких уровнях;
- Команды, для которых задан более высокий уровень привилегий, недоступны для пользователей с более низкими привилегиями;
- При задании набора команд для уровня в конечном итоге неизбежно этот набор будет избыточным.
Вот статья с сайта CISCO с некоторым описанием команды privilege
.