Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Файловая система /proc.

Рубрика: Безопасность -> Топология сети
Метки: | |
Среда, 25 февраля 2009 г.
Просмотров: 6749

Довольно интересной функцией Linux и других UNIX-систем является файловая система   /proc. Она дает возможность смотреть и менять парамет­ры ядра "на лету". На самом деле это псевдофайловая система. Здесь нет файлов в обычном понимании. «Файлы», находящиеся в каталоге /рrос, - это просто ссылки на области памяти ядра, в которых хранятся значения некоторых параметров ядра. В этой файловой системе можно найти немало интересной информации о любом запущенном процессе, использовании процессора и памяти и много другого.


     Некоторые файлы файловой системы /рrос нельзя изменить, можно только про­смотреть их. Редактировать можно файлы, которые находятся в каталоге /proc/sys/. В этом каталоге находятся параметры ядра, которые можно менять «на лету», без надобности перезагрузки компьютера и переком­пиляции ядра.

     Файлы файловой системы /рrос можно просматривать с помощью команды cat и редактировать текстовым редактором, к примеру vi (предпочитаю GNU Midnight Commander). Большинство файлов содержит всего лишь одно значение, следовательно, для его изменения можно пользоваться командой echo:

# cat /proc/sys/net/ipv4/tcp_fin_timeout 

6

# echo 4 > /proc/sys/net/ipv4/tcp_fin_timeout

# cat /proc/sys/net/ipv4/tcp_fin_timeout

4

     Утилита sysctl.

     В большинстве дистрибутивов есть утилита sysctl. Ее основное назначение - это управление файлами (параметрами) в каталоге /proc/sys/. При вводе команды sysctl без параметров показывается список всех допустимых пара­метров и их значений:

# sysctl

usage: sysctl [-n] variable ...

  sysctl [-n] -w variable=value ...

  sysctl [-n] -a

  sysctl [-n] -p <file> (default /etc/sysctl.conf)

  sysctl [-n] -A

     К примеру, укороченный вывод программы будет выглядеть так:

# sysctl -a

...

net.ipv4.ip_conntrack_max = 16376

net.ipv4.netfilter.ip_conntrack_generic_timeout = 600

net.ipv4.netfilter.ip_conntrack_icmp_timeout = 30

net.ipv4.netfilter.ip_conntrack_max = 16376

...

net.ipv4.tcp_low_latency = 0

...

net.ipv4.ip_default_ttl = 64

net.ipv4.ip_forward = 1

...

     В качестве разделителя утилита sysctl использует точку. Например, пара­метр net.ipv4.ip_conntrack_max соответствует файлу /proc/sys/net/ipv4/ip_conntrack_max.

     Для установки значений параметров служит флаг -w:

# sysctl -w kernel.hostname=fred

kernel.hostname = fred

# cat /proc/sys/kernel/hostname

fred

     Отдельные записи смотрят так:

# sysctl kernel.ostype

kernel.ostype = Linux

     Утилита grep дает еще больше возможностей по выводу отдельных параметров. Например, вывод параметров, связанных с tcp:

# sysctl -a | grep tcp

net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 10

net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120

net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 30

net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60

net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 432000

net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60

net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120

net.ipv4.tcp_low_latency = 0

net.ipv4.tcp_frto = 0

     /etc/sysctl.conf

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

     Формат файла такой:

Параметр = Значение

     Например:

kernel.core_uses_pid=1

net.ipv4.ip_forward = 1

kernel.sysrq=1

     При загрузке системы вызывается сценарий /etc/rc.d/rc.sysinit, который вызывает sysctl, и тот устанавливает значения из файла /etc/sysctl.conf.

     Безусловно, утилита sysctl очень удобна и есть в большинстве дист­рибутивов Linux, во многих случаях удобнее работать с /рrос напрямую с помощью команд cat и echo.