26 дек. 2013 г.

IBM/Brocade problem with access to WebTools with JRE 1.7 (update 45)

Выяснилось, что вледствие ужесточений некоторых настроек безопасности актуальный на сегодняшний день релиз JRE7 - u45 - запрещает запуск java-апплетов для управления старенькими оптическими коммутаторами от IBM/Brocade. Вылечить достаточно просто: в файле \lib\security\java.secutity нужно найти строчку
jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024
и исправить ее на 
jdk.certpath.disabledAlgorithms=MD2
Судя по этим вашим интернетам, в старых релизах fabric os (пятой версии) используется RSA длиной в 256 бит, что сегодня считается очень небезопасным, а данное изменение в конфиге отключает проверку длины ключа при запуске апплета.

23 дек. 2013 г.

Edit UEFI boot manager list

После многочисленных экспериментов с установкой-переустановкой винды потребовалось подчистить список меню загрузки UEFI. Как с виндовыми, так и с линуксовыми утилитами как-то не получилось сие порешать. В итоге решить задачу вышло с помощью Efi-shell-а, отдельного приложения, запускаемого через Run EFI application из меню загрузки рабочей станции.
Если жесткий диск размечен, то загрузить шелл можно прямо с него, если нет, придется записывать файлик на CD-RW. После загрузки получаем командную строку шелла. 
Удалить ненужные нам записи в UEFI меню можно командой:
bcfg boot rm
где - порядковый номер соответствующего пункта, узнать который можно командой
bcfg boot dump
Общий список команд с описанием доступен по команде help. Подробное описание заданной команды можно почитать по help .

28 нояб. 2013 г.

LiteTouchPE (MDT) + Intel Network Adapters

Копаюсь понемногу в инструментарии для массовой установки Windows (AIK, MDT)... Словил следующую проблему - при попытке загрузиться с LiteTouchPE на системниках HP 8200/8300 Elite не определяется сетевая карта (чип Intel 82579LM):
The following networking device did not have a driver installed "PCI\VEN_
Попытки включить в WinPE-образ драйверы для сети от этих рабочих станций успехом не венчаются.
Решение оказалось таким: в сборку LiteTouchPE нужно включить драйверы из вот этого пакета с сайта Intel.
Однако в этом комплекте драйверов помимо сетевых есть еще и несколько драйверов для оптических адаптеров, один из которых - ifm63x64.sys, конфликтуем с дефолтным виндовым драйвером ISCSI-устройств, что выливается в BSoD с ошибкой 0xc0000098. Эту неприятность можно решить удалением данного драйвера из включаемого в сборку LiteTouchPE пакета.

8 нояб. 2013 г.

Windows Server 2003 + HASP License Manager

Пришлось тут давеча заняться малость олдскульной Windows Server 2003 - ынтырпрайз, что поделать. 
Так вот, надо там было 1С8.2 развернуть, и возник косяк с HASP License Manager (да-да, у нас еще аппаратный ключик, ынтырпрайз же) - установка драйвера приводит к рандомным BSoD-ам операционки, служба менеджера не стартует (Access Denied даже у Администратора), и удалять себя все это хозяйство не дает - инсталлятору не хватает памяти (ага, 20+ гигов - сущие мелочи). Что-то имевшейся версии 8.32 найти оказалось сложно - Аладдин уже продался SafeNet-у, разбросанные по интернетам ссылки не работают и вообще беда-беда-огорчение.
В итоге удалось нарыть следующую информацию:
Для Server 2003 лучше ставить менеджера лицензий постарше - 8.31 (рекомендуют товарищи с http://mista.ru, а уж они там собаку съели на 1с-ных вопросах), так как с ним идет драйвер "нужной" версии - 4.98. Ссылки там на страничке не работают, поэтому скачать нужный архивчик можно тут. На момент написания точно можно было.
В остальном - все как обычно, ставим менеджер/драйвер, при установке 1С снимаем в нужный момент галку "Install HASP device driver", и все должно работать.
UPD: Выяснилось, что есть еще живые ссылки на ПО у останков Аладдина - тут, и у новых хозяев Sentinel - тут.

28 окт. 2013 г.

Улучшение Event Viewer Task.

Как известно, функционал Event Viewer-а (Просмотр событий, по-нашему) в Windows Server 2008 позволяет навешивать на факт прихода события действия, такие как послать e-mail сообщение по указанному адресу или запустить заданную программу. Настроить сие можно как на весь лог (System, Application и так далее), так и на отдельный отфильтрованный Custom View. Однако проблема в том, что при создании такого задания нет возможности добавить в тело письма, которое формируется при событии, информацию о собственно событии. 
Однако не все так плохо, и технически Event Viewer такое умеет, и лишь GUI-интерфейс решить подобную задачу не позволяет.
Итак, для создания инфомативного шаблона e-mail, необходимы, очевидно, внутренние переменные Event Viewer-а, которые будут разрешаться в соответствующие событию-триггеру значения. Штатный мастер сделать подобное не позволяет, поэтому открываем Task Scheduler, в котором находим папку Event Viewer Tasks, где должно быть созданное ранее задание, и экспортируем его. На выходе получаем XML-файл, где описаны все внесенные нами при создании этого задания настройки.
Далее следует добавить в XML описания переменных, значения которых нам пригодятся для формирования письма:

  <ValueQueries>
   <Value name="EventChannel">Event/System/Channel</Value>
   <Value name="EventComputer">Event/System/Computer</Value>
   <Value name="EventData">Event/EventData/Data</Value>
   <Value name="EventID">Event/System/EventID</Value>
   <Value name="EventRecordID">Event/System/EventRecordID</Value>
   <Value name="EventSeverity">Event/System/Level</Value>
   <Value name="Message">Event/RenderingInfo/Message</Value>
  </ValueQueries>
Я добавлял это в секцию <EventTrigger>, сразу под <Subscription>. После этого можно использовать определенные переменные в e-mail шаблоне. Например, так:

<Actions Context="Author">
    <SendEmail>
      <Server>mail.example.org</Server>
      <Subject>Event ($(EventID)) from $(EventComputer)</Subject>
      <To>user@example.org</To>
      <From>eventlog@example.org</From>
      <Body>
  $(EventComputer) reports event $(EventID) in $(EventChannel), record $(EventRecordID), severety $(EventSeverity):
  $(EventData)
  $(Message)
   </Body>
      <HeaderFields />
      <Attachments />
    </SendEmail>
  </Actions>
</Task>
Источник мудрости тут.

23 окт. 2013 г.

VMWare VCA-DCV

Выдали вот такую штуку. Шпециалист, типа, ага. И вот это стоит 90 евро!

22 окт. 2013 г.

1Cv8.2 - Консоль управления кластером

Пришлось тут столкнуться с проблемой подключения консолью управления кластером 1С к непосредственно кластеру (то есть к серверу приложений, по сути): для каждого релиза 1С-ной платформы поставляется своя версия этой консоли, и подключение возможно только при полном соответствии версий платформы клиентской 1С и сервера приложений. В случае, когда имеется несколько разноплатформенных кластеров, имеется проблема несоответствия версий и, как следствие, невозможность подключения к серверам приложений.
Решение отыскалось на Инфостарте и оказалось очень простым: несмотря на то, что сам файл консоли (это оснастка к Microsoft Management Console - .msс-файл) всегда один (даже при наличии нескольких установленных релизов платформ), он при работе пользуется платформозависимой библиотекой C:\Program Files\1cv82\<номер_релиза>\bin\radmin.dll. Именно ее версия и сравнивается при подключении к серверу приложений. 
Таким образом, если у нас есть два релиза и один ярлык консоли управления, то регулировать версию платформы можно простой регистрацией библиотеки: 
regsvr32  C:\Program Files\1cv82\<номер_релиза>\bin\radmin.dll
UPD: Посредством обратной связи специалисты, владеющие сакральными 1С-ными знаниями и навыками сообщают, что вышеописанное есть по сути велосипед, ибо в каждой установленной версии платформы в bin\ есть ярлычок REGMSC.cmd, внутрях которого практически та же мантра по регистрации radmin.dll. Таким образом, легким движением мышки мы всегда имеем актуальную версию библиотеки для нужной версии консоли.

11 окт. 2013 г.

Windows - показать отключенные устройства

Постоянно забываю, что нужно добавить в переменные среды в Windows, чтобы диспетчер устройств показал неподключенные устройства:
DEVMGR_SHOW_NONPRESENT_DEVICES = 1

10 окт. 2013 г.

Kaspersky Endpoint Security for Linux

В испытательно-лабораторных целях, а также во исполнение корпоративной политики в области защиты информации взгромоздил на свою linux-машину (Debian Sid) антивайрус Kaspersky Endpoint Security For Linux Workstations. Ну и агента администрирования до кучи. 
Установились они на пару без лишних вопросов, после установки попросили себя сконфигурировать - агент сразу, сам KES через запуск отдельного перлового скрипта - ничего необычного.
С агентом все ровно - параметры центра администрирования указал, запускаться разрешил, оно работает и не шуршит; центр администрирования компьютер подцепил и видит. А вот с KES-ом возникло две непонятки. 
Во-первых, ему не понравились установленные linux-headers:
Warning: The Linux kernel source code found in
/lib/modules/3.9-1-686-pae/build is not configured correctly. You need to
configure it to build the kernel-level real-time protection module.
То есть найти нашел, но не всосал. Возможно, стоит обновиться до более свежего linux-image-3.11, для которого есть доступный пакет linux-sources, и натравить на него. Неясно.
Второй момент - в процессе интерактивной настройки нет возможности указать ни ключевой файл с лицензией, ни источник обновления. А так как выкачивать несколько сотен метров обновлений мне не улыбается, а без баз KES разумно отказывается работать, то возникают вилы.
Эту проблему достаточно легко можно порешать с помощью файла ответов (или файла автонастройки), так как по непонятным причинам количеством ответов там больше, чем вопросов при запуска скрипта настройки KES в интерактивном режиме. Вот его вид:
EULA_AGREED=yes
SERVICE_LOCALE=ru_RU.utf8
INSTALL_KEY_FILE=/opt/kaspersky/license.key
UPDATER_SOURCE=AKServer
UPDATER_PROXY=no
UPDATER_EXECUTE=yes
UPDATER_ENABLE_AUTO=no
RTP_BUILD_KERNEL_MODULE=no
RTP_BUILD_KERNEL_SRCS=auto
RTP_SAMBA_ENABLE=yes
RTP_SAMBA_CONF=/etc/samba/smb.conf
RTP_SAMBA_VFS=/usr/lib/samba/vfs/
RTP_SAMBA_VFS_MODULE=/opt/kaspersky/kes4lwks/lib/samba/kes4lwks-smb-vfs28.so
RTP_START=yes
GUI_ENABLE=yes
 По-хорошему, собирать ядерный модуль бы надо ( RTP_BUILD_KERNEL_MODULE=no ), но пока отключил, чтобы не ругалось. Если это дело скормить скрипту настройки,
 /opt/kaspersky/kes4lwks/bin/kes4lwks-setup.pl --auto-install=./kes_file
то KES настроится на сервер администрирования, утащит оттуда все обновления, сконфигурируется, запустится и положит ярлыки в нужные места.

И, напоследок, страшный скриншот:
 

9 окт. 2013 г.

Установка .NET3.5 в Windows 8/8.1/2012/2012R2

Без .Net Framework сегодня в win-среде никуда, вот и потребовалось установить в развернутной в виртуальной (безинтернетной, что важно) среде Windows 8 x64 Ent. Должно было быть все просто - как мы знаем, начиная с Windows 7 / 2k8, версия 3.5 фреймворка поставляется вместе с ОС и доступна как компонент Windows. Однако есть вилы - в отличие от вышеупомянутых версий ОС в Windows 8 установка фреймворка как компонента доступна, однако сами файлы отсутствуют. То есть "винда галимая" (с) ломится в интернет, получает отлуп и обижается. Что делать?
Выход есть.
Отсутствующие файлы установки фреймворка можно найти на установочном диске ОС (и не спрашивайте, почему они в процессе этой самой установки не были скопированы). Добыть их достаточно сложно - все находится внутри .wim-образа. Однако есть возможность подключить этот образ в качестве источника установки и установить необходимый нам компонент (и любой другой доступный компонент Windows) с помощью DISM:
DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:d:\sources\sxs
В случае, если установочный диск вставлен в привод с другой буквой (или используется iso-образ), следует внести в "/Source:" необходимые изменения.
И, чтобы два раза не вставать, с помощью этого инструмента можно устанавливать любые другие компоненты (изменив параметр "/FeatureName:"). Полный список компонентов Windows вместе с их статусами можно получить, набрав
 DISM /Online /GET-Features
Информация получена отсюда.

24 сент. 2013 г.

Debian Xserver DISPLAY=:0 issue

В Debian, начиная с релиза 6.0 (Squeeze), что-то поменяли в логике работы  X-сервера, так что прокатывавший ранее запуск x-приложения по крону в локальной графической сессии вида DISPLAY=:0 /usr/bin/gnome-terminal перестал работать, вываливаясь с ошибкой

No protocol specified
Не удалось  определить аргументы: Не удалось открыть дисплей:
Геморроя это добавило много, но лечится достаточно просто - нужно отключить контроль доступа к X-серверу (или добавить адрес, откуда происходит подключение, в список разрешенных)
user@server:~$ xhost +
access control disabled, clients can connect from any host
После этого все возвращается на круги своя.

21 авг. 2013 г.

VMware VirtualCenter Management Webservices fails to start

После обновление VMWare vSphere до версии 5.1 в EventLog-е обнаружился ворох сообщений с EventID 7031:
The VMware VirtualCenter Management Webservices service terminated unexpectedly.  It has done this 1747 time(s).  The following corrective action will be taken in 60000 milliseconds: Restart the service.
и с EventID 7036:
The VMware VirtualCenter Management Webservices service entered the running state.
Так как в настройках поведения этой службы при крахе стоит вечный рестарт, то оно и запускается-падает целый день.
Поиски причины завели в папку C:\ProgramData\VMware\VMware VirtualCenter\Logs\, где в файле catalina.2013-08-20.log нашлась следующая строчка:
20-Aug-2013 00:00:07.623 SEVERE [WrapperSimpleAppMain] org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated with ProtocolHandler ["http-bio-8080"]
 java.net.BindException: Address already in use: JVM_Bind :8080
    at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:391)
TcpView показал, что этот порт занимает FlashCopyAgent от IBM ServeRAID Manager. Таким образом, удаление не используемого в практике FlashCopyAgent-а (можно удалить без снесения самого ServeRAID-а, который как раз используется) решает проблему.

15 авг. 2013 г.

Windows 2008 R2 + Zabbix + SNMP

После обновления одного из серверов до Windows 2008 R2 в системе мониторинга (Zabbix) отвалилась статистика входящего/исходящего трафика по сетевым интерфейсам. Так как товарищ, который следит за заббиксом, в отпуске, пришлось ковырять проблему самому. Оказалось, что заббикс тащит информацию об этой паре параметров по SNMP. Так как в интерфейсе настройки узлов напротив заданного сервера иконка snmp подсвечена красным, значит, там меня никто не ждет, первый шаг понятен - нужна запущенная служба SNMP Service на win-сервере.
Установка: 
Открываем Server Manager - Features - Add features, ставим галку на пункте SNMP Services, жмем Install. Перезагрузки не требуется.
Далее следует настроить свежеустановленную службу. Для этого в том же Server Manager-е открываем Services, находим SNMP Service (уже должна быть в состоянии Started), и в ее свойствах открываем вкладку Security. В ней в поле Accepted community names добавляем имя public с правами READ ONLY. В этой же вкладке ниже перечисляем все хосты, с которых следует ожидать snmp-запросов (как минимум, следует внести IP сервера мониторинга). Перезапуска службы не требуется, настройки применяются сразу.
После этих манипуляций заббикс должен увидеть возможность получения информации по SNMP (соответствующая иконка должна позеленеть). Однако описанные элементы данных перешли в состояние "Не поддерживается" - после апгрейда ОС на сервере сменились OID-ы, которые отдают нужную заббиксу информацию. Теперь нужно найти их актуальные значения.
Для запроса данных по SNMP потребуется следующий софт - net-snmp. Это пакет утилит для работы с данными по протоколу SNMP, имеются сборки как для Windows, так и для всяких разных линуксов. Запрашивать информацию о доступных OID-ах будем с помощью snmpwalk.exe.
Наша задача - определить OID сетевого интерфейса, данные о трафике через который мы хотим получить. Для этого запросим все данные, содержащие OID ifEntry, и сделаем выборку по названию интерфейса (в моем случае это две Broadcom-овские сетевухи, объединенные в team-интерфейс "BASP Virtual Adapter"):
PS C:\usr> .\bin\snmpwalk.exe -On -v 2c -c public server.example.org ifEntry | Select-String BASP

.1.3.6.1.2.1.2.2.1.2.17 = STRING: BASP Virtual Adapter
.1.3.6.1.2.1.2.2.1.2.21 = STRING: BASP Virtual Adapter-QoS Packet Scheduler-0000
.1.3.6.1.2.1.2.2.1.2.22 = STRING: BASP Virtual Adapter-WFP LightWeight Filter-0000
Нас интересует выделенная цифра. Зная ее, можно составить конкретный запрос как по входящему трафику:
PS C:\usr> .\bin\snmpget.exe -On -v 2c -c public oik1-kirv IF-MIB::ifInOctets.17
.1.3.6.1.2.1.2.2.1.10.17 = Counter32: 2510490472
 так и по исходящему:

PS C:\usr> .\bin\snmpget.exe -On -v 2c -c public oik1-kirv IF-MIB::ifOutOctets.17
.1.3.6.1.2.1.2.2.1.16.17 = Counter32: 1543992988

Теперь осталось исправить значения OID-ов в нужных элементах, подставив новые значения, и проблема решена.


5 авг. 2013 г.

Ghost Solutions (GSS) + Broadcom NetXtreme II NIC

Пробую работать с Symantec Ghost Solutions (бывший Norton Ghost). Выяснились грабельки: во-первых, серверные редакции виндов не дозволяют ему пользоваться своим теневым копированием (или они сами не хотят этого делать, продавая отдельным продуктом подобный функционал), во-вторых, используемое для работы в альтернативном режиме загрузочное окружение - PreOS v2.0, основанное на Vista, не умеет из коробки работать с сетевками Broadcom NetXtreme II (в моем случае, на чипе BCM5708C). 
В общем, день промаялся, пытаясь подобрать драйверочек, который бы и добавился в образ PreOS-а без ошибки, и сетевку подмог увидеть после перезагрузки в этот самый PreOS. В итоге нашел вот эту страничку с вот этой ссылкой на правильные файлики. Пересобрав образ с оными, увидел сетевки как в автоматическом режиме, так и при ручной загрузке boot-образа.

Active Directory inactive users

Понадобилось актуализировать список сервисных пользователей в AD (Windows 2008) на предмет удаления не используемых более учетных записей. Конечно, тут же возник вопрос - а какие из них на самом деле никем и ничем не используются, ведь удаление активной учетной записи приведет к отказу в обслуживании того сервиса, который "привык" запускаться от того или иного имени.
Для разрешения этой проблемы существует специальный LDAP-атрибут: LastLogonTimeStamp, который показывает последний вход в домен пользователя, причем под входом имеется в виду не только интерактивный, но также сетевой и сервисный входы. Подробное описание этого атрибута можно посмотреть по ссылке выше. Единственное, о чем хотелось бы упомянуть - атрибут обновляется примерно с двухнедельной задержкой. Таким образом, если последний таймстамп заданной учетки далек от дня сегодняшнего на несколько недель - можно смело говорить о неактивности аккаунта уже длительное время.

30 июл. 2013 г.

Краткий экскурс в sslh

Доступ ко многим сервисам (особенно в публичных местах или при проксированном доступе на рабочем месте) "из коробки" не работает: что SSH, что OpenVPN, что Jabber, что $еще_стопицот_нужных_сервисов требуют NAT или разрешенный порт на прокси для подключения к удаленной точке. Если таких настроек нет - соединение установить не удастся. 
Однако на сегодняший день реалии таковы, что любой, пусть даже самый ограниченный, доступ к интернет-ресурсам подразумевает разрешенные исходящие соединения на 443/tcp. А это значит, что при наличии собственного сервера в интернете, мы можем получить доступ к нему (или куда-либо еще) с помощью демона sslh.
Этот демон висит на внешнем (доступном из Сети) IP и слушает 443 порт, анализируя входящий трафик. По заголовкам пакетов он определяет "чьих будете" и перенаправляет трафик на соответствующий внутренний адрес и порт. По умолчанию на сегодняший день поддерживаются HTTP, SSL, SSH, OpenVPN, tinc, XMPP, а также существует возможность описать любой другой протокол, задав уникальный для его однозначного определения regex
Разработчики заявляют, что sslh опакечен для многих дистрибутивов (Debian точно есть), но даже если и врут, собрать свежую версию из исходников быстро и просто.
Например, для моего сервера с устаревшим уже Squeeze это будет выглядеть примерно так (в репозитории пакет доступен, однако его версия не умеет иных протоколов, кроме ssh\ssl):
Загружаем исходники:
wget http://www.rutschle.net/tech/sslh-1.15.tar.gz
Распаковываем и переходим в каталог:
tar -zxvf sslh-1.15.tar.gz
cd sslh-1.15.tar.gz
Читаем README, узнаем, что для сборки необходимы заголовочные файлы библиотек libconfig и libwrap. Устанавливаем оные (при необходимости нужно установить набор пакетов для сборки - build-essential):
apt-get install libconfig8-dev libwrap0-dev
Ввиду малого объема кода настройка через configure-скрипт не используется, все изменения в конфигурацию по умолчанию следует внести прямо в Makefile. Меняем PREFIX на
PREFIX=/usr
Далее пробуем собрать бинарник:
make
Если процесс завершился без ошибок, устанавливаем sslh (для Debian сделана специальная цель в Makefile, поэтому используется не make install):
make install-debian
Настраиваем форвардинг нужных нам сервисов (в файле /etc/default/sslh):
LISTEN=server.example.org:443
SSH=localhost:22
SSL=localhost:443
XMPP=localhost:5222
USER=nobody
PID=/var/run/sslh.pid
В предложенном примере sslh будет запущен на интерфейсе с адресом server.example.org:443 (можно указать и IP-адрес). Перед запуском следует убедиться, что порт 443/tcp на желаемом адресе не занят, иначе sslh не сможет запуститься. Форвардиться на внутренний интерфейс будут доступны по умолчанию сервисы SSL, SSH и XMPP. Запустится sslh от имени пользователя nobody, а свой PID запишет в /var/run/sslh.pid
Все, запускаем sslh:
/etc/init.d/sslh star
Да, выяснилось, что init-файл подставляет в строку запуска демона только переменные SSL и SSH, то есть ничего другое (из протоколов) при старте демону не передастся. Лечится ручным добавлением соответствующего параметра. Например, для запуска с форвардингом XMPP я меняю в /etc/init.d/sslh
 start()
{
        echo "Start services: sslh"
        $DAEMON --user ${USER} --listen ${LISTEN} --ssh ${SSH} --ssl ${SSL} --pidfile ${PID}
        logger -t ${tag} -p ${facility} -i 'Started sslh'
}
на
  start()
{
        echo "Start services: sslh"
        $DAEMON --user ${USER} --listen ${LISTEN} --ssh ${SSH} --ssl ${SSL} --xmpp ${XMPP} --pidfile ${PID}
        logger -t ${tag} -p ${facility} -i 'Started sslh'
}
Итак, после запуска в списке сервисов должно быть примерно следующее:
 # ps aux | grep sslh
nobody   13923  0.0  0.0   2084   528 ?        Ss   20:30   0:00 /usr/sbin/sslh --user nobody --listen server.example.org 443 --ssh localhost 22 --ssl localhost 443 --xmpp localhost 5222 --pidfile /var/run/sslh.pid
nobody   13925  0.0  0.0   2084   224 ?        S    20:30   0:00 /usr/sbin/sslh --user nobody --listen server.example.org 443 --ssh localhost 22 --ssl localhost 443 --xmpp localhost 5222 --pidfile /var/run/sslh.pid
nobody   29435  0.0  0.0   2296   676 ?        S    20:49   0:00 /usr/sbin/sslh --user nobody --listen server.example.org 443 --ssh localhost 22 --ssl localhost 443 --xmpp localhost 5222 --pidfile /var/run/sslh.pid
Почему сервисов несколько? Ответ есть в README: sslh собирается в два бинарника - sslh-fork, который запускает новый процесс при каждом новом потоке данных (подключении), и sslh-select, который держит все потоки внутри одного процесса. По умолчанию предлагается fork-вариант, как более стабильный. Однако, если предполагается поддерживать много соединений (несколько сотен), или просто не нравится множество одинаковых процессов в top-е, можно заменить sslh-fork на sslh-select (выполняется из каталога, где собирался sslh):
/etc/init.d/sslh stop
cp sslh-select /usr/sbin/sslh
/etc/init.d/sslh start
После этих операций процесс будет лишь один:
nobody    8956  0.0  0.0   2088   536 ?        Ss   21:43   0:00 /usr/sbin/sslh --user nobody --listen server.example.org 443 --ssh localhost 22 --ssl localhost 443 --xmpp localhost 5222 --pidfile /var/run/sslh.pid
Более сложные конфигурации - к примеру, проксирование или прозрачный режим работы, можно почитать в README.

22 июл. 2013 г.

NXlog: logrotate.

Дошли руки описать простой logrotate-механизм для NXLog, настройка которого была описана несколько раньше. Выглядит это  примерно так:

 <Extension logrotate>  
      Module     xm_fileop  
      <Schedule>  
           When     @daily  
           Exec     file_cycle('C:\nxlog\FloorSwitches\172.21.80.101.log', 14);  
           Exec     file_cycle('C:\nxlog\FloorSwitches\172.21.80.141.log', 14);            
           Exec     file_cycle('C:\nxlog\BladeAMM\172.21.81.20.log', 14);  
           Exec     file_cycle('C:\nxlog\BladeSwitches\172.21.80.161', 14);  
           Exec     file_cycle('C:\nxlog\de1s\10.118.3.153.log', 7);  
           Exec     file_cycle('C:\nxlog\InetRouters\172.21.94.56.log', 30);  
           Exec      file_cycle('C:\nxlog\InetSwitches\172.21.80.109.log', 14);  
           Exec     file_cycle('C:\nxlog\InetSwitches\172.21.80.110.log', 14);  
           Exec     file_cycle('C:\nxlog\InetSwitches\172.21.80.149.log', 14);  
           Exec     file_cycle('C:\nxlog\InetSwitches\172.21.80.150.log', 14);  
                 </Schedule>  
 </Extension>  

К сожалению, не знаю, как автоматизировать добавление в этот модуль файлов для ротирования, поэтому приходится все необходимые файлы описывать вручную.
Пару слов о том, что тут сделано. Используется модуль расширения (Extension Module) xm_fileop, который добавляет нам процедуру file_cycle(). С ее помощью мы ротируем заданный в первом аргументе файл столько раз, сколько указано во втором аргументе.
Периодичность операции ротирования описывается директивой When (в примере - ежедневная ротация), некоторые периоды (например, 1 hour) задаются директивой Every (подробности - в документации).
Так как модули расширения не работают напрямую с поступающими log-данными, то в route они не включаются. Поэтому весь описанный выше блок следует поместить в начали или конце конфигурационного файла, после описания Input/Output-модулей и route-блока.
P.S.: наткнулся  на удобный конвертер xml-подобного кода в приемлемый для вставки в html-страницу.

9 июл. 2013 г.

Проблема запуска исполняемых файлов с сетевых дисков в Windows

Винды иногда поражают не только своими тараканами, то и способами их устранения. Пример: при запуске приложения с сетевого диска (смонтированного в системе) получаем отлуп вида 
Windows cannot access the specified device, path, or file. You may not have the appropriate permissions to access the item.
Будь я в linux, все было бы предельно ясно - раздел смонтирован с опцией noexec, запуск исполняемых файлов запрещен. Перемонтируешь - и порядок. 
А тут интереснее: вилы оказались в повышенных настройках безопасности IE (Enhanced Security). Для решения проблемы следует добавить адрес сервера, предоставляющего общую папку (в виде ссылки file://servername/) в зону Local Intranet (Свойства обозревателя - Безопасность). Изменения применяются тут же.
Озарение снизошло отсюда, за что автору спасибо.

10 июн. 2013 г.

lvm volume reduce

Краткая памятка на тему "Как в среде LVM отрезать кусок от логического диска":
1. Сначала следует отмонтировать и проверить файловую систему раздела:
umount /home
fsck.ext3 -f -y /dev/mapper/Debian-home
2. уменьшить размер файловой системы (всегда сначала уменьшается размер ФС, и только потом - размер раздела)
resize2fs -p /dev/mapper/Debian-home 200G ##указывается новый размер раздела
3. уменьшить размер раздела (можно делать в смонтированном состоянии)
lvreduce -L 200G /dev/mapper/Debian-home ##указывается новый размер раздела (для указания относительных размеров следует использовать "-"

windows: show nonpresent devices

Сгорела в винде сетевка, поставил новую - а при попытке навесить тот же IP говорит винда человеческим голосом: "Сетевки нет, а IP к ней все равно привязан, а-та-та!". Чтобы окончательно почившую в бозе сетевку удалить, нужно увидеть ее в Диспетчере устройств со включенным отображением скрытых девайсов. Но чтобы физически отключенные устройства показались, нужно ввести вот такую переменную окружения: 
set devmgr_show_nonpresent_devices=1
 Перезагрузок не надо, все работает сразу.

6 июн. 2013 г.

MS Outlook - отправка файла конкретному пользователю из контекстного меню Проводника

По работе часто приходится кидаться документами в одного-двух е-адресатов. Обычно это в win-среде делается через правый клик - Отправить - Адресат; далее выбираем из адресной книги нужного (или автоподбором, неважно) и отправляем. Есть хинт, позволяющий чуть-чуть сократить отправку до трех кликов:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\Shell\Send to ExampleUser\Command]
@="\"C:\\Program Files (x86)\\Microsoft Office\\Office14\\OUTLOOK.EXE\" /c IPM.Note /m exampleuser@example.com /a \"%1\""
Оформляем это в .reg-файл, запускаем, применяем, пользуемся (правый клик - Send to ExampleUser).
Другие параметры командной строки outlook.exe (для версии 2010) доступны тут.

1 июн. 2013 г.

Mediatomb DLNA + Samsung TV

Хоть и записывал два с половиной года назад тонкие места настройки DLNA-сервера Mediatomb для корректной работы с телевизорами Samsung, все равно, когда пришлось снова повторить настройку - убил добрый час на проблему ошибки проигрывания mkv. Поэтому - оставлю полный конфиг.
cat /etc/mediatomb/config.xml

<?xml version="1.0" encoding="UTF-8"?>

<config version="2" xmlns="http://mediatomb.cc/config/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mediatomb.cc/config/2 http://mediatomb.cc/config/2.xsd"><!--

    Read /usr/share/doc/mediatomb-common/README.gz section 6 for more

    information on creating and using config.xml configration files.

   -->

 <server>

   <ui enabled="yes" show-tooltips="yes">

     <accounts enabled="no" session-timeout="30">

       <account user="mediatomb" password="mediatomb"/>

     </accounts>

   </ui>

   <name>MediaTomb</name>

   <udn>uuid:5b7694f1-16e9-4f84-bf86-13d9a273f58d</udn>

   <home>/var/lib/mediatomb</home>

   <webroot>/usr/share/mediatomb/web</webroot>

   <storage caching="yes">

     <sqlite3 enabled="yes">

       <database-file>mediatomb.db</database-file>

     </sqlite3>

     <mysql enabled="no">

       <host>localhost</host>

       <username>mediatomb</username>

       <database>mediatomb</database>

     </mysql>

   </storage>

   <protocolInfo extend="yes"/><!-- For PS3 support change to "yes" --><!--

      Uncomment the lines below to get rid of jerky avi playback on the

      DSM320 or to enable subtitles support on the DSM units

  -->


   <custom-http-headers>

     <add header="X-User-Agent: redsonic"/>

     <add header="transferMode.dlna.org: Streaming"/>

     <add header="contentFeatures.dlna.org: DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"/>


   </custom-http-headers>


<!--

   <manufacturerURL>redsonic.com</manufacturerURL>

   <modelNumber>105</modelNumber>

   --><!-- Uncomment the line below if you have a Telegent TG100 --><!--

      <upnp-string-limit>101</upnp-string-limit>

   -->

   <extended-runtime-options>

     <ffmpegthumbnailer enabled="yes">

       <thumbnail-size>128</thumbnail-size>

       <seek-percentage>2</seek-percentage>

       <filmstrip-overlay>yes</filmstrip-overlay>

       <workaround-bugs>no</workaround-bugs>

     </ffmpegthumbnailer>

     <mark-played-items enabled="no" suppress-cds-updates="yes">

       <string mode="prepend">*</string>

     </mark-played-items>

   </extended-runtime-options>

 </server>

 <import hidden-files="yes">

   <scripting script-charset="UTF-8">

     <common-script>/usr/share/mediatomb/js/common.js</common-script>

     <playlist-script>/usr/share/mediatomb/js/playlists.js</playlist-script>

     <virtual-layout type="builtin">

       <import-script>/usr/share/mediatomb/js/import.js</import-script>

       <dvd-script>/usr/share/mediatomb/js/import-dvd.js</dvd-script>

     </virtual-layout>

   </scripting>

   <mappings>

     <extension-mimetype ignore-unknown="no">

       <map from="mp3" to="audio/mpeg"/>

       <map from="ogg" to="application/ogg"/>

       <map from="asf" to="video/x-ms-asf"/>

       <map from="asx" to="video/x-ms-asf"/>

       <map from="wma" to="audio/x-ms-wma"/>

       <map from="wax" to="audio/x-ms-wax"/>

       <map from="wmv" to="video/x-ms-wmv"/>

       <map from="wvx" to="video/x-ms-wvx"/>

       <map from="wm" to="video/x-ms-wm"/>

       <map from="wmx" to="video/x-ms-wmx"/>

       <map from="m3u" to="audio/x-mpegurl"/>

       <map from="pls" to="audio/x-scpls"/>

       <map from="flv" to="video/x-flv"/>

       <map from="mkv" to="video/mpeg"/>

       <map from="mka" to="audio/x-mkv"/><!-- Uncomment the line below for PS3 divx support --><!-- <map from="avi" to="video/divx"/> --><!-- Uncomment the line below for D-Link DSM / ZyXEL DMA-1000 --><!-- <map from="avi" to="video/avi"/> -->

       <map from="vob" to="video/mpeg"/>

       <map from="ts" to="video/mpeg"/>

       <map from="mpg" to="audio/mpeg"/>

       <map from="m2ts" to="video/avc"/>

       <map from="avi" to="video/mpeg"/>

       </extension-mimetype>

     <mimetype-upnpclass>

       <map from="audio/*" to="object.item.audioItem.musicTrack"/>

       <map from="video/*" to="object.item.videoItem"/>

       <map from="image/*" to="object.item.imageItem"/>

       <map from="application/ogg" to="object.item.audioItem.musicTrack"/>

     </mimetype-upnpclass>

     <mimetype-contenttype>

       <treat mimetype="audio/mpeg" as="mp3"/>

       <treat mimetype="application/ogg" as="ogg"/>

       <treat mimetype="audio/x-flac" as="flac"/>

       <treat mimetype="image/jpeg" as="jpg"/>

       <treat mimetype="audio/x-mpegurl" as="playlist"/>

       <treat mimetype="audio/x-scpls" as="playlist"/>

       <treat mimetype="audio/x-wav" as="pcm"/>

       <treat mimetype="audio/L16" as="pcm"/>

       <treat mimetype="video/x-msvideo" as="avi"/>

       <treat mimetype="video/mp4" as="mp4"/>

       <treat mimetype="audio/mp4" as="mp4"/>

       <treat mimetype="application/x-iso9660" as="dvd"/>

       <treat mimetype="application/x-iso9660-image" as="dvd"/>

       <treat mimetype="video/x-msvideo" as="mkv"/>

       <treat mimetype="audio/x-msaudio" as="mka"/>

       <treat mimetype="video/x-mkv" as="mkv"/>

       <treat mimetype="video/avi" as="avi"/>

     </mimetype-contenttype>

   </mappings>

   <online-content><!-- Make sure to setup a transcoding profile for flv -->

     <YouTube enabled="no" refresh="28800" update-at-start="no" purge-after="604800" racy-content="exclude" format="flv" hd="no">

       <favorites user="mediatomb"/>

       <standardfeed feed="most_viewed" time-range="today"/>

       <playlists user="mediatomb"/>

       <uploads user="mediatomb"/>

       <standardfeed feed="recently_featured" time-range="today"/>

     </YouTube>

     <Weborama enabled="no" refresh="28800" update-at-start="no">

       <playlist name="Active" type="playlist" mood="active"/>

       <playlist name="Metal" type="playlist">

         <filter>

           <genres>metal</genres>

         </filter>

       </playlist>

     </Weborama>

     <AppleTrailers enabled="no" refresh="43200" update-at-start="no" resolution="640"/>

   </online-content>

 </import>

 <transcoding enabled="no">

   <mimetype-profile-mappings>

     <transcode mimetype="video/x-flv" using="vlcmpeg"/>

     <transcode mimetype="application/ogg" using="vlcmpeg"/>

     <transcode mimetype="application/ogg" using="oggflac2raw"/>

     <transcode mimetype="audio/x-flac" using="oggflac2raw"/>

   </mimetype-profile-mappings>

   <profiles>

     <profile name="oggflac2raw" enabled="no" type="external">

       <mimetype>audio/L16</mimetype>

       <accept-url>no</accept-url>

       <first-resource>yes</first-resource>

       <accept-ogg-theora>no</accept-ogg-theora>

       <agent command="ogg123" arguments="-d raw -o byteorder:big -f %out %in"/>

       <buffer size="1048576" chunk-size="131072" fill-size="262144"/>

     </profile>

     <profile name="vlcmpeg" enabled="no" type="external">

       <mimetype>video/mpeg</mimetype>

       <accept-url>yes</accept-url>

       <first-resource>yes</first-resource>

       <accept-ogg-theora>yes</accept-ogg-theora>

       <agent command="vlc" arguments="-I dummy %in --sout #transcode{venc=ffmpeg,vcodec=mp2v,vb=4096,fps=25,aenc=ffmpeg,acodec=mpga,ab=192,samplerate=44100,channels=2}:standard{access=file,mux=ps,dst=%out} vlc:quit"/>

       <buffer size="14400000" chunk-size="512000" fill-size="120000"/>

     </profile>

   </profiles>

 </transcoding>

</config>

XML-код конвертирован с помощью QuickEscape.

7 мая 2013 г.

Сбор логов на windows-сервере. Часть 2 - nxlog.

Продолжаем начатую здесь тему. Как я уже упоминал, syslog for windows хорош при относительно небольшом количестве источников данных (или в случае отсутствия проблемы сортировки входящего log-трафика). Если же имеется несколько десятков серверов и коммутаторов/маршрутизаторов, причем хочется раскладывать логи по полочкам папочкам, то возникают сложности. К тому же многие коммутаторы той же Cisco не умеют слать syslog-based логи на нестандартный (514/udp) порт.
nxlog представляет собой более развесистую клюкву гибкую с точки зрения работы с log-файлами альтернативу. Проект достаточно подробно документирован (HTML, PDF), в мейл-листах наблюдается какая-никакая активность. Далее рассмотрим пример работающего конфига с пояснениями, что там такого наворочено. Однако от чтения мануала нижеизложенное словоблудие не освобождает, а напротив, должно к этому мотивировать ;) .
Концепция  построения конфига nxlog похожа на рассмотренный ранее syslog for windows с учетом, конечно, модульного принципа работы этой службы. В простейшем случае нам необходимо описать входной (Input) и выходной (Output) потоки (откуда мы данные получим и куда направим), которые далее связываются в "маршрут" (Route). Каждый поток подгружает описанный в нем модуль, непосредственной работающий с данными. Модули подробно описаны в соответствующем разделе документации, имеются примеры их использования.
По пути от "Input" к "Output" данные можно "завернуть" в "Processor" - отдельная сущность для подгрузки модулей, предназначенных для внесения изменений в логи (конвертация, форматирование, поиск и так далее). 
nxlog поддерживает регулярные выражения и внутренние переменные, а также логические конструкции if/then, что позволяет очень гибко сортировать входящий поток как по источнику данных, так и по их содержимому (например, по степени критичности сообщений).
В качестве примера возьмем ту же конфигурацию сети, что и в прошлый раз. Задача та же - собрать логи с оборудования Cisco и серверов Linux. Дополнительные "плюшки" - создавать отдельный лог-файл для каждого устройства и группировать заданным образом файлы по папкам.
define ROOT C:\Program Files (x86)\nxlog
define LOGDIR C:/nxlog

Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %LOGDIR%
LogFile %LOGDIR%\nxlog.log

<Input UDP_flow>
    Module im_udp
    Port 514
    Host 0.0.0.0
    SockBufSize 15000000
</Input>

<Output logfile>
    Module om_file
    CreateDir true
    Exec $ip = $MessageSourceAddress;

##cisco switches
    Exec     if $ip =~ /10.10.10.(101|102|103|104|105|141|142|143|144|145)/ \
            {     $type = "FloorSwitches"; \
                $type2 = "test"; }
   
## cisco inet routers
    Exec     if $ip =~ /10.10.10.1(09|10|49|50)/ \
            $type = "InetRouters";

## linux firewalls
    Exec     if $ip =~ /10.10.11.(3|4)/ \
            $type = "LinuxFW";

## linux servers
    Exec     if $ip =~ /10.10.10.(12|13)/ \
            $type = "LinuxServers";

### Output folder/file           
    File "%LOGDIR%/"   $type   "/"   $ip   ".log"
</Output>

<Route default>   
    Path UDP_flow => logfile
</Route>   
Итак, сначала определяются переменные окружения - корневая директория, место хранения лог-файлов и прочее. Далее описывается входной поток <Input>, названный UDP_flow - мы используем входной модуль im_udp с описанными параметрами. Так как видоизменять входящие данные не требуется, потоков <Processor> нет, сразу переходим к потоку <Output> с названием logfile. Внешне он выглядит сложнее, однако по сути все просто: 
Во-первых, мы используем выходной модуль om_file с описанными параметрами (список всех доступных параметров и описание их действий смотри в мануале). 
Во-вторых, мы используем возможность Nxlog-а исполнять внутренние команды (также возможен вызов и внешних процедур или программ) через директиву Exec. 
В-третьих, мы пользуемся служебной переменной $MessageSourceAddress, которая автоматически заполняется входным модулем im_udp. Так как логи передаются построчно, для каждого момента времени мы точно знаем, кто именно прислал данную информацию на 514/udp.
В-четвертых, пользуясь поддержкой регулярных выражений и логических конструкций, мы описываем желаемую логику сортировки - группируем источники по ip-адресам и определяем переменную $type. Переменная $type2 в ##cisco switches лишняя  и оставлена для того, чтобы показать, как описываются блоки данных (Statements).
В-пятых, описываем файл, который будет записываться та или иная входящая строка. Путь конкатенируется исходя из определнных выше переменных. Как было отмечено выше, логи поступают и обрабатываются построчно, поэтому для каждой строки значения $ip и $type могут изменяться.
Наконец, описываем "маршрут" движения данных - <Route>. В нашем случае он простой 
Path UDP_flow => logfile
вход - выход.
Таким образом, в папке LOGDIR создается иерархия папок, внутри которых (согласно правилам сортировки) располагаются лог-файлы удаленных устройств.
К сожалению, встроенного механизма rotate у nxlog нет. Однако модуль om_file предоставляет процедуру rotate_to(), с помощью которой можно этот вопрос порешать.
В своей работе я остановился на nxlog, однако syslog for windows также нашел себе применение в более мелких проектах. Оба инструмента хороши, каждый имеет свои сильные стороны - выбор есть всегда.

29 апр. 2013 г.

Сбор логов на windows-сервере. Часть 1 - syslogd for windows.

Логи - это важно. Если устройств много, в целях удобства и резервного копирования хорошим решением является создание некоего log-сервера, на который серверы и оборудование будут свои логи по сети пересылать.
Далее речь пойдет о задаче сбора syslog-сообщений от unix-серверов и активного оборудования (cisco ios) на windows-сервере. В процессе разработки решения были найдены два opensource-продукта - syslog for windows и nxlog. Первый более прост в освоении и подходит для случаев, когда источников или немного, или не стоит задачи сортировки входящих сообщений. Второй продукт более "развесист", при его развертывании не обойтись без чтения документации, однако эта "развестистость" дает очевидно большую гибкость в решении задач сбора и сортировки входящих логов.
Теперь чуть более подробно. 
Syslog for windows - это форк классического unix-демона syslog. Собранный для работы в Windows, умеет регистрироваться и работать как системная служба (конечно, возможен и "ручной" запуск). Также имеется возможность работы в режиме "multi-instance" - регистрируются несколько служб с уникальными названиями. Документация по настройке довольно куцая, однако ее вполне достаточно для написания собственного конфиг-файла, ибо софт написан под выполнение конкретной задачи сбора и хранения логов и умеет только это. Но умеет хорошо.
Для тех, кто знаком с внешниим видом юниксового syslog.conf, многое покажется знакомым - разница лишь в том, что все они пишутся в xml-"обертке". Логика файла проста - в простейшем случае должны быть описаны три сущности: источник (source), назначение (destination) и путь (logpath). У каждой из сущностей есть свой набор настроек, с помощью которых задается их поведение.
Для решения задачи сортировки входящих логов должна быть определена директива filter, работа которой основана на понятиях facility и priority. У каждого отправляемого удаленным syslog-сервером сообщения определен уровень того и другого: facility может иметь численное значение в диапазоне 0..23 или буквенное kern...debug (полный список смотрим в документации); prority, аналогично, задается или численно в диапазоне 0..7, или буквенно - emerg..debug.  Таким образом, общая идея сортировки входящих сообщений - группировка по источнику (используем разные уровни facility для разных устройств) или по важности сообщений (по уровню proirity). Количество описанных фильтров и назначений не ограничено (разве что уровней facility всего 24, а удобных для работы уровней local - и того меньше, 8), главное, чтобы в каждом logpath было по одному того и другого. 
В итоге может получиться такой кофигурационный файл:

<?xml version="1.0"?>
<!--
syslog.conf    Configuration file for syslogd.
        Based on Debian's syslog.conf.
-->
<conf>

<options logdir="log"/>
<source name="src_udp_0" type="udp" port="514"/>
<source name="src_udp_1" type="udp" port="515"/>

<!-- cisco switches -->
<destination name="cisco_switches" file="cisco_switches.log" rotate="monthly" backlogs="12"/>
<filter name="cisco_switches">
    <facility name="local3"/>
    <priority name="emerg"/>
    <priority name="alert"/>
    <priority name="crit"/>
    <priority name="error"/>
    <priority name="warning"/>
    <priority name="notice"/>
    <priority name="info"/>
    <priority name="debug"/>
</filter>
<logpath source="src_udp_0" filter="cisco_switches" destination="cisco_switches"/>

<!-- cisco inet routers -->
<destination name="inet_routers" file="inet_routers.log" rotate="monthly" backlogs="12"/>
<filter name="inet_routers">
    <facility name="local4"/>
    <priority name="emerg"/>
    <priority name="alert"/>
    <priority name="crit"/>
    <priority name="error"/>
    <priority name="warning"/>
    <priority name="notice"/>
    <priority name="info"/>
    <priority name="debug"/>
</filter>
<logpath source="src_udp_0" filter="inet_routers" destination="inet_routers"/>

<!-- linux firewalls -->
<destination name="linux_fw" file="linux_fw.log" rotate="daily" backlogs="30"/>
<filter name="linux_fw">
    <facility name="local1"/>
    <priority name="emerg"/>
    <priority name="alert"/>
    <priority name="crit"/>
    <priority name="error"/>
    <priority name="warning"/>
    <priority name="notice"/>
    <priority name="info"/>
    <priority name="debug"/>
</filter>
<logpath source="src_udp_1" filter="linux_fw" destination="linux_fw"/>

<!-- linux servers -->
<destination name="linux_srv" file="linux_srv.log" rotate="weekly" backlogs="10"/>
<filter name="linux_wrk">
    <facility name="local2"/>
    <priority name="emerg"/>
    <priority name="alert"/>
    <priority name="crit"/>
    <priority name="error"/>
    <priority name="warning"/>
    <priority name="notice"/>
    <priority name="info"/>
    <priority name="debug"/>
</filter>
<logpath source="src_udp_1" filter="linux_srv" destination="linux_srv"/>

<!--Сборная солянка - все логи за текущий день-->
<destination name="default" file="default.log" rotate="daily" backlogs="7"/>
<destination name="default1" file="default1.log" rotate="daily" backlogs="7"/>
<filter name="default">
    <facility name="kern"/>
    <facility name="user"/>
    <facility name="mail"/>
    <facility name="daemon"/>
    <facility name="syslog"/>
    <facility name="lpr"/>
    <facility name="news"/>
    <facility name="uucp"/>
    <facility name="cron"/>
    <facility name="ftp"/>
    <facility name="local0"/>
    <facility name="local1"/>
    <facility name="local2"/>
    <facility name="local3"/>
    <facility name="local4"/>
    <facility name="local5"/>
    <facility name="local6"/>
    <facility name="local7"/>
    <priority name="emerg"/>
    <priority name="alert"/>
    <priority name="crit"/>
    <priority name="error"/>
    <priority name="warning"/>
    <priority name="notice"/>
    <priority name="info"/>
    <priority name="debug"/>
</filter>

<logpath source="src_udp_0" filter="default" destination="default"/>
<logpath source="src_udp_1" filter="default" destination="default1"/>
Пара пояснений по ходу. С таким конфиг-файлом мы можем запустить две службы syslogd:
 syslogd --install --instance cisco
 syslogd --install --instance linux
одна из них зарегистрируется как syslogd_cisco и будет слушать 514/udp, другая - как syslogd_linux на порту 515/udp.
Входящие сообщения с удаленных syslog-серверов (настроенных на передачу данных на заданный сервер) пишутся в разные файлы согласно назначенным уровням facility. Опцией logdir мы задаем каталог хранения логов. В данном случае указан относительный (от места установки syslogd) путь, однако можно указывать и абсолютный.
Прямо в описании destination можно задать и опции ротации - с какой периодичностью и глубиной хранить историю (filename переименовывается в filename.1 и так далее до величины backlogs).
Помимо этого, все сообщения (включая те, что не попали ни в один из фильтров) записываются в общие log-файлы default.log и default1.log.
Практическая эксплуатация показала надежность этого решения - службы работают стабильно, друг дружке не мешают, никаких подвисаний себе не позволяют. Однако стоит помнить, что при наличии проблем в сети, связанных как с загруженностью каналов, настройкой коммутаторов или с иными причинами, данные могут быть не доставлены - протокол udp не гарантирует доставку пакетов.
 

16 апр. 2013 г.

Убиение чмода =)

Attack: chmod -x /bin/chmod
Defense: /lib/ld-linux.so.2 /bin/chmod 755 /bin/chmod

14 мар. 2013 г.

HP Compaq 8200 Elite VT-x enabling

Потребовалось на рабочем HP Compaq 8200 Elite CMT развернуть KVM. Все бы хорошо, однако модуль kvm_intel.so не захотел загружаться - следствие того, что в BIOS отключена аппаратная виртуализация (VT-x). А теперь два хинта: 
1. Чтобы попасть в вышеозначенном системнике в BIOS, жмем F10;
2. Чтобы найти опцию включения VT-x, идем в Security - System Security, и там уже включаем (Enabled) нужную опцию (VT-x).

12 февр. 2013 г.

Synergy client scrolling problem.

Если кто не в курсе, Synergy - это проект, позволяющий "расшарить" один комплект мышь-клавиатура на несколько рабочих станций, причем прозрачно для ОС (поддерживаются Linux, Windows, MacOS). Подробности на их страничке.
Так вот, у меня используется серверная часть на Win7-компьютере, клиентская - на Deb-машине. Возникла проблема - в линуксе скролл или не работал совсем, или с урывками. Для решения этой проблемы следует изменить значение параметра --yscroll: по умолчанию оно равно 120, мне пришлось уменишить до 20. Таким образом, правим скрипт автозапуска:
cat /etc/X11/Xsession.d/70synergyc:
/usr/bin/killall synergyc
sleep 1
/usr/bin/synergyc --yscroll 20 serverpc.example.org
... и получаем рабочий скроллинг на клиентской Linux-машине.

11 февр. 2013 г.

List of Debian repositories

Довольно полный список официальных, неофициальных и вообще левых репозиториев для Debian, отформатированный для вставки в /etc/apt/sources.list .

30 янв. 2013 г.

Различные настройки Samba для разных клиентов

Samba умеет определять, какие настройки применять для различных подключенных к ней клиентов. Иногда это очень выручает. Для этого используются, во-первых, внутренние переменные (%m, %I и так далее), во-вторых, опции config file и include
Если вкратце, include добавляет параметры (из файла, на который указывает) к описанным в smb.conf, при этом при совпадении переопределяются опции, указанные в smb.conf ранее строки include = /path/to/file; параметры, указанные после, остаются неизменными. Параметр config file, напротив, заменяет собой smb.conf, переопределяя при совпадении все, что ниже него по тексту конфига. Подробнее о параметрах и внутренних переменных (с примерами), можно поглядеть в официальной документации проекта Samba.
Пример из жизни. Есть файловый сервер, на котором две шары: public и private, и три клиента: pc1, pc2, pc3, каждый из которых должен иметь доступ к некоторым ресурсам: pc1 - к public, pc2 - к private, pc3 - к public и private. Чтобы это реализовать, потребуются вышеописанные опции. Итак, содержимое конфигов: 

smb.conf: 
 ##for pc2
config file  = /etc/samba/smb.conf-%m
   workgroup = WORK
   server string = %h server
   netbios name = server
   dns proxy = no
   log file = /var/log/samba/log.full
   log level = 1
   max log size = 10000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   security = share
   encrypt passwords = true
   passdb backend = tdbsam
   obey pam restrictions = yes
   invalid users = root
[public]
        path = /public
        comment = Public Resource 
        guest ok = yes
        browseable = yes
        writable = yes
        force user = nobody
        force create mode = 0666
        force directory mode = 0777

##for pc3
include = /etc/samba/smb-share.conf-%m
smb.conf-pc2:
   log file = /var/log/samba/log.private
   syslog = 0 
[private]
        path = /private
        comment = Private Resource
        guest ok = yes
        browseable = yes
        writable = yes
        force user = nobody
        force create mode = 0666
        force directory mode = 0777 
 smb-share.conf-pc3:
[private]
        path = /private
        comment = Private Resource
        guest ok = yes
        browseable = no
        writable = yes
        force user = nobody
        force create mode = 0666
        force directory mode = 0777
Такая конфигурация предоставляет по умолчанию всем пользователям одну шару public. Фишка рассматриваемых параметров в том, что они срабатывают только при нахождении файла, указанного их аргументом. Отсутствие файла не является ошибкой конфигурирования - информации в лог не пишется, сам параметр игнорируется.
Таким образом, только когда к файловому серверу подключаются клиенты с NetBIOS-именами pc2 и pc3 (или с заданными IP-адресами, если используется переменная %I), срабатывают, соответственно, config file и include. В первом случае клиент pc2 видит одну шару private (плюс его действия начинают записываться в отдельный лог-файл log.private с увеличенным loglevel), во втором - клиент pc3 видит две шары - private и public и для него используются настройки из основного smb.conf.


23 янв. 2013 г.

VK.com birthdays export

Экспорт информации о днях рождения контактов из vk.com с последующим импортом в Google Calendar - тут. Проверено, работает.

15 янв. 2013 г.

KDE SC 4.8 + multiply monitors

Забавная бага (или фича?) словилась на сабжевых кедах при настройке работы с двумя мониторами. Мониторы увиделись, kde-шной утилитой настроились как общий рабочий стол. Однако вне зависимости от комбинаций выставленных галочек в разделе конфигурации поведения окон при мультимониторной конфигурации все окна вели себя так, как будто у меня один большой монитор, а не два отдельных - распахивались сразу на оба монитора или центровались между ними по центру.
Оказалось, корень зла в том, что KDE работает не с мониторами как таковыми, а с рабочими столами, и вышеназванные опции относятся к рабочим столам. По умолчанию у меня был один рабочий стол, и добавление второго монитора без увеличения количества рабочих столов (даже при соответствующей настройке - каждому монитору дать свой рабочий стол) приводило к расширению рабочего пространства на оба монитора. Если увеличить количество рабочих столов до двух, опции многомониторной конфигурации начинают корректно применяться и работать.

14 янв. 2013 г.

Debian + Windows domain

Годится не только для debian-based дистрибутивов, но, думаю, и для большинства Unix-систем, где есть samba, kerberos и winbind. Задачка несложная, ввести рабочую станцию (или сервер, неважно) в домен Active Directory и получить возможность авторизации доменных пользователей как графически, так и по ssh. Мне для успешной настройки потребовались пакеты samba, winbind, krb5-user, krb5-config, nscd. Необходимые для доменной авторизации пользователей модули PAM (например, pam_winbind) были установлены автоматически как зависимости.
Исходные данные: имеется домен example.org (win2k3), рабочая станция user-test (Debian Sid), Администратор домена admin, пользователь домена user. В качестве системного DNS используются контроллеры домена (директивы nameserver в resolv.conf или dns-nameserver в interfaces).
Необходимые правки конфигов:
smb.conf:
[global]
workgroup = EXAMPLE
netbios name = user-test
server string = test debian pc
security = ADS
preferred master = no
disable spoolss = Yes
show add printer wizard = No
idmap config * : range = 15000-20000
#winbind separator = +
winbind use default domain = Yes
template shell = /bin/bash
use sendfile = Yes
realm = example.org

log file = /var/log/samba/log.full
load printers = no
printing = bsd
printcap name = /dev/null

krb5.conf:
[libdefaults]
        default_realm = EXAMPLE.ORG
        krb4_config = /etc/krb.conf
        krb4_realms = /etc/krb.realms
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true
        v4_instance_resolve = false
        v4_name_convert = {
                host = {
                        rcmd = host
                        ftp = ftp
                }
                plain = {
                        something = something-else
                }
        }
        fcc-mit-ticketflags = true
[realms]
        EXAMPLE.ORG = {
                kdc = dc1.example.org
                kdc = dc2.example.org
                admin_server = dc1.example.org
        }
[domain_realm]
        .example.org = EXAMPLE.ORG
        example.org = EXAMPLE.ORG
[login]
        krb4_convert = true
        krb4_get_tickets = false

nsswitch.conf:
#passwd:         compat
passwd:         files winbind
#group:          compat
group:          files winbind
#shadow:         compat
shadow:         files winbind
#hosts:          files dns
hosts:          files dns winbind

pam.d/common-auth:

auth    [success=2 default=ignore]      pam_unix.so nullok_secure
auth    [success=1 default=ignore]      pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so




pam.d/common-password:

password        [success=2 default=ignore]      pam_unix.so obscure sha512
password        [success=1 default=ignore]      pam_winbind.so use_authtok try_first_pass
password        requisite                       pam_deny.so
password        required                        pam_permit.so
pam.d/common-account:
account [success=2 new_authtok_reqd=done default=ignore]        pam_unix.so
account [success=1 new_authtok_reqd=done default=ignore]        pam_winbind.so
account requisite                       pam_deny.so
account required                        pam_permit.so
pam.d/common-session:

session         required                pam_mkhomedir.so skel=/etc/skel umask=0022
session         sufficient              pam_unix.so
session         sufficient              pam_sufficient.so


После правки коифигов и перезапуска сервисов присоединяемся к домену, предварительно синхронизировав время с контроллером домена (net time set dc1.example.org):

net ads join -Uadmin
admin's password:
Using short domain name -- EXAMPLE 
Joined 'USER-TEST' to realm 'EXAMPLE.COM'
Проверим успешность ввода с помощью wbinfo:

root@user-test:~# wbinfo -t
checking the trust secret for domain EXAMPLE via RPC calls succeeded
Команды wbinfo -u и wbinfo -g должны показать список пользователей и групп Active Directory.

11 янв. 2013 г.

Squid cache peer proxy

Краткая справка о том, как настроить простейший каскадный (cache-peer) прокси. Все настройки прописываются в squid.conf:
http_port 3128  ## ждем подключения клиентов на этот порт
acl myuser src 192.168.1.100 ## даем доступ для заданных рабочих станций
http_access allow myuser ## активируем описанный выше доступ
cache_peer 192.168.1.254   parent  3128  7 no-digest no-query allow-miss ## описываем вышестоящий (родительский) прокси-сервер, куда следует перенаправлять запросы
never_direct allow myuser ## запрещаем прямые (в обход parent proxy) запросы от заданных рабочих станций
Если все сделано верно, в cache.log после перезапуска squid-а должна появиться следующая запись:
2013/01/11 14:01:51| Configuring 192.168.1.254 Parent 192.168.1.254/3128/7
2013/01/11 14:01:51| Ready to serve requests.
Теперь на рабочей станции 192.168.1.100 в настройках, например, браузера выставляем IP и порт этого squid и получаем рабочий каскадный прокси.