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 на устройства. Далее для краткости не пишу название имя коммутатора в строке вывода (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.

Leave a Comment

Scroll to Top