Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

2004 г.

Ipsysctl tutorial 1.0.4

Oskar Andreasson, перевод Андрея Киселева

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

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

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

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

2.1. С помощью 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.

2.2. С помощью файловой системы /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]$
  

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

К сожалению невозможно ограничить права доступа к файловой системе /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]$
  

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

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...