Содержание
Список примеров
Copyright (c) 2007 Connexion project, Peter V. Saveliev.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found on the GNU site[1].
Ncsh является приложением на базе Connexion, предназначенным для настройки сетевых параметров операционной системы. Благодаря Connexion, ncsh имеет модульную структуру, которую можно легко расширять либо изменять под свои нужды.
Среди важных осбенностей ncsh нужно отметить относительно простую настройку шейпинга траффика и управления VLAN- и bridge-интерфейсами.
# apt-get install ncsh
# vi /etc/connexion/config
# service ncsh start
# chkconfig ncsh on
Приложение ncsh состоит из нескольких компонентов, о которых необходимо иметь некоторое представление перед использованием. Системный сервис на старте операционной системы обеспечивает настройку сетевых параметров, а во время остановки — корректное удаление настроек. Во время работы системный сервис даёт возможность изменять настройки через специализированный шелл. Между запусками операционной системы настройки сохраняются в конфигурационном файле.
В системах ALT Linux запуск и остановка сервиса производятся командой service. Например, чтобы запустить ncsh, нужно с правами суперпользователя запустить service ncsh start. Для того, чтобы заставить ncsh заново считать настройки и применить то, что изменилось, нужно запустить команду service ncsh reload. Список всех доступных команд можно получить по service ncsh help. Чтобы убедиться, что сервис будет стартовать во время загрузки операционной системы, потребуется команда chkconfig ncsh on.
Настройки ncsh хранятся в двух файлах конфигурации. Первый —
/etc/connexion/config
. Это файл собственно настроек
системы. Второй — /etc/connexion/acl
, это файл
настроек доступа для специализированного шелла.
Специализированный шелл работает с системным сервисом через
UNIX-socket /var/run/connexion/socket
.
Системный сервис работает от имени суперпользователя, так как ему нужно менять настройки ядра операционной системы. Однако доступ через шелл к нему может не требовать таких прав. Потенциально, это может быть брешью в безопасности, поэтому при настройке доступа для кого-либо ещё, кроме рута, нужно соблюдать осторожность.
Первый рубеж, на котором осуществляется управление доступом,
это UNIX-socket /var/run/connexion/socket
. Так
как это обычный файл, то он несёт вполне обычные права доступа.
По умолчанию, он доступен на чтение и запись для суперпользователя
и группы netadmin, т.е. «из коробки» предоставляется
доступ группе сетевых администраторов. Права на этот файл можно
менять, но помните о безопасности.
Если пользователь имеет права на доступ к /var/run/connexion/socket
,
это ещё не означает, что ему будут доступны команды ncsh. На данный
момент в Connexion (основа ncsh) реализована примитивная система
контроля доступа к командам. Для этого ядро просматривает таблицу
ACL для пользователей и групп, и если находит совпадение в имени
команды и пользователя (или группы), то позволяет выполнение. Если
совпадений обнаружено не было, ядро Connexion возвращает «permission
denied». Чтобы добавить для пользователя или группы право
на выполнение какой-либо команды ncsh, нужно внести соответствующую
строку в файл /etc/connexion/acl
. Файл состоит
из записей, по одной записи на строку. Каждая строка состоит из полей,
разделённых двоеточиями. Первое поле должно быть +acl
.
Второе — путь до команды, вместе с префиксом «xshell
»,
например, xshell configure network
. Знак «*»
означает доступ ко всем командам. Третье поле должно быть «user»
или «group», в зависимости от того, это разрешение для
пользователя или группы. Четвёртое поле — имя пользователя или группы.
Запуск шелла производится командой ncsh. Поскольку файл настроек является, фактически, скриптом для шелла, то в оболочке доступны все те же команды, что и в файле настроек, и наоборот. Некоторые примеры конфигурации можно посмотреть в соответствующем файле документации.
Оболочка (шелл) ncsh несколько отличается от привычного bash и похожа, скорее на шелл ОС семейства Cisco IOS или JunOS. Поскольку некоторые команды образуют узлы дерева настроек (такие, например, как configure, network и т.п.), то применение этих команд автоматически изменяет текущий контекст шелла на созданный узел. Чтобы выйти из нового контекста обратно, нужно использовать или команду pop, или сочетание клавиш Ctrl-D.
Пример 2. Работа с контекстами в оболочке ncsh
Обратите внимание на изменения контекста, которые отражены в приглашении командной строки (перед знаком «>»)
xshell > configure configure > network network > interfaces interfaces > pop network > pop configure > Ctrl-D xshell >
Оболочка ncsh обеспечивает автодополнение команд и их параметров с помощью механизмов readline. Однако автодополнение несколько отличается от принятого в bash. Во-первых, для удобства операторов, привыкших к управляемому сетевому оборудованию, автодополнение вызывается не только клавишей Tab, но и клавишей ?. Во-вторых, варианты автодополения выводятся вместе с короткими подсказками по доступным командам.
Пример 3. Автодополнение команд
xshell > configure network Tab * internal: ! - Input a comment for the next command call - Call a function commit - Commit new commands in the state tree debug - Switch debug output declare - Declare a function echo - Print a string merge - Turn ON `merge` mode no - Cancel an operation pop - Pop context replay - Replay a transaction from this node shutdown - Shutdown a server transaction - Trace transaction tree tree - Trace current state tree * command: filter - Declare a branch filter interfaces - Configure network interfaces on - Use a filter for subtree routing - Configure routing engine tc - Declare traffic controls xshell > configure network interfaces
Пример 4. Автодополнение параметров
xshell > configure network interfaces ethernet Tab * parameter: $1 - interface number: <interface> xshell > configure network interfaces ethernet 0
Введённые команды, если они относятся к настройке системы, не исполняются немедленно, а выстраиваются в очередь на исполнение. Это даёт возможность оператору ещё раз оценить команды, которые он собирается исполнить и подтвердить либо отвергнуть транзакцию. Чтобы посмотреть, какие команды ждут исполнения, нужно использовать команду transaction. Чтобы посмотреть, какие команды уже исполнены, нужно использовать команду tree. Чтобы подвердить транзакцию, нужна команда commit.
Пример 5. Отложенное исполнение
xshell > configure network interfaces ethernet 0
ethernet 0 > address 10.0.0.1/24
ethernet 0 > transaction
!
configure
!
network
!
interfaces
!
ethernet 0
address 10.0.0.1/24
ethernet 0 > commit
Для отмены команды, выполненной в текущем контексте, нужно использовать команду no. Это относится как к уже подтверждённым, так и к ещё не подтверждённым командам. В первом случае понадобится commit, во втором он не нужен.
Пример 6. Отмена команд
ethernet 0 > tree! configure ! network ! interfaces ! ethernet 0 address 10.0.0.1/24
ethernet 0 > address 192.168.0.1/24 ethernet 0 > no address 10.0.0.1/24 ethernet 0 > commit ethernet 0 > tree! configure ! network ! interfaces ! ethernet 0 address 192.168.0.1/24
ethernet 0 >
Иногда можно увидеть работу команды no, даже если напрямую её никто не вводил. Это случается при изменении уникальных команд.
Пример 7. Изменение уникальной команды
ethernet 0 > tree! configure ! network ! interfaces ! ethernet 0 address 192.168.0.1/24 speed 100
ethernet 0 > speed 10 ethernet 0 > transaction! configure ! network ! interfaces ! ethernet 0 speed 10 no speed 100
ethernet 0 >
Иногда требуется заново «проиграть» конфиг, начиная от текущего контекста. Для этого используется команда replay. Например, она необходима в том случае, когда шейпер на интерфейсе описан через функцию: Connexion пока что не рестартует автоматом все секции, которые делают вызов функции, если тело функции изменилось. Нужно зайти в контекст интерфейса и вызвать команду replay.
Также команды replay и commit полезны в сочетании с командой debug. В этом случае они позволят просмотреть, какой шелл-код собираются послать модули на исполнение:
Пример 8. Отладочный вывод
ethernet 0 > tree! configure ! network ! interfaces ! ethernet 0 address 192.168.0.1/24 speed 100
ethernet 0 > debugmessage: service debug switched ON
ethernet 0 > replayexec: /sbin/ip address del dev eth0 192.168.0.1/24 exec: /sbin/ip address add dev eth0 192.168.0.1/24 exec: /usr/sbin/ethtool -s eth0 speed 10 exec: /sbin/ip link set dev eth0 up
ethernet 0 >
Если конфигурация была подтверждена через команду commit в режиме отладки, то это означает, что она не была применена на операционной системе. Чтобы всё-таки применить конфигурацию, нужно выключить отладку (ещё раз запустить команду debug) и запустить replay.
Для того, чтобы сохранить результат работы в оболочке в
файл конфигурации, необходимо, находясь в корневом контексте (xshell
),
выполнить команду backup write.
Чтобы восстановить конфигурацию из файла, нужно выполнить команду backup restore. Команда backup resurrect восстанавливает конфигурацию, но не применяет её к операционной системе.