Мониторинг zabbix (3.0)

Перечень страниц с которых я брал шаблоны для своего zabbix:

все материалы в данном посте используют zabbix-agent для сбора метрик.

Для мониторинга OpenVPN была использована следующая статья: https://share.zabbix.com/cat-app/app-other/openvpn

В целях сохранения материала по указанной выше ссылке основные тезисы опишу здесь:

(о главном: получите в виде графика загрузку канала связи и время подключения/отключения каждого клиента по сертефикату в автоматическом режиме)

  1. Для запуска шаблона необходимо скачать файлы скриптов отсюда:  https://github.com/Grifagor/zabbix-openvpn файлы discover_vpn.sh, discover_vpn_ipp.sh
  2. Положить эти файлы в каталог для скриптов zabbix-agent. (место размещения данного каталога произвольно но обычно это /etc/zabbix/scripts/)
  3. Делаем эти файлы исполняемыми для пользователя zabbix.
  4. Далее необходимо указать эти настройки в конфигурации zabbix-agentа (/etc/zabbix/zabbix_agentd.conf):UserParameter=discovery.openvpn,/etc/zabbix/scripts/discover_vpn.shUserParameter=user_status.openvpn[*], cat /var/log/openvpn-status.log | grep $1, >/dev/null && echo 1 || echo 0UserParameter=num_user.openvpn, cat /var/log/openvpn-status.log | sed -n ‘/Connected Since/,/ROUTING/p’ | sed -e ‘1d’ -e ‘$d’ | wc -lUserParameter=user_byte_received.openvpn[*], if [ «`grep -c $1, /var/log/openvpn-status.log`» != «0» ]; then cat /var/log/openvpn-status.log | grep $1, | tr «,» «\n» | sed -n ‘3p’ ; else echo «0» ; fiUserParameter=user_byte_sent.openvpn[*], if [ «`grep -c $1, /var/log/openvpn-status.log`» != «0» ]; then cat /var/log/openvpn-status.log | grep $1, | tr «,» «\n» | sed -n ‘4p’ ; else echo «0» ; fiUserParameter=discovery.openvpn.ipp,/etc/zabbix/scripts/discover_vpn_ipp.sh # for discovery with ifconfig-pool-persistесли конфигурация вашего vpn сервера не использует ipp — как у меня, то вам достаточно создать симлинк на файл discover_vpn.sh с названием discover_vpn_ipp.sh
  5. Обратите внимание на выделенным красным пути. У Вас они могу отличаться от указанных здесь. Так же пользователь zabbix должен иметь доступ на чтение указанных файлов.
  6. Затем перезапустить zabbix-agent что бы применить новые настройки
  7. Загрузить шаблон openvpn.xml в ваш Zabbix. Затем указать необходимому хосту использовать данный шаблон.
  8. Для удобства я сохранил у себя архив с шаблоном и скриптами у себя. (20.12.2016)

 

Для мониторинга SQID была использована следующая статья: http://foraqis.ru/?p=378

О главном: получите ряд показателей вашего squid. Графиков в шаблоне нет. Простой триггер на доступность приложения. Хотите больше? Все данные уже у вас будут — создайте нужный вид отображения для себя сами.

  1. Необходимо установить squidclient.
    Например у меня SQUID собран руками из исходников. И этот файл был установлен вместе с squid (каталог bin). Каталог размещения у всех может отличаться. 
  2. Далее необходимо что бы в вашем squid можно было подключаться в качестве manager.
    Пример настройки доступа manager:
    # mcedit /etc/squid/squid.conf

    acl manager proto cache_object
    http_access allow manager localhost
    http_access deny manager
    #Данная строка задает пароль secret и разрешает делать все
    cachemgr_passwd secret all
    В случае если все настроено следующая команда
    # squidclient mgr:info
    должна выдать нечто подобное:
    ………
    Connection information for squid:
    Number of clients accessing cache:      72
    Number of HTTP requests received:       5684714
    Number of ICP messages received:        0
    Number of ICP messages sent:    0
    Number of queued ICP replies:   0
    ………
    Cache information for squid:
    Hits as % of all requests:      5min: 0.0%, 60min: 0.0%
    ………
    ну и так далее…
    ВАЖНО: лично моя конфигурация на такой запрос выдала ошибку доступа т.к. не был указан пароль. Указывается он в конфиге параметром cachemgr_passwd.
    С паролем команд выглядит так:
    # squidclient -w secret mgr:info
  3. Далее когда у вас заработает получение данных статистики необходимо добавить следующие строки в конфигурацию zabbix-agent добавив туда следующие строки:
    # Squid
    UserParameter=squid.http_requests,squidclient mgr:info|grep ‘Number of HTTP requests received:’|cut d‘:’ f2| tr d ‘ \t’
    UserParameter=squid.clients,squidclient mgr:info|grep ‘Number of clients accessing cache:’|cut d‘:’ f2| tr d ‘ \t’
    UserParameter=squid.icp_received,squidclient mgr:info|grep ‘Number of ICP messages received:’|cut d‘:’ f2| tr d ‘ \t’
    UserParameter=squid.icp_sent,squidclient mgr:info|grep ‘Number of ICP messages sent:’|cut d‘:’ f2| tr d ‘ \t’
    UserParameter=squid.icp_queued,squidclient mgr:info|grep ‘Number of queued ICP replies:’|cut d‘:’ f2| tr d ‘ \t’
    UserParameter=squid.htcp_received,squidclient mgr:info|grep ‘Number of HTCP messages received:’|cut d‘:’ f2| tr d ‘ \t’
    UserParameter=squid.htcp_sent,squidclient mgr:info|grep ‘Number of HTCP messages sent:’|cut d‘:’ f2| tr d ‘ \t’
    UserParameter=squid.req_fail_ratio,squidclient mgr:info|grep ‘Request failure ratio:’|cut d‘:’ f2| tr d ‘ \t’
    UserParameter=squid.avg_http_req_per_min,squidclient mgr:info|grep ‘Average HTTP requests per minute since start:’|cut d‘:’ f2| tr d ‘ \t’
    UserParameter=squid.avg_icp_msg_per_min,squidclient mgr:info|grep ‘Average ICP messages per minute since start:’|cut d‘:’ f2| tr d ‘ \t’
    UserParameter=squid.request_hit_ratio,squidclient mgr:info|grep ‘Request Hit Ratios:’|cut d‘:’ f3|cut d‘,’ f1|tr d ‘ %’
    UserParameter=squid.byte_hit_ratio,squidclient mgr:info|grep ‘Byte Hit Ratios:’|cut d‘:’ f3|cut d‘,’ f1|tr d ‘ %’
    UserParameter=squid.request_mem_hit_ratio,squidclient mgr:info|grep ‘Request Memory Hit Ratios:’|cut d‘:’ f3|cut d‘,’ f1|tr d ‘ %’
    UserParameter=squid.request_disk_hit_ratio,squidclient mgr:info|grep ‘Request Disk Hit Ratios:’|cut d‘:’ f3|cut d‘,’ f1|tr d ‘ %’
    UserParameter=squid.servicetime_httpreq,squidclient mgr:info|grep ‘HTTP Requests (All):’|cut d‘:’ f2|tr s ‘ ‘|awk ‘{print $1}’
    UserParameter=squid.process_mem,squidclient mgr:info|grep ‘Process Data Segment Size via sbrk’|cut d‘:’ f2|awk ‘{print $1}’
    UserParameter=squid.cpu_usage,squidclient mgr:info|grep ‘CPU Usage:’|cut d‘:’ f2|tr d ‘%’|tr d ‘ \t’
    UserParameter=squid.cache_size_disk,squidclient mgr:info|grep ‘Storage Swap size:’|cut d‘:’ f2|awk ‘{print $1}’
    UserParameter=squid.cache_size_mem,squidclient mgr:info|grep ‘Storage Mem size:’|cut d‘:’ f2|awk ‘{print $1}’
    UserParameter=squid.mean_obj_size,squidclient mgr:info|grep ‘Mean Object Size:’|cut d‘:’ f2|awk ‘{print $1}’
    UserParameter=squid.filedescr_max,squidclient mgr:info|grep ‘Maximum number of file descriptors:’|cut d‘:’ f2|awk ‘{print $1}’
    UserParameter=squid.filedescr_avail,squidclient mgr:info|grep ‘Available number of file descriptors:’|cut d‘:’ f2|awk ‘{print $1}’

     

  4. Перезапускаем агента
    # /etc/init.d/zabbixagent restart
    или
    # systemctl restart zabbix-agent.service
  5. Далее можно проверить доступность получаемых данных (выполняется на стороне zabbix-agenta) командой:
    # zabbix_agentd t squid.cpu_usage
    в ответ должно прилететь что-то вида:
    squid.cpu_usage                               [t|0.13]
  6. Далее импортируем шаблон template_squid.xml в свой zabbix.
    ВНИМАНИЕ: Вот тут у меня возникли сложности. Одна из двух ссылок оказалась живая и шаблон удалось скачать но он оказался под версию zabbix 2.x и в мой zabbix 3.0 этот шаблон не загружался выдавая ошибки формата xml. Шаблон адаптированный для zabbix 3.0 доступен здесь.

 

Для мониторинга BIND были использованы следующие статьи: http://djvn.sk/bind/ и https://www.netmess.org/monitoring-bind9-dns-server-with-zabbix/

О главном: вы получите графики по количеству запросов по каждому типу записи на ваш DNS сервер в общем по всем зонам.  Будет 4 графика in, out, Bind statistics request in sec, Bind session open.

ВАЖНО:  для корректной работы нужно установить xml2. Лично у меня это вызвало небольшие сложности — нужно было найти пакет для CentOS. И я нашел его здесь: https://pkgs.org/download/xml2

Статьи очень похожи. Но дна чуть больше другой по функционалу. Например мне не нужно было решить задачу только мониторинга. В результате я взял обе статьи выделил для себя только то что нужно мне. Опишу кратко что нужно сделать (файл для импорта метрик и графики в конце материала).

  1. У вас должны быть установлены zabbix-agent и xml2
  2. Необходимо настроить ваш DNS сервер так что бы с него можно было забирать статистику. Для этого в конфигурационный файл (обычно тут /etc/bind/named.conf ) необходимо добавить строчки:
    statistics-channels {
     inet 127.0.0.1 port 8053 allow { 127.0.0.1; };
    };

    и перезапустить ваш DNS для применения настроек.

  3. Рекомендуется проверить что статистика доступна и вы можете ее получить. Сделать это можно следующей командой:
    # curl http://localhost:8053/ 2>/dev/null | xml2 | grep -A1 queriesвы должны увидеть данные вида:
    /isc/bind/statistics/server/queries-in/rdtype/name=A
    /isc/bind/statistics/server/queries-in/rdtype/counter=3231693
    /isc/bind/statistics/server/queries-in/rdtype
    /isc/bind/statistics/server/queries-in/rdtype/name=NS
    /isc/bind/statistics/server/queries-in/rdtype/counter=215
    …………..
  4. Если все хорошо то нужно в файл конфигурации zabbix-agenta добавить строки конфигурации: # DNS UserParameter=bind.queries.in[*],curl http://localhost:8053/ 2>/dev/null | xml2 | grep -A1 «/isc/bind/statistics/server/queries-in/rdtype/name=$1$» | tail -1 | cut -d= -f2 UserParameter=bind.queries.out[*],curl http://localhost:8053/ 2>/dev/null | xml2 | grep -A1 «/isc/bind/statistics/views/view/rdtype/name=$1$» | tail -1 | cut -d= -f2 UserParameter=bind.stats.query[*],curl -s http://localhost:8053/ 2>/dev/null | xml2 | grep -A1 -i «/isc/bind/statistics/server/nsstat/name=Qry$1» | tail -1 | cut -d= -f2 UserParameter=bind.net.udp,netstat -nua | grep :53 | wc -l UserParameter=bind.net.tcp,netstat -nta | grep :53 | wc -lперезапустить zabbix-agent. Теперь можно проверить что агент может отдавать эти данные. Например так:
    # zabbix_agentd -t bind.stats.query[Dropped]
    в консоль должно выдать нечто подобное этому:
    bind.stats.query[Dropped]                     [t|48]
  5. Теперь необходимо загрузить шаблон в Zabbix. Компиляция обеих статей в виде XML файла шаблона для zabbix 3.0 находится тут.
  6. Теперь осталось назначит данный шаблон неоходимому хосту. Все. Через пару минут можно будет увидеть данные на графиках.

ВАЖНО: На случай возникновения сложностей скачивания XML2 по ссылке выше я сохранил у себя копии rpm пакетов для CentOS x86 и x64.

 

 

 

 

Autodesk — лицензии для учебных заведений.

Для учебных заведений Autodesk предлагает бесплатные легальные лицензии. В частности сетевая лицензия предполагает одновременную работу любого продукта на 3 000 студенческих мест. Что полностью закрывает лицензией любое учебное заведение. Инструкция по получению этих лицензий (актуальна с 2016г.) размещена на сайте autodesk — вот ссылка.

Первой проблемой для меня оказалось найти эту ссылку. Поэтому я размещаю копию этого документа актуальную на дату написания статьи (возможно скоро этот документ станет неактуальным) — вот ссылка.

Есть еще один важный момент. Изначально мне не удалось из личного кабинета получить файлы сетевой лицензии (такой опции просто не было). Я активировал лицензии в ручную на страничке активации. Требуется войти под своей учетной записью (той по которой вы получали ключи к продуктам) и далее следовать инструкциям. Кратко необходимо вбить ключи к продуктам и данные сервера лицензии после чего вы получить данные которые нужно сохранить в любой текстовый документ с любым расширением но рекомендуют расширение .lic.

В данный файл можно складывать несколько лицензий подряд. Заголовок лицензии должен быть один, а тело просто копируется в конец документа. Затем этот файл указывается в интерфейсе сервера лицензий. Если все настроено как указано в инструкции то вы получите рабочий сервер лицензий с активированными вами продуктами.

Позже у меня в личном кабинете появился удобный web интерфейс для получения сетевых лицензий. Данный интерфейс позволяе в том числе объединять все ваши лицензии в один файл автоматически.

Autodesk Autocad — ошибка при первом запуске. Error: 1325

После установки Autodesk AutoCad, при первом запуске, стартует Windows Installer, который должен настроить среду под текущим профилем. Но существуют ограниченные учетные записи. В результате недостаточности прав доступа или, если имя вашей учетной записи длиннее 11 символов, Windows Installer выдает следующее сообщение:

Windows Installer
Ошибка 1325. «<имя учетной записи>» не является допустимым коротким именем файла.

Решением этой проблемы может быть следующее:

  1. Изменить имя учетной записи так, чтобы оно стало короче 11 символов.
  2. Дать максимальные права пользователю для первого запуска и настройки приложения. Затем вернуть исходные права.
  3. Если по каким-то причинам пункты выше выполнить невозможно (как это было у меня), необходимо в ручную сформировать нужный профиль для AutoCad.

Рассмотрим подробнее вариант 3.

Для решения этой проблемы есть статья, на которую ссылается поддержка Autodesk. Опишу краткое содержание статьи здесь:

Ручная настройка профиля Autocad

Для ручного устранения данной проблемы необходимо выполнить следующие шаги:

  1. Необходимо зайти под любой административной учетной записью. Запустить Autocad. Будет сформирован пользовательский профиль, который мы вручную будем переносить.
  2. Для переноса данных потребуется из административной учетной записи скопировать следующие папки в ограниченную учетную запись:
    1. c:\Users\[username]\AppData\Local\Autodesk
    2. c:\Users\[username]\AppData\Roaming\Autodesk
  3. Так же потребуется перенести настройки реестра. А именно, нужно экспортировать следующую ветку реестра:
    1. HKEY_CURRENT_USER\Software\Autodesk
  4. После экспорта ветки необходимо открыть сохраненный файл в текстовом редакторе (например блокнотом) и сделать замену имени административной учетной записи на имя ограниченной учетной записи.
  5. Зайти под ограниченной учетной записью. Сделать слияние отредактированного файла реестра.
  6. Запустить Autocad. Все.

Для себя размещаю файл ветки реестра для Autodesk Autocad 2017. В файле требуется выполнить автозамену имени учетной записи с «student» на желаемую перед слиянием.

Подключение к оборудованию через RS-232 (COM port) в Linux

Внимание!
Для управления любым оборудованием через COM порт в Linux необходимо установить пакет minicom или screen.

minicom:

После установки пакета программу можно запустить командой minicom. В появившейся псевдографической оболочке программы необходимо указать нужный COM порт сервера. После чего достаточно несколько раз нажать Enter и вы увидите управляющую консоль необходимого оборудования.

screen:

$ screen /dev/ttyS0 9600

где: /dev/ttyS0 — это адрес к ком порту, а 9600 это скорость порта.

Для завершения работы соscreen используйте следующее сочетание клавиш «Ctrl-A»+»k»

Для завершения текущего сеанса screen, введите «Ctrl-A» + «к». Если вы хотите, чтобы временно свернуть экран screen, введите «Ctrl-A» + «D». Просмотреть список запущенных команд работающих под screen можно следующей командой:

$ screen -list

Перейти к нужной закладке screen можно командой:

$ screen -R PID_или_Name

где: PID_или_Name — это имя свернутой панели или ее номер процесса который видно в списке свернутых процессов  screen.

 

Linux поиск «утекающего» трафика с вашего компьютера в неизвестном направлении… (алгоритм)

Во первых нужно увидеть факт того что трафик течет куда то очень быстро:

Эта команда даст понять на какой именно удаленный IP утекает трафик.

# iftop -i ethX

где X — номер сетевого интерфейса.

Эта команда даст понять по каким портам происходит обмен данных.

# tcpdump -i ethX | grep IP

где:
X — номер сетевого интерфейса.
IP — определенный в пункте первом IP

Эта команда покажет информацию о процесс работающем на данном порту.

# netstat -apn | grep PORT

где:
PORT — это порт определенный в пункте два.

 

Linux SAMBA несколько PDC (как указать несколько SLAVE AD серверов для NTLM авторизации)

Все просто как раз, два, три 🙂

Для этого необходимо:

  1.  в файла smb.conf написать строку:
    password server = *
  2. В файле lmhosts расположенный в той же директории с smb.conf перечислить все необходимые pdc в формате ip hostname.
  3. Перезапустить службу winbind

После этого выбор сервера будет производиться автоматически в том порядке в котором указаны в файле lmhosts. Где это может пригодиться? Например у вас несколько доменных серверов для балансировки нагрузки или для повышения стабильности работы домена. И наступает момент обновления сиситемы — скорее всего в автоматическом режиме. И пока основной сервер находится в down Linux система не может никого авторизовать и это при живом запасном сервере. Согласитесь не очень приятная ситуация. Описанное выше решение позволяет решить эту проблему.

Как ограничить ssh авторизацию только локальными пользователями если сервер в составе домена Windows

Как ограничить ssh авторизацию только локальными пользователями если сервер в составе домена Windows?

По мотивам статьи: http://rus-linux.net/lib.php?name=/MyLDP/sec/pam.html

По умолчанию ssh как и многие другие приложения Linux используют PAM авторизацию по умолчанию. И в некоторых дистрибутивах все завязано на модуль pam_unix2.so который автоматически предоставляет доменным пользователям теже права что и локальным при вводе сервера в домен.

Задача состоит в том что бы такую возможность отключить только в SSH.

Причин для этого несколько:

1) Я не хочу давать никакой возможности доменным пользователям получать доступ к SSH
2) При попытке подбора пароля через ssh происходит блокировка пользователей в домене.

Для реализации вышеописанного можно поступить следующим образом:

1) В PAM политике изменить последовательность проверки указав модуль проверки локальных пользователей.
2) В случае отрицательно результата вышеуказанного модуля прекратить какую-либо проверку.

Файл конфигурации PAM для SSH находится по адресу /etc/pam.d/sshd
И содержит следующее:

#%PAM-1.0
auth requisite pam_nologin.so
auth include common-auth
account requisite pam_nologin.so
account include common-account
password include common-password
session required pam_loginuid.so
session include common-session

Нам необходимо в самый верх добавить следующую строку auth requisite pam_unix.so
что приведет вышеуказанный файл к следующему виду:

#%PAM-1.0
auth requisite pam_unix.so
auth requisite pam_nologin.so
#auth include common-auth
account requisite pam_nologin.so
account include common-account
password include common-password
session required pam_loginuid.so
session include common-session

Сохраняем изменения и наступает счастье 🙂

Модуль pam_unix.so занимается проверкой указанных пар пользователя и пароля в локальном списке пользователей и паролей системы. а параметр requisite позволяет прекратить дальнейшую проверку в случае если такой пары в локальной базе не было найдено.

Работает это все согласно следующим таблицам:

Таблица 1. Проверки PAM подразделяются на четыре группы, организованных в виде очереди. Задействование тех или иных групп определяется запросами пользователя.

 

  • auth Относится к аутентификации пользователей, к примеру, когда нужно ввести пароль. Обычно эти проверки идут первыми.
  • account Относится к управлению учетными записями, к примеру, сюда входит проверка устаревания пароля и проверки по времени доступа. Когда пользователь идентифицирован с помощью модулей auth, модули account определяют, можно ли пользователю давать доступ.
  • session Относится к управлению соединениями, например, журналирование входов в систему, журналирование выполненных действий или выполнение очистки по завершению сессии.
  • password Содержит функции, например, обновление пароля пользователя.

Таблица 2. Модули выполняются последовательно в каждой группе, в зависимости от их управляющих флагов. Требуется указать, является ли проверка обязательной, желательной и т.п.

  • required Этот модуль должен завершиться успешно. Если он завершается неудачей, вся проверка также завершается неудачей. Если все модули помечены как required, тогда непрохождение любой из проверок будет означать отказ в доступе, хотя все другие модули в группе также будут исполнены.
  • requisite Работает аналогично required, однако в случае неудачи, возврат происходит незамедлительно, и остальные модули группы даже не исполняются.
  • sufficient Если этот модуль завершается успешно, остальные модули не исполняются, и вся проверка завершается успешно.
  • optional Если этот модуль завершается неудачно, тогда окончательное решение зависит от результата исполнения других модулей. Если в конфигурации нет модулей типа required или
  • sufficient, тогда для разрешения доступа хотя бы один из модулей типа optional должен завершиться успешно.

Этого достаточно для решения задачи. Изменения вступают в силу сразу. Ничего перезапускать ненужно. Распространяется только на вновь создаваемые сессии.

SAMBA + AD генерация одинаковых uid и gid доменных пользователей на всех серверах

В свое время очень долго не мог найти решение данной проблемы:

Проблема:
SAMBA нормально работает и авторизует пользователей из Windows домена, но на разных серверах один и тот же пользователь имеет разные (случайным образом выбранные) идентификаторы (uid и gid).

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

#id name_user

или

#id DOMAIN\name_user

В результате, если по какой-то причине будет повреждена/обновлена база соответствия SID-ов и uid/gid (например, Вы перезаведете машину в домен), то каждый пользователь получит новый идентификатор. В результате доменные пользователи не смогут получить доступ к своим файлам и папкам, т.к. ранее назначенные на их каталоги права будут соответствовать другим пользователям. Проблема в том, что восстановить предыдущий порядок записей невозможно без резервной копии базы.

Решение:
Решается данная проблема использованием RID в конфигурации SAMBA. Данный алгоритм генерации uid и gid использует SID пользователя/группы доменного пользователя. В результате вычисления данным алгоритмом для одного и того же SID будет сгенерирован один и тот же uid/gid. В результате на всех Linux серверах будет единое пространство идентификаторов доменных пользователей. Что очень удобно при выделении прав доступа.

Пример использования:

/etc/samba/smb.conf
…………
   idmap uid = 10000-50000
   idmap gid = 10000-50000
   idmap config DAMIN_NAME : backend = rid
   idmap config DAMIN_NAME : range   = 10000-50000
…………

где DAMIN_NAME — это сокращенное имя вашего домена.

В результате для всех доменных пользователей и групп будут генерироваться единые uid/gid в диапозоне от 10000 до 50000. Вообще говоря диапозон idmap uid и idmap gid рекомендуется делать шире чем делать idmap config DAMIN_NAME : range. А рекомендуется это с целью возможных доверительных отношений среди доменов и прочих случаев, когда для разных доменов требуется разный диапазон идентификаторов. Диапазон идентификаторов на всех SAMBA серверах должен совпадать.

После внесения данных изменений достаточно перезапустить winbind, например, так:

/etc/init.d/winbind restart

Данная конфигурация прекрасно работает на samba-3.6.3-0.24.4

В то же время на samba-3.0.36-0.13.20.1 замечательно работает следующая конфигурация:

/etc/samba/smb.conf
…………
   idmap uid = 10000-50000
   idmap gid = 10000-50000
   idmap backend = rid»:DAMIN_NAME=10000-50000″

…………

Замечено что на SAMBA-3.6 такая запись не работает.

На других версиях мною не тестировалось, но думаю, на более старших работать будет.

Источники:
1) man idmap_rid
2) man smb.conf
3) http://www.samba.org/samba/docs/man/manpages-3/idmap_rid.8.html
4) http://www.ccs.neu.edu/home/battista/articles/winbindenterprise/ridconfi…

ВНИМАНИЕ! Данная статья не претендует на полноту описания и не гарантирует 100% результат. Она рассчитана только на указанную в ее названии проблему, т.е. предполагается, что у Вас уже установлены и настроены все необходимые пакеты.

SAMBA id getent group проблемы с обновлением состава групп домена

Данный пост описывает «решение» проблемы при которой не происходит обновление состава групп доменных пользователей системы в Linux.

Проблема:

При удалении пользователя из в группы в AD система Linux не выводит пользователя из группы т.е. Linux продолжает считать что пользователь в группе хотя это не так.

При этом сам winbind изменения видит а система нет.

Как проверить видит ли изменения winbind?
Так:
#getent group

Выведет набор групп и их состав. Время наступления изменений зависит от настроек winbind в файле smb.conf.

Следующая команда показывает какой состав групп пользователей есть в системе Linux:
#id имя_пользователя

———-
Бывает так что результат команд разниться. Команда id не видит изменений в составе групп.

Решение:
После внесенных изменений в AD на Linux машине нужно выполнить команду

#/usr/sbin/grpck -s

и через ~30 внесенные в домене изменения выступят в силу.

ВАЖНО:
Команда /usr/sbin/grpck -s строит списки на основании значений winbind. Следовательно пока winbind не увидел изменения они не применяться к системе после выполнения команды /usr/sbin/grpck -s.

PS
Лично я вставил эту команду (/usr/sbin/grpck -s) в крон с интервалом в одну минуту.

Настройка NTP сервера

Network Time Protocol (NTP) — сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью. (http://ru.wikipedia.org/wiki/NTP)

Суть этого сервиса в следующем: наш сервер времени (NTP) берет время в нескольких различных серверов времени в интернете. Время отклика от удаленных должно быть минимальным для того что бы точность времени была выше. Полученное время наш сервер отдает в локальную сеть.

Команда единовременного перевода часов (рывком): ntpdate имя_сервер_времени_или_его_ip

 

Настройка

Конфиг находится в /etc/ntp.conf

Для корректной работы были отобраны сервера времени (для вашего местоположения и провайдера возможно потребуется подобрать другой список ):

ntp.ix.ru
ntp1.vniiftri.ru
ntp2.vniiftri.ru
ntp4.vniiftri.ru
ntp.mobatime.ru
ntp0.ntp-servers.net
ntp1.ntp-servers.net
ntp2.ntp-servers.net
gps-time.prao.psn.ru
ntp2.stratum1.ru
ntp2.vniiftri.ru

 

Текущий (полный) конфиг содержит следующие строки:

 

proxy:/etc # cat ntp.conf</p>

##
## Перечень серверов с которых берется время
##

#server ntp.ix.ru               prefer # слово prefer указывает на заданное предпочтение сервера

server ntp.ix.ru
server ntp1.vniiftri.ru
server ntp2.vniiftri.ru
server ntp4.vniiftri.ru
server ntp.mobatime.ru
server ntp0.ntp-servers.net
server ntp1.ntp-servers.net
server ntp2.ntp-servers.net
server gps-time.prao.psn.ru
server ntp2.stratum1.ru
server ntp2.vniiftri.ru

#
# Даем полные разрешения для серверов откуда будем брать время.
#

restrict ntp.ix.ru
restrict ntp1.vniiftri.ru
restrict ntp2.vniiftri.ru
restrict ntp4.vniiftri.ru
restrict ntp.mobatime.ru
restrict ntp0.ntp-servers.net
restrict ntp1.ntp-servers.net
restrict ntp2.ntp-servers.net
restrict gps-time.prao.psn.ru
restrict ntp2.stratum1.ru
restrict ntp2.vniiftri.ru

server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 16

#    server time.flygplats.net
#    server a.ntp.alphazed.net

##
## Параметр driftfile задает, какой файл используется для сохранения 
## информации о предыдущих ответах от серверов NTP, которые вы используете. 
##
driftfile /var/lib/ntp/drift/ntp.drift

##
## Лог файл для NTP сервера
##
logfile /var/log/ntp

# Правила для доступа к моему NTP серверу.
restrict default ignore
restrict 127.0.0.1 mask 255.255.255.255

# А (только) наша сетка может только слушать...
restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap
restrict 10.248.0.0 mask 255.255.252.0  nomodify notrap
restrict 10.255.0.2 mask 255.255.250.252 nomodify notrap
restrict 0.0.0.0 mask 0.0.0.0 notrust nomodify notrap nopeer


Подробности этого конфига

    • server — это список серверов С которых необходимо брать время нашему серверу NTP
    • driftfile — подробно описан в конфигурационном фале
    • restrict default ignore — действие сервера по умолчанию если он не находит какого либо правила относящегося к клиенту.
    • restrict 127.0.0.1 mask 255.255.255.255 — локально самому серверу разрешить все.
    • restrict {server name} — здесь мы говорим нашему NTP что этим компьютера {server name} разрешено менять время на нашем сервере времени.
    • restrict {сеть} mask {маска сети} nomodify notrap — здесь мы говорим что этому перечню компьютеров разрешено только запрашивать с нашего сервера NTP время для их синхронизации с нашим сервером времени.
    • Последняя строка запрещает всем все. Она не обязательна.

ВНИМАНИЕ — тонкости настройки

Во многих мануалах на русском языке в примерах есть ошибка в результате которой сервер NTP не отвечает клиентам из локальной сети. Причина тому параметр notrust указанный в restrict в перечне локальной(ых) сетей.

Ошибочная строка:

restrict 10.255.0.2 mask 255.255.250.252 notrust nomodify notrap

Верная строка:

restrict 10.255.0.2 mask 255.255.250.252 nomodify notrap

Запуск сервера NTP:

В продуктах от SuSE запускается командой: rcntp start

Наблюдение и просмотр текущего положения сервера

Просмотреть факт обновления с удаленных сервером можно командой:

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+ntp.ix.ru       .PPS.            1 u   37  128  377   10.267   -0.180   0.871
*89.109.251.21   .PPS.            1 u  105  128  377   11.836    0.037   1.179
+89.109.251.22   .PPS.            1 u   32  128  377   13.320   -0.020   1.070
+89.109.251.24   .PPS.            1 u   52  128  377   12.557    0.328   1.218
-ntp.mobatime.ru .DTS.            1 u  245  128  376   18.854    1.076   2.307
-n44.time1.d6.hs .GPS.            1 u  101  128  377   34.939    1.792   0.562
-n44.time2.d6.hs .GPS.            1 u  111  128  377   34.814    2.042   0.222
-n44.time3.d6.hs .GPS.            1 u   35  128  377   35.049   -0.825   0.958
+gps-time.prao.p .PPS.            1 u   29  128  377   11.856   -0.350   0.432
 LOCAL(0)        .LOCL.          16 l   41   64  377    0.000    0.000   0.001
proxy:/etc #
proxy:/etc #
proxy:/etc # ntpq -p -n
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+194.190.168.1   .PPS.            1 u   72  128  377   10.267   -0.180   0.871
*89.109.251.21   .PPS.            1 u   11  128  377   11.836    0.037   0.979
+89.109.251.22   .PPS.            1 u   67  128  377   13.320   -0.020   1.070
+89.109.251.24   .PPS.            1 u   87  128  377   12.557    0.328   1.218
-85.114.26.194   .DTS.            1 u  280  128  374   18.854    1.076   2.307
-91.226.136.138  .GPS.            1 u    9  128  377   34.939    1.792   0.887
-91.226.136.139  .GPS.            1 u   17  128  377   34.814    2.042   0.470
-91.226.136.141  .GPS.            1 u   70  128  377   35.049   -0.825   0.958
+194.149.67.32   .PPS.            1 u   64  128  377   11.856   -0.350   0.432
 127.127.1.0     .LOCL.          16 l   12   64  377    0.000    0.000   0.001


В результате в колонке refid мы должны видеть или IP (это IP серверов откуда берет время тот NTP сервер с которого делаем запросы себе мы) или строку .GPS. (означает что время берется со спутника) или.LOCL. (означает что время локальное т.е. на самом компьютере).

внимание

если в этой колонке (refid) будет .INIT. это говорит о том что идет инициализация сервера т.е. в данный момент в него время не берется. Это может быть вызвано или неправильными настройками нашего NTP сервера в случае если такое сообщение во всех строках или обрыв соединения в интернет.
Если же такое сообщение размещено только напротив одно сервера это может свидетельствовать или его неработоспособность или на нем установили ограничение для нашего подключения. От таких сервером следует отказываться.

Колонка delay тоже очень важна. В ней отображается информация за какое время удаленный сервер дает ответ нам на вопрос «который час». Чем больше интервал тем меньше будет точность часов на нашем сервере.

Колонка st (stratum) указывает на класс точности времени сервера который отдает нам время.

Описание всех колонок и знаков взяты из статьи с opennet.ru. Адрес статьи: http://opennet.ru/base/sys/date_and_time.txt.html

Значение каждой колонки

  • remote -имя удаленного NTP-сервера. Если указать ключ -n, вы получите
    IP-адреса серверов вместо имён.
  • refid — указывает, откуда каждый сервер получает время в данный момент.
    Это может быть имя хоста или что-то вроде .GPS., указывающее на источник глобальной системы позиционирования (Global Positioning System).
  • st — Stratum (уровень) это число от 1 до 16, указывающее на точность сервера. Единица означает максимальную точность, 16 — сервер недоступен. Ваш уровень будет равен уровню наименее точного удаленного сервера плюс 1.
  • poll — Интервал между опросами (в секундах). Значение будет изменяться между минимальной и максимальной частотой опросов. В начале интервал будет маленьким, чтобы синхронизация происходила быстро. После того как часы синхронизируются, интервал начинает увеличиваться, чтобы уменьшить трафик и нагрузку на популярные сервера времени.
  • reach — Восьмеричное представление массива из 8 бит, отражающего результаты последних восьми попыток соединения с сервером. Бит выставлен, если удаленный сервер ответил.
  • delay — Количество времени (в секундах) необходимого для получения ответа на запрос «который час? «.
  • offset — Наиболее важное поле. Разница между временем локального и удаленного серверов. В ходе синхронизации это значение должно понижаться, указывая на то, что часы локальной машины идут все точнее.
  • jitter — Дисперсия (Jitter) — это мера статистических отклонений от значения смещения (поле offset) по нескольким успешным парам запрос-ответ. Меньшее значение дисперсии предпочтительнее, поскольку позволяет точнее синхронизировать время.

Значение знаков перед именами серверов

Означает, что локальный сервис NTP не предпочитает этот сервер
+ Означает, что локальный сервис NTP предпочитает этот сервер
x Отмечает плохой хост
* Указывает на текущий наиболее предпочтительный сервер

 

Теперь как поглядеть перечень клиентов которые синхронизируют время с нашего NTP?

Для этого необходимо выполнить команду: ntpdc -c monlist
Выполнение этой команды даст вывод:

# ntpdc -c monlist
remote address          port local address      count m ver code avgint  lstint
===============================================================================
localhost              53282 127.0.0.1            232 7 2      0      6       0
n44.time1.d6.hsdnsrv.n   123 10.0.0.50           53 4 4      0    103      35
89.109.251.21            123 10.0.0.50           53 4 4      0    103      37
n44.time2.d6.hsdnsrv.n   123 10.0.0.50           53 4 4      0    103      43
gps-time.prao.psn.ru     123 10.0.0.50           52 4 4      0    103      90
89.109.251.22            123 10.0.0.50           52 4 4      0    103      93
n44.time3.d6.hsdnsrv.n   123 10.0.0.50           52 4 4      0    103      96
ntp.ix.ru                123 10.0.0.50           52 4 4      0    103      98
89.109.251.24            123 10.0.0.50           52 4 4      0    103     113
ntp.mobatime.ru          123 10.0.0.50           51 4 4      0     95     306
rezerv.kontora.vrn.ru      123 10.0.0.50            8 3 4    180     64    1199
.............
192.168.2.96             123 10.0.0.5             1 1 3    180      0     294
192.168.2.76             123 10.0.0.5             1 1 3    180      0     436
.............

В колонке local address будет представлена информация об IP которые работают с нашим NTP сервером.
Описание остальных колонок вывода необходимо искать в интернете.

Подтяжка времени на Windows клиенте:
net time /setsntp:имя_ntp_сервера_mobatime — указали, что Windows будет синхронизироваться с этим сервером NTP
net stop w32time && net start w32time — перезапустили службу времени Windows
w32tm /resync — отправили команду для принудительной синхронизации на локальный компьютер