Ipsysctl tutorial 1.0.4

         

Как произвести запись в переменные


Информация в переменные ipsysctl может заноситься двумя способами, которые обусловливают два совершенно различных метода. Первый из них -- с помощью команды sysctl, которая имеется в большинстве современных дистрибутивов. Второй способ -- посредством файловой системы /proc, которая должна иметься в любом дистрибутиве Linux, в котором ядро собрано с поддержкой этой файловой системы.

Управляться с командой sysctl немного сложнее, чем с файловой системой /proc. Как уже упоминалось ранее, при работе с командой sysctl вам нужно немножко больше, чем просто ядро. Однако sysctl предлагает лучший вариант внесения большого количества изменений. В этом случае все необходимые настройки могут быть записаны в конфигурационный файл и затем внесены в систему единственным вызовом команды sysctl. Другими словами, sysctl предлагает более гибкий способ настройки системы.

Файловая система /proc предоставляет более простой способ изменения настроек. Поэкспериментировав с настройками и выяснив их необходимый объем, мы можем записать эти настройки в файл sysctl.conf и затем воспроизводить их командой sysctl в момент загрузки системы. Конечно, можно написать сценарий на языке командной оболочки, который будет выполнять необходимые настройки через интерфейс файловой системы /proc, но такой сценарий уступает в читабельности конфигурационному файлу, передаваемому sysctl. Поэтому, если вы планируете выполнять достаточно большой объем настроек ipsysctl, то лучше будет обратиться к помощи команды sysctl.



С помощью файловой системы /proc


Интерфейс файловой системы /proc предоставляет простой доступ к переменным ipsysctl, однако, он более подходит для экспериментов с настройками, либо когда команда sysctl отсутствует в системе. Очень удобно пользоваться файловой системой /proc в отдельных случаях, когда переменная не должна включаться до определенного момента во время загрузки. Например, было бы просто замечательно, если бы переменная ip_forward включалась уже после того, как будет запущен брандмауэр.

Все что вам необходимо, чтобы пользоваться таким методом чтения-записи переменных -- это команды cat и echo. Очень трудно поверить в то, что у вас нет какой либо из них. Практически невозможно установить систему так, чтобы в ней не было этих команд.

Прежде всего, вам нужно запомнить, что все переменные, которые могут быть использованы или изменены, находятся в каталоге /proc/sys/. Все переменные, которые описываются в данном руководстве, находятся в каталоге /proc/sys/net/ipv4. В общем, для начала вам следует набирать команду

cd /proc/sys/net/ipv4

Чтобы просмотреть список доступных переменных, следует выполнить команду

ls

Проще говоря -- вы все это уже должны знать! Если это не так, то вы взялись читать не то руководство! Чтобы посмотреть значение конкретной переменной, выполните команду cat ip_forward. На мониторе это будет выглядеть примерно так:

[blueflux@work1 ipv4]$ cat ip_forward

0 [blueflux@work1 ipv4]$

Как вы можете убедиться, значения переменных могут быть прочитаны любым, кто имеет доступ к системе. Это может показаться вам проблемой с точки зрения безопасности, поскольку любой, имеющий доступ к системе сможет выяснить все настройки системы.

К сожалению невозможно ограничить права доступа к файловой системе /proc. Дело в том, что все права на доступ жестко "зашиты" в нее, а потому "вручную" они не изменяются. Если вы очень, ОЧЕНЬ захотите изменить права доступа, то вы сможете сделать это внеся изменения в исходный текст программ, которые находятся в каталоге linux/fs/proc.

Для записи значения в переменную воспользуйтесь командой echo. Обычно, команда echo используется для вывода на экран, но мы можем перенаправить вывод и в файл. Для случая bash это может выглядеть примерно так:

[root@work1 ipv4]# echo "1" > ip_forward

[root@work1 ipv4]#

Как вы уже наверняка заметили, на сей раз мы находимся в каталоге, где лежит файл (переменная) ip_forward, поэтому не был указан полный путь к переменной. Операции записи доступны только если у вас есть права суперпользователя root. Под простым пользователем попытка записи в переменную будет выглядеть примерно так:

[blueflux@work1 ipv4]$ echo "1" > ip_forward

bash: ip_forward: Permission denied [blueflux@work1 ipv4]$

Обратите внимание на то, что все команды из примеров запускаются в соответствующем каталоге. По этой причине не указывается полный путь к переменным.



С помощью sysctl




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

sysctl -a

Эта команда выведет список всех переменных, в котором имена переменных отделены символом "=" от их значений. Для вывода списка переменных можно использовать ключи -a и -A. Ключ -a приводит к выводу списка переменных, отделенных от их значений символом "=", а ключ -A -- выводит список в табличной форме (как описывается в man sysctl), но на сегодняшний день эта особенность (имеется ввиду -- вывод в табличной форме) еще не реализована, надеюсь в будущем этот недостаток будет исправлен.

Как вы можете заметить, значительная часть переменных не имеет отношения к ipsysctl. Также, наверняка от вас не ускользнула и нотация переменных (стиль записи). В ipsysctl разделитель"/" заменен на символ "." (точка). Однако sysctl корректно воспримет и разделитель "/", так что с этой стороны проблем возникать не должно. Если вам нужно просмотреть отдельную переменную, то указать это можно следующим образом:

sysctl net.ipv4.tcp_sack

Для записи значения в переменную следует воспользоваться ключом -w, за которым следуют имя переменной и новое значение, отделенной от имени знаком "=", т.е. примерно так:

sysctl -w net.ipv4.tcp_sack=0

Эта команда запишет в переменную tcp_sack value значение 0 и выведет ее на экран в качестве подтверждения. Вобщем ничего особенного. Для того, чтобы внести изменения, находящиеся в конфигурационном файле (который мы обсуждали выше), следует воспользоваться ключом -p, примерно так:

sysctl -p

Эта команда внесет все изменения, которые содержатся в файле /etc/sysctl.conf. Если возникнет потребность в использовании другого имени файла, то нужно указать этот файл в командной строке:

sysctl -p /etc/testsysctl.conf

Этой командой все необходимые настройки будут взяты не из файла по-умолчанию /etc/sysctl.conf, а из указанного в командной строке -- /etc/testsysctl.conf. Формат конфигурационного файла sysctl.conf очень прост. Прежде всего -- строки, начинающиеся символом ";" или "#", являются комментариями. Все командные строки начинаются с пути к переменной, включая имя самой переменной, далее следуют символ "=" и значение, которое должно быть записано в переменную. Путь к переменной указывается относительно /proc/sys. Ниже приводится пример файла sysctl.conf:

# Это комментарий net.ipv4.ip_forward = 0 net.ipv4.conf.all.rp_filter = 1 kernel.sysrq = 0

В этом файле в переменную net.ipv4.ip_forward записывается 0, т.е. отключается форвардинг (передача транзитных пакетов) между сетевыми интерфейсами. Если вам необходимо разделять единственное подключение к Internet между несколькими компьютерами, то в эту переменную нужно записать 1. Затем в переменную net.ipv4.conf.all.rp_filter записывается 1, включая тем самым, политику фильтрации маршрутов. Эта переменная сообщает ядру о необходимости фильтрации пакетов по их исходящему адресу.

И наконец, посредством записи значения 0 в переменную kernel.sysrq (которая собственно не имеет никакого отношения к сетевой подсистеме), отключается комбинация клавиш sysrq, которая используется при крахе системы. Эта строка добавлена лишь с цель продемонстрировать, что можно изменять и другие переменные, не являющиеся частью ipsysctl.