пятница, 2 декабря 2016 г.

Режимы командной строки Cisco

   Не секрет, что помимо того, что компания Cisco делает хорошее оборудование для различных целей, одной из жемчужин данной компании является отличный, хорошо продуманный интерфейс командной строки, он же CLI (command-line interface). Выполнен он достаточно хорошо и логично. Настолько, что у других вендоров за преимущество считается сделать свое сетевое оборудование с "cisco-like", то есть буквально "похожим на cisco", интерфейсом командной строки.
   Одной из особенностей CLI является наличие иерархии выполнения команд. Это позволяет выполнить как разделение по уровням правового доступа к оборудованию, так и обезопасить себя в некоторой степени от случайного выполнения команд, способных все порушить. Название этих уровней периодически встречаются в статьях, руководствах по настройке и в речи коллег-собеседников. Ниже постараюсь описать уровни и структуру командной строки так, чтобы знать, какой уровень за что отвечает, и на каком уровне можно\нужно выполнять те или иные команды.

   Иерархическую структуру командной строки можно представить следующим следующей картинкой:
   В принципе, на этом можно было бы закончить. Но практика показывает, что картинка эта не всегда всем всё хорошо и наглядно объясняет. Поэтому поясню назначение каждого из уровней.

Уровень 1 - Пользовательский, он же режим User EXEC

 
   Пользовательским режим, который встречает нас в случае, если мы подключаемся к устройству и вводим пароль и логин пользователя с уровнем привилегий отличным от 15 - максимального. Данный уровень - самая низкая ступень в настройке оборудования, который позволяет выполнить ограниченный набор команд, представляющих в основном диагностическую ценность типа ping, show (ограниченно, например version, history, inventory), help, traceroute и другие. Это тот самый уровень, который подразумевается, когда админ говорит своему напарнику: "Иди, посмотри, что там с железкой, НО ТОЛЬКО НИЧЕГО НЕ ТРОГАЙ И НЕ СЛОМАЙ!!!!!".

Уровень 2 - Привилегированный, он же Privileged EXEC mode

 
   Это привилегированный режим EXEC, в который можно перейти из пользовательского, набрав команду enable. В литературе называют этот уровень enable-режимом, привилегированным режимом, EXEC режимом. Кстати, обратите внимание, что официально Cisco разделяет EXEC на пользовательский и привилегированный, но в разговоре и неофициальной литературе в большинстве случаев подразумевают именно второй, Privileged EXEC режим, когда говорят EXEC.
   Данный уровень содержит в себе команды пользовательского уровня, а так же расширенный набор команд для диагностики оборудования и настроек. Кроме того, в нем можно посмотреть полный конфиг устройства, выполнив команду show running-config.
    На этом уровне практически нет каких-либо настроек, относящихся к устройству. Большая часть настроек выполняется на следующих уровнях.

Уровень 3 - Глобальный конфигурационный режим, он же Global Configuration Mode

 
   Как уже сказано выше, данный режим позволяет выполнить различные настройки, относящиеся непосредственно к оборудованию и не относящиеся к какому-либо блоку настроек. Например, настройка hostname выполняется именно здесь. Как и всегда здесь действует справка, вызываемая вводом в командную строку вопросительного знака.
   Перейти в указанный режим можно с помощью ввода команды configure terminal в привилегированном режиме.

Уровень 4 - Режим настройки отдельной функции

 
   У данного уровня нет конкретного названия, но по логике подходит именно указанное в заголовке. Суть этого уровня в том, что он позволяет выполнять настройку, относящуюся к какой-либо конкретной технологии или функции. Проще объяснить на примере. Например, необходимо настроить интерфейс. В глобальном конфигурационном режиме вводим команду interface, после чего указываем параметр, говорящий, какой именно интерфейс мы будем настраивать. Далее нас перебрасывает в режим настройки указанного интерфейса, где можно сделать настройку, относящуюся только к этому интерфейсу.

Вывод командной строки при работе на разных уровнях

 
   Prompt - это подсказка командной строки, позволяющая определить, на каком уровне иерархии мы в данный момент работаем и не стоит ли перейти на другой. Допустим, есть абстрактное устройство Cisco, к которому мы подключились. В командной строке мы увидим тот самый "промпт" или приглашение ко вводу:

DEVICE>

   DEVICE в данном случае - дефолтное имя устройства. Для маршрутизатора оно будет равно Router, коммутатор - Switch, ASA - ciscoasa. Знак больше (">") означает, что в данный момент мы находимся в пользовательском режиме.
   После ввода команды enable мы переходим в привилегированный режим:

DEVICE>enable
DEVICE#

   Знак октоторп, он же решетка, означает, что мы работаем в привилегированном режиме. Перейдем в режим глобальной конфигурации:

DEVICE#conf t
DEVICE(config)#


   В скобках указано, что мы теперь находимся в режиме глобальной конфигурации. Ну и дойдем до режима настройки интерфейса:

DEVICE(config)#interface g0/0
DEVICE(config-if)#

   Как видно, prompt командной строки говорит нам, что мы настраиваем интерфейс, с помощью добавления -if.


Некоторые особенности наследования команд между режимами и выполнение команды DO

 
   На каждом из уровней есть свой набор команд. Наследования между уровнями нет, за исключением того, что команды из уровня User EXEC полностью присутствуют на уровне Privileged EXEC. Но эти команды, равно как и команды из привилегированного уровня, отсутствуют уже на следующем уровне глобальной конфигурации. Данная логика позволяет избежать ошибочного выполнения команд или выполнение неверных настроек, когда руки уже вбили что-то деструктивное, палец над "энтером" уже занесен, в последнюю секунду мозг понимает, что случилась беда, но по инерции ввод был нажат. Но оказалось, что вы не в том режиме, и команда не принята системой. Это справедливо для таких устройств, как маршрутизаторы и коммутаторы.
   Для примера возьмем команду show inventory. Данная команда присутствует на уровне User EXEC. Она же перешла и на уровень Privileged EXEC. На уровне глобальной конфигурации ввод этой команды выдаст ошибку. Поэтому если мы находимся на уровне глобальной конфигурации, то нам необходимо будет вернуться на привилегированный уровень, чтобы выполнить эту команду. Однако, это не всегда удобно. Для того, чтобы выполнить команды привилегированного уровня (и только его! Никакого другого!), необходимо воспользоваться командой do, которая будет установлена перед вводимой командой привилегированного уровня. Стоит отметить, что в случае с do интерактивная справка не работает. Ниже пример использования do для ввода команды show inventory из-под режима настройки интерфейса:

DEVICE>
DEVICE>enable
DEVICE#
DEVICE#conf t
DEVICE(config)#
DEVICE(config)#interface g0/0
DEVICE(config-if)# do show inventiry

   Повторю, что do работает только для выполнения команд привилегированного режима из-под другого режима. Т.е. команду hostname, место которой находится в глобальном конфигурационном режиме, никаким способок нельзя вызвать ни из какого другого режима, кроме режима Global Configuration.
   В Cisco ASA же можно выполнять команды из режима EXEC в любом другом режиме, находящемся ниже по иерархическому уровню.  При этом использовать команду do не требуется.

3 комментария:

  1. Можно ещё бы добавить в статью описание реализации Role Based Access Control в IOS. Всё же концепция views гораздо более гибкая и удобная, чем privileges levels. Или можно это отдельной записью сделать, если описать и конфигурацию обоих типов, для сравнения их плюсов и минусов.

    ОтветитьУдалить
    Ответы
    1. К теме статьи не относится совсем.
      Больше того, view абсолютно неудобны на практике. Лучше TACACS+, это действительно удобно.

      Удалить
    2. Чуть позже сделаю обзор.

      Удалить