Архив метки: Linux

Debian: Установка и настройка NET-SNMP

http://pro-voip.com.ua net-snmpЗдесь все манипуляции проводятся на Debian Wheezy.

Установка net-snmp

root@deb# apt-get install snmp snmpd

snmp — SNMP (Simple Network Management Protocol) applications
snmpd — SNMP (Simple Network Management Protocol) agents

snmpd.conf — конфигурационный файл для Net-SNMP SNMP агента.

Редактируем файл /etc/snmp/snmpd.conf:

root@deb# nano /etc/snmp/snmpd.conf

Рестартуем демон snmpd:

root@deb# service snmpd restart

Проверяем (например):

root@deb# snmpwalk -v2c -c public localhost

Контроль доступа к snmpd можно организовать двумя способами:

  • Traditional Access Control — традиционный контроль доступа
  • VACM Configuration — View-Based Access Control Model

 

SNMPv1 и SNMPv2c

 

Традиционный контроль доступа

Создание read-only и read-write community:

rocommunity COMMUNITY [SOURCE [OID | -V VIEW [CONTEXT]]]
rwcommunity COMMUNITY [SOURCE [OID | -V VIEW [CONTEXT]]]

Создать read-only комьюнити с именем public, дать доступ ко всему дереву OID’ов, не ограничивая доступ к snmpd:

rocommunity public

Создать read-only комьюнити с именем public, дать доступ ко всему дереву OID’ов, разрешив доступ к snmpd только localhost:

rocommunity public localhost

Создать read-only комьюнити public, разрешить доступ с localhost’а к ветке .1.3.6.1.2.1.1:

rocommunity public localhost .1.3.6.1.2.1.1

Если нам нужно объединить несколько разных веток дерева OID’ов для одного community, используем именованые «view»:

view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.2

rocommunity public localhost -V systemview

Если нужна более гибкое управление доступом к SNMP, следует использовать другую модель управления — VACM.

 

Контроль доступа VACM

Для того, чтобы настроить доступ к snmpd по модели VACM, необходимо определить 4 директивы:

  • com2sec
  • group
  • view
  • access

com2sec определяет некое имя (security name), к нему привязываются ip-адрес и комьюнити, с которыми можно получить доступ к snmpd:

com2sec  [-Cn CONTEXT] SECNAME SOURCE COMMUNITY

SECNAME — security name;
SOURCE — имя хоста, ip-адрес хоста, или подсеть в формате ip/mask, с которого разрешен доступ к snmpd;
COMMUNITY — строка community;
CONTEXT — используется в SNMPv3

group определяет группу, к которой привязываются ранее созданные secname:

group GROUP {v1|v2c|usm|tsm|ksm} SECNAME

view определяет ветки дерева MIB, к которым будем давать доступ:

view VNAME TYPE OID [MASK]

VNAME — произвольное имя вьюшки. Имена могут повторятся, таким образом создается вьюшка в набором «веток» дерева OID’ов;
TYPE — included или excluded — действие: включить или исключить ветку с view;
OID — определенный OID или ветка;

access даем ранее созданной группе права на доступ к просмотру/записи определенной вьюшки — связка group — view:

access GROUP CONTEXT {any|v1|v2c|usm|tsm|ksm} LEVEL PREFX READ WRITE NOTIFY

GROUP — имя группы, определенное в шаге 2;
CONTEXT — default context —  «»

Пример:

«Пользователь» local — это пользователь локалхоста с комьюнити secret33, который входит в группу rwgroup. Пользователи группы rwgroup имеют read-write права на view с названием all. Вьюшке all соответствует дерево .1.

«Пользователь» rouser1 может получить доступ с сети 10.10.10.0/24, а «пользователь» rouser2 — с ip-адреса 11.11.11.11/32. Комьюнити — public. «Пользователи» rouser1 и rouser2 входят в группу rogroup. Группа rogroup имеет read-only права на view с названием systemview, в которую входят такие ветки дерева — 1.3.6.1.2.1.1, 1.3.6.1.2.1.2, 1.3.6.1.2.1.25:

###############################################################################
# Access Control - VACM
###############################################################################

####
# First, map the "community name" into a "security name"
#          sec.name    source            community
com2sec    local       localhost         secret33
com2sec    rouser1     10.10.10.0/24     public
com2sec    rouser2     11.11.11.11/32    public

####
# Second, map the "security name" into a "group name":
#        groupName    securityModel    securityName
group    rwgroup      v2c              local
group    rogroup      v2c              rouser1
group    rogroup      v2c              rouser2

####
# Third, create a view for us to let the group have rights to:
#       name          incl/excl   subtree             mask(optional)
view    all           included    .1
view    systemview    included    .1.3.6.1.2.1.1
view    systemview    included    .1.3.6.1.2.1.2
view    systemview    included    .1.3.6.1.2.1.25

####
# Finally, grant the groups access to the view:
#         group        context    sec.model    sec.level    prefix    read            write    notif
access    rwgroup      ""         any          noauth       exact     all             all      none
access    rogroup      ""         any          noauth       exact     systemview      none     none

# -----------------------------------------------------------------------------

 

SNMPv3

 

В SNMPv3 главным действующим «лицом» выступает не community, а user. Поэтому перед манипуляциями с контролем доступа, нужно сначала создать пользователя. При создании пользователя, мы также определяем уровень безопасности.

В SNMPv3 предусмотрено три уровня безопасности:

  • noAuthNoPriv — без аутентификации, без шифрования
  • authNoPriv — с аутентификацией (SHA|MD5), без шифрования
  • authPriv — с аутентификацией (SHA|MD5),с шифрованием (DES|AES)

Тип аутентификации — MD5 или SHA; Алгоритм шифрования — DES или AES;
SHA-аутентификация и DES/AES-шифрование используют OpenSSL — OpenSSL должен быть установлен, snmpd должен иметь поддержку OpenSSL.

Узнать, с какими опциями был собран net-snmp можно с помощью следующей команды:

root@deb# net-snmp-config --configure-options

Если —with-openssl в выводе есть, значит net-snmp собран с поддержкой openssl, если кто не догадался.

MD5 не использует OpenSSL.

 

Создание пользователя snmpv3

Для этого используется следующая команда:

net-snmp-config  —create-snmpv3-user [-ro] [-A authpass] [-X privpass] [-a MD5|SHA] [-x DES|AES] [username]

Минимальная длина authpass и privpass — 8 символов.

Сначала останавливаем демон snmpd:

root@deb# service snmpd stop

Затем создаем пользователя, например, rouserv3:

root@deb# net-snmp-config --create-snmpv3-user -ro -A testtest -X testtest -a MD5 -x DES rouserv3
adding the following line to /var/lib/snmp/snmpd.conf:
   createUser rouserv3 MD5 "testtest" DES testtest
adding the following line to /usr/share/snmp/snmpd.conf:
   rouser rouserv3

При этом создается 2 записи в двух дефолтных конфигурационных файлах, о чем и пишет net-snmp-config в своем выводе. Если вы, не запуская snmpd, посмотрите на файл /var/lib/snmp/snmpd.conf, то в конце файла вы действительно увидите там строку «createUser rouserv3 MD5 «testtest» DES testtest». При запуске демона snmpd эта строка удаляется, появляется вместо нее ключ.

Запись «rouser rouserv3» в файле /usr/share/snmp/snmpd.conf — это настройка контроля доступа. Мало ведь создать пользователя, нужно дать ему какие-то права. Запись «rouser rouserv3» можно перенести в /etc/snmp/snmpd.conf (что я и делаю), а дальше использовать либо традиционный контроль доступа (оставив эту строку «rouser rouserv3»), либо VACM (по аналогии, как это настраивалось выше с SNMPv2c, только там были rocommunity и rwcommunity, а здесь rouser и rwuser).

 

Традиционный контроль доступа

Создание read-only и read-write-пользователя:

rouser USER [noauth|auth|priv [OID | -V VIEW [CONTEXT]]]
rwuser USER [noauth|auth|priv [OID | -V VIEW [CONTEXT]]]

noauth, auth, priv — помним про три уровня безопасности? было описано выше. Как по мне, так тут не хватает опции SOURCE, как в варианте в SNMP v1 и v2c с комьюнити. Для ограничения доступа с определенных ip-адресов нужно будет использовать фаервол. Ну и дальше примеры.

Дать пользователю rouser1 read-only права на ветку .1.3.6.1.2.1.1, без аутентификации и без шифрования:

rouser    rouser1    noauth    .1.3.6.1.2.1.1

Проверка:

root@deb# snmpwalk -v3 -u rouser1 -l noAuthNoPriv localhost

Дать пользователю rouser1 read-only права на ветку .1.3.6.1.2.1.1, с аутентификацией, но без шифрования:

rouser    rouser1    auth    .1.3.6.1.2.1.1

Проверка:

root@deb# snmpwalk -v3 -u rouser1 -l authNoPriv -a MD5 -A testtest localhost

Дать пользователю rouser1 read-only права на ветку .1.3.6.1.2.1.1, с аутентификацией и с шифрованием:

rouser    rouser1    priv    .1.3.6.1.2.1.1

Проверка:

root@deb# snmpwalk -v3 -u rouser1 -l authPriv -a MD5 -A testtest -x DES -X testtest localhost

 

Контроль доступа VACM

В варианте с SNMP v1 и v2c для настройки VACM нужно было использовать 4 директивы: com2sec, group, view и access. В варианте с SNMP v3 — только три, com2sec использовать не нужно, у нас уже создан snmpv3-пользователь (он уже и есть «security name»), которого можно добавить в группу.

###############################################################################
# Access Control - VACM for SNMPv3
###############################################################################

####
# First, создаем snmpv3-пользователей, как было описано выше.

####
# Second, map the "security name" into a "group name":
#        groupName    securityModel    securityName
group    rwgroup      usm              rwuser1
group    rogroup      usm              rouser1

####
# Third, create a view for us to let the group have rights to:
#       name          incl/excl   subtree             mask(optional)
view    all           included    .1
view    systemview    included    .1.3.6.1.2.1.1
view    systemview    included    .1.3.6.1.2.1.2
view    systemview    included    .1.3.6.1.2.1.25

####
# Finally, grant the groups access to the view:
#         group        context    sec.model    sec.level    prefix    read            write    notif
access    rwgroup      ""         any          noauth       exact     all             all      none
access    rogroup      ""         any          priv         exact     systemview      none     none

Отличие от настройки VACM в SNMP v1 и v2c — это указание securityModel — usm в директве group и указани sec.level в директиве access (sec.level может быть noauth, auth или priv)

snmpwalk

Опрос оборудования с помощью утилиты snmpwalk для SNMPv3:

# snmpwalk -v3 -l authPriv -u username-SNMPv3 -a SHA -A authpassword -x AES -X encryptionpassword 10.10.10.10

Debian: Как узнать температуру процессора?

http://pro-voip.com.ua debianlm-sensors — набор утилит для считывания значений датчиков температуры, вольтажа и оборотов куллеров. С помощью этих утилит можно ответить себе на вопрос «Какая сейчас температура у моего процессора?» Итак, что мы делаем…

1.Устанавливаем lm-sensors:

apt-get install lm-sensors

2. Определяем наличие датчиков в системе:

sensors-detect

3. Догружаем недостающие драйвера:

modprobe <недостающие модули>

4. И все, смотрим значения датчиков:

sensors

 

Установка lm-sensors на Debian Wheezy

root@deb# apt-cache search lm-sensors
...
lm-sensors - utilities to read temperature/voltage/fan sensors
...
root@deb# apt-get install lm-sensors

 

Определение датчиков в системе

Перед запуском команды sensors для считывания показаный с датчиков, нужно сначала определить, какие есть датчики в системе, и указать, показания каких из датчиков мы хотим увидеть в выводе команды sensors. С этим нам поможет утилита sensors-detect. Это интерактивная программа, запускаем ее на выполнение, читаем и отвечаем на вопросы. Рекомендуется оставить ответы по умолчанию (по умолчанию ответ Yes, просто нажимаем Enter)

root@deb# sensors-detect
# sensors-detect revision 6031 (2012-03-07 17:14:01 +0100)
# System: Supermicro X8SIL [0123456789]

This program will help you determine which kernel modules you need
to load to use lm_sensors most effectively. It is generally safe
and recommended to accept the default answers to all questions,
unless you know what you're doing.

Some south bridges, CPUs or memory controllers contain embedded sensors.
Do you want to scan for them? This is totally safe. (YES/no): yes
Module cpuid loaded successfully.
Silicon Integrated Systems SIS5595...                       No
VIA VT82C686 Integrated Sensors...                          No
VIA VT8231 Integrated Sensors...                            No
AMD K8 thermal sensors...                                   No
AMD Family 10h thermal sensors...                           No
AMD Family 11h thermal sensors...                           No
AMD Family 12h and 14h thermal sensors...                   No
AMD Family 15h thermal sensors...                           No
AMD Family 15h power sensors...                             No
Intel digital thermal sensor...                             Success!
(driver `coretemp')
Intel AMB FB-DIMM thermal sensor...                         No
VIA C7 thermal sensor...                                    No
VIA Nano thermal sensor...                                  No
...

Вывод дальнейший опущен, но, думаю, и так все понятно. Например, здесь был найден «Intel digital thermal sensor«, для которого необходимо будет догрузить драйвер coretemp.

...
To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
coretemp
jc42
w83627ehf
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!

Do you want to add these lines automatically to /etc/modules? (yes/NO)Y
Successful!

В конце своей работы sensors-detect укажет, какие драйвера необходимы и предложит их добавить в /etc/modules, чтобы они автоматически подгружались при загрузке/перезагрузке системы. Соглашаемся. Но нужно проверить, есть ли у вас эти модули вообще.

Подгружаем недостающие модули

root@deb# modprobe coretemp
root@deb# modprobe jc42
FATAL: Module jc42 not found.
root@deb# modprobe w83627ehf

jc42 — не найден, скорее всего, нужно обновить ядро… jc42 нужен для считывания данных темературного сенсора ST STTS2002 DIMM. Обновиться я сейчас не могу, а какая температура памяти как-то не особо важно, поэтому просто уберу его с /etc/modules

Просмотр значений

Вывод всех значений:

root@deb# sensors

Посмотреть значения датчиков в сыром неотформатированном виде:

root@deb# sensors -u

 

Viel Spaß!

CentOS: Полезные заметки

http://pro-voip.com.ua centos

Man

# yum install man.i686 man-pages.noarch
man.i686: A set of documentation tools: man, apropos and whatis
man-pages.noarch: Man (manual) pages from the Linux Documentation Project

Пользователи

Добавление пользователя:
# useradd <login name>
Пользователь создается с параметрами, описанными в /etc/default/useradd. Для изменения дефолтных параметров можно использовать опции команды useradd. Есть еще команда adduser, но это всего-навсего символическая ссылка на useradd.

Установка пароля новосозданного пользователя:
# passwd <login name>

По умолчанию пользователь не может выполнять команды с правами root’a, используя команду sudo -s:

[user1@srv]$ sudo -s
[sudo] password for user1:
user1 is not in the sudoers file.  This incident will be reported.

Править /etc/sudoers:
# visudo

В файле /etc/sudoers видим, что пользователи, которые входят в группу wheel, могут выполнять все команды:

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

Как вариант, можно добавить пользователя в группу wheel.

Добавить пользователя в дополнительную группу:
# usermod -a -G <group name> <login name>

-a — добавить пользователя в дополнительную группу (не меняя initial-группы пользователя), используется только совместно с опцией -G
-G — указывает, в какую именно группу (или группы) добавить пользователя. Группа должна быть создана ранее.

Добавить пользователя в группу wheel:
# usermod -a -G wheel user1

# cat /etc/group
...
wheel:x:10:root,user1

Проверка:

[user1@srv]$ sudo -s
[sudo] password for user1:
[root@srv]#

Добавить пользователя еще в несколько групп:
# usermod -a -G support,sales,management user1

 

Система

Посмотреть версию установленной OS Centos:

# cat /etc/centos-release
CentOS release 6.7 (Final)

lrwxrwxrwx. 1 root root 14 Nov 17 12:52 /etc/redhat-release -> centos-release
lrwxrwxrwx. 1 root root 14 Nov 17 12:52 /etc/system-release -> centos-release

/etc/redhat-release и /etc/system-release — это ссылки на centos-release

Посмотреть список возможных обновлений:
# yum list updates

Upgrage системы (например, с 6.0 до 6.7)
# yum update

 

Ядро и модули

Какие модули загружены:
# lsmod

Информация о модуле
# modinfo <module name>

Загрузить модуль на лету:
# modprobe <module name>

Выгрузить модуль на лету:
# modprobe -r <module name>

 

Автозагрузка модуля при старте системы

Для этого создаем скрипт и размещаем его в /etc/sysconfig/modules
Обязательные условия:
— имя скрипта должно иметь вид <some_words>.modules, например 8021q.modules
— скрипт, само собой, делаем исполняемым — chmod +x 8021q.modules
— сам скрипт запускает все тот же modprobe <имя модуля>

#!/bin/sh
/sbin/modprobe 8021q

не забываем про первую строку #!/bin/sh и путь к modprobe лучше указать полностью

 

Добавление своего скрипта в автозагрузку

Скрипт должен быть исполняемым

# ls -al /etc/iptables/iptables-start.sh
-rwxr—r—. 1 root wheel 83 Nov 28  2013 /etc/iptables/iptables-start.sh

Добавляем его в /etc/rc.local

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

/etc/iptables/iptables-start.sh

Скрипт выполняется после загрузки системы.

 

Сеть

DNS Настройка резолвера:

/etc/resolv.conf

seacrh provoip.in.ua
nameserver 8.8.8.8
nameserver 8.8.4.4

Настройка сетевых параметров:

/etc/sysconfig/network

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=srv.provoip.in.ua
GATEWAY=192.168.100.1

NETWORKING=yes (yes — сеть будет настраиваться автоматически из скриптов /etc/sysconfig/network-scripts, no — вручную)

 

Настройка сетевых интерфейсов:

/etc/sysconfig/network-scripts/ifcfg-*

В /etc/sysconfig/network-scripts есть файлы вида ifcfg-*, например ifcfg-eth0, ifcfg-eth1, ifcfg-lo — в них описываем необходимые настройки сетевых карт. Эти файлы передаются в качетсве аргумента в скрипты ifup, ifdown и т.п. Каждая сетевая карта имеет свой файл ifcfg-. Например, есть в системе сетевая карта, которая определяется как eth0. Для ее автонастройки после перезагрузки системы необходим соответствующий файл ifcfg-eth0.

 

Конфигурация сетевой карты (фиксированный ip-адрес):

DEVICE=eth0
BOOTPROTO=none
IPADDR=192.168.100.2
NETMASK=255.255.255.0
NETWORK=192.168.100.0
BROADCAST=192.168.100.255
ONBOOT=yes — включать интерфейс при загрузке или нет
NAME=eth0

Конфигурация сетевой карты (получение ip-адреса по dhcp):

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

BOOTPROTO=<protocol>, значения — none, dhcp, bootp — какой протокол использовать для получения настроек
BROADCAST=<address> — необязательно указывать, высчитывается автоматически
NETWORK=<address> — необязательно указывать, высчитывается автоматически
DEVICE=<name> — имя физического устройства

HWADDR=<MAC-address> — используется в серверах с несколькими сетевыми картами для того, чтобы убедиться интерфейсы получат свои правильные device-name. Т.е., например, настройки, прописанные для девайса eth0 всегда будут применяться к карте с вот таким вот HWADDR (Другими словами, сетевая карта с этим вот HWADDR всегда будет иметь имя eth0 и на при каких обстоятельствах не поменяет его на eth1). Директива не используется совместно с MACADDR.
MACADDR=<MAC-address> — можно перезаписать MAC-адрес физической сетевой карты (в форме AA:BB:CC:DD:EE:FF). Директива не используется совместно с HWADDR.

ETHTOOL_OPTS=<options> — указать опции утилиты ethtool, например, прибить жестко скорость и т.д
ETHTOOL_OPTS=»autoneg off speed 100 duplex full»

DNS1=<address>
DNS2=<address>
PEER_DNS=yes — изменять /etc/resolv.conf. При ONBOOT=dhcp PEER_DNS=yes — это дефолтное значение

SRCADDR=<address> — ip-адрес, котрый навешивается на исходящие пакеты (полезно если на интерфейсе прибито alias’ом несколько адресов)
USERCTL=<yes,no> — Не-root пользователи могут (или нет) управлять сетевой картой

 

Алиас на интерфейс:

Алиас — несколько ip-адресов на одном физическом интерфейсе

Файл для алиаса — ifcfg-<if-name>:<alias-value>

DEVICE=<ifname>:<alias-value>

!Алиас-интерфейсы не поддерживают DHCP

Пример

Физический интерфейс — файл ifcfg-eth0 (DEVICE=eth0)
Алиас на физический интерфейс — файл ifcfg-eth0:0 (DEVICE=eth0:0)
Еще один алиас на физический интерфейс — файл ifcfg-eth0:1 (DEVICE=eth0:2)
и т.д.

 

Файл-клон интерфейса:

Файл-клон используется для добавления каких-либо опций для одного и того же физического интерфейса.
Файл ifcfg-<if-name>-<clone-name>

Пример

Физический интерфейс — файл ifcfg-eth0 (DEVICE=eth0)
Клон физического интерфейса — файл ifcfg-eth0-custom (DEVICE=eth0)
Параметры, указанные в ifcfg-eth0 и ifcfg-eth0-custom комбинируются

 

802.1q в Centos

Должен быть загружен модуль 8021q
Проверяем:
# lsmod | grep 8021q

Если не загружен, загружаем:
# modprobe 8021q

Добавим автозагрузку модуля при старте системы (как это делается, смотрим выше)

! Для каждого влана создаем свой файл ifcfg-ethX.<vlan number> в /etc/sysconfig/network-scripts/. 

VLAN=yes
DEVICE=ethX.<vlan number>
IPADDR=192.168.100.2
NETMASK=255.255.255.0
ONBOOT=yes

Не лишним будет создать ifcfg- файл физического устройства перед этим.

Пример

Нужно создать vlan 222 на интерфейсе eth0. Создаем 2 файлав /etc/sysconfig/network-scripts/:

ifcfg-eth0

DEVICE=eth0
ONBOOT=yes

ifcfg-eth0.222

VLAN=yes
DEVICE=eth0.222
IPADDR=192.168.100.2
NETMASK=255.255.255.0
ONBOOT=yes