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 на устройства. Далее для краткости не пишу название имя коммутатора в строке вывода (S1
).
Пример 1
Посмотрим на уровень 1:
> show privilege Current privilege level is 1 > ? ... ping Send echo messages ... traceroute Trace route to destination ... > show ? aaa Show AAA values acircuit Access circuit info adjacency Adjacent nodes alps Alps information ancp ANCP information aps APS information ... - команды show доступны, но если промотать вниз команды running-config среди них нет > 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):
# enable # configure terminal (config)# enable secret Cisco15
Вот и всё, на этом настройка для администратора завершена. 🙂
Настройка нового уровня привилегий
Настройка нового уровня производится из под привилегий уровня 15. Просмотр текущего уровня:
# show privilege
Сначала задаётся пароль для нового уровня привилегий:
(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
Сначала нужно настроить пароль для нового уровня. Без пароля будет ругаться, точнее с более высокого уровня зайти можно, с более низкого нет, вот так это выглядит:
# show privilege Current privilege level is 15 # enable 2 # - всё ok, перешли с 15 уровня на 2 # enable 1 > enable 2 % No password set - с уровня 1 зайти на "беспарольный" уровень 2 уже нельзя > enable 0 > enable 1 % No password set - то же самое > enable - ввод пароля уровня 15 # config t (config)# enable secret level 2 Сisco2
Проверка уровня 2
Пока для уровня 2 мы ничего не настраивали (кроме пароля), зайдём на этот уровень и посмотрим:
# enable 2 # 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 ... > clear http client statistics >
А вот это уже плохо, по умолчанию доступна команда clear
. Первая подстава. Понятно что много испортить не удастся, но это само по себе неправильно. Перенесём команду на 15 уровень:
# enable - ввод пароля уровня 15 # config t (config)# privilege exec level 15 clear (config)# end # enable 2 - ввод пароля уровня 2 # clear ? % Unrecognized command
Точно так же поступим с командой set
. Количество команд может отличаться от версии IOS. Надо всё внимательно просмотреть.
Просмотр конфигурации
Ожидаемо получаем для 2 уровня привилегий:
# show running-config ^ % Invalid input detected at '^' marker.
Конфигурация не выводится. Хорошо, разрешаем show running-config
в явном виде и ещё раз проверим:
# enable # config t (config)# privilege exec level 2 show running-config (config)# end # enable 2 # 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 уровне:
# enable # config t (config)# no privilege exec level 2 show running-config (config)# end # show run ... privilege exec level 15 show running-config ...
Поэтому правильно отвязывать только через reset
:
(config)# privilege exec reset show running-config
Команда more
Команда more
даёт возможность просматривать содержимое файлов прямо из консоли. Поэтому чтобы дать права на просмотр конфигурации для уровня 2:
# enable # config t (config)# privilege exec level 2 more (config)# end # enable 2 # 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 privilege exec level 15 set ...
Пример 4
Настроим для для специалиста первой линии сохранение конфигурации и перенос портов между VLANs для уровня 3:
# config t (config)# enable secret level 3 Cisco3 (config)# privilege exec level 3 write memory (config)# privilege exec level 3 configure terminal (config)# privilege exec level 3 show running-config (config)# privilege configure level 3 interface (config)# privilege interface level 3 description (config)# privilege interface level 3 switchport access vlan (config)# end
Выделил для каких режимов мы настраиваем команды. И тут следующая подстава:
# enable 3 # config t (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 netconf Configure NETCONF no Negate a command or set its defaults sasl Configure SASL wsma Configure Web Services Management Agents
Мы можем сбросить любой интерфейс (и транк к другому коммутатору) на дефолт. И не только. В режиме конфигурирования всё серьёзнее, поэтому переносим лишние команды на 15 уровень.
... privilege configure level 15 beep privilege configure level 15 cts privilege configure level 15 default privilege configure level 15 no privilege configure level 15 netconf privilege configure level 15 sasl privilege configure level 15 wsma ...
Остаётся только конфигурирование интерфейса. При такой настройке специалист первой линии не сможет ничего особенно испортить.
# enable 3 # config t (config)#? Configure commands: end Exit from configure mode exit Exit from configure mode help Description of the interactive help system interface Select an interface to configure
Настройка для интерфейса
Заходим на интерфейс и смотрим что там доступно:
(config-if)#? Interface configuration commands: default Set a command to its defaults description Interface specific description 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
Убираем default
.
... privilege interface level 15 default ...
Для уровня 3 определен доступ к интерфейсам, поэтому вывод конфигурации уже не пустой, но и не полный. Видна только настройка интерфейсов и то не вся, а лишь та, к которой есть доступ в режиме конфигурирования. Если нужен просмотр полной конфигурации, то опять же команда more system:running-config
доступна. При этом все нужные команды write memory
, show
для интерфейсов и VLANs — работают нормально.
# write memory Building configuration... [OK] # show vlan br ... 3 VLAN0003 active Gi0/1 ... # show running-config Building configuration... Current configuration : 1747 bytes ! ! interface GigabitEthernet0/0 ! interface GigabitEthernet0/1 switchport access vlan 3 .. --More--
Команды no и switchport для интерфейса
Проверим различные варианты.
(config-if)# no ? description Interface specific description switchport Set switching mode characteristics (config-if)# no swi (config-if)# no switchport ? access Set access mode characteristics of the interface (config-if)# no switchport acc (config-if)# no switchport access ? vlan Set VLAN when interface is in access mode (config-if)# no switchport access vlan ? <cr>
То есть командой no
ничего не испортим.
(config-if)# switchport ? access Set access mode characteristics of the interface (config-if)#switchport access ? vlan Set VLAN when interface is in access mode (config-if)#switchport access vlan ? <1-4094> VLAN ID of the VLAN when this port is in access mode (config-if)# switchport access vlan 3 % Access VLAN does not exist. Creating vlan 3
Тут тоже всё нормально. Отсутствующая VLAN создаётся автоматически, хоть мы этого и не разрешали.
Port security
Понадобятся ещё вот такие настройки:
... privilege exec level 3 show port-security privilege exec level 3 show port-security interface privilege interface level 3 switchport port-security privilege interface level 3 switchport port-security maximum privilege interface level 3 switchport port-security mac-address sticky ...
Конечная конфигурация
Что же сохранилось в конфигурации после манипуляций с уровнями (данные могут отличаться)?
... privilege interface level 3 switchport port-security mac-address sticky privilege interface level 3 switchport port-security mac-address privilege interface level 3 switchport port-security maximum privilege interface level 3 switchport port-security privilege interface level 3 switchport privilege interface level 3 description privilege interface level 3 default switchport port-security mac-address sticky privilege interface level 3 default switchport port-security mac-address privilege interface level 3 default switchport port-security maximum privilege interface level 3 default switchport port-security privilege interface level 3 default switchport privilege interface level 3 default description privilege interface level 15 default privilege configure level 15 wsma privilege configure level 15 netconf privilege configure level 3 interface privilege configure level 15 sasl privilege configure level 15 beep privilege configure level 15 cts privilege configure level 15 default wsma privilege configure level 15 default netconf privilege configure level 3 default interface privilege configure level 15 default sasl privilege configure level 15 default beep privilege configure level 15 default cts privilege configure level 15 default privilege configure level 15 no wsma privilege configure level 15 no netconf privilege configure level 3 no interface privilege configure level 15 no sasl privilege configure level 15 no beep privilege configure level 15 no cts privilege configure level 15 no 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 port-security interface privilege exec level 3 show port-security privilege exec level 3 show running-config privilege exec level 3 show privilege exec level 15 set privilege exec level 15 clear ...
Как видно тут гораздо больше чем мы написали. Важно отметить, что при прописывании команды для уровня нужно учитывать гранулярность.
... privilege interface level 3 switchport port-security ...
Если так прописать, доступ именно к этой команде будет, но дальнейшее её ветвление (port-security maximum
, port-security mac-address sticky
) невозможно. То есть эти команды надо прописывать отдельно.
Может быть кто-то решит дополнительно дать возможность передёрнуть порт или включить неиспользуемый (но это стрёмно):
(config)# privilege interface level 3 shutdown (config)# privilege interface level 3 no shutdown
Ассоциация с пользователем
Можно связать уровень привилегий и учетную запись пользователя на устройстве:
(config)# username Helpdesk privilege номер_уровня secret пароль
Тогда при входе на устройство пользователь автоматически получает связанный с ним уровень привилегий. Для создания такого пользователя необходимы привилегии уровня 15.
Вывод
Метод Уровней привилегий негибкий. Его удобно использовать в основном когда нужно добавить буквально несколько команд. Если же команд нужно добавить много (но не все) для некоторого уровня, то очень громоздкая настройка. И возможно не получится реализовать так, как ставится в задаче из-за ограничений метода.
Недостатки метода
- Не обеспечивается управление доступом к конкретным интерфейсам, портам, логическим интерфейсам и слотам на устройстве (или ко всем, или ни к какому);
- Команды, доступные на нижних уровнях привилегий, всегда выполняются на более высоких уровнях;
- Команды, для которых задан более высокий уровень привилегий, недоступны для пользователей с более низкими привилегиями;
- При задании набора команд для уровня в конечном итоге неизбежно этот набор будет избыточным.
Вот статья с сайта CISCO с некоторым описанием команды privilege
.