CISCO RBAC часть 1

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 номер_уровня:

CISCO RBAC
  • Команда 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.

Оставьте комментарий

Прокрутить вверх
%d такие блоггеры, как: