08 февраля 2013

Опубликованы подробности уязвимости UPnP в устройствах различных производителей

В прошлом месяце было опубликовано предупреждение о скором раскрытии подробностей о критической уязвимости в беспроводных маршрутизаторах Cisco Linksys. Как и было обещано, на этой неделе опубликовали подробности этой уязвимости.

Суть уязвимости заключается в ошибке в реализации протокола UPnP в стеке Broadcom (используется в уязвимых устройствах Linksys) которая привела к возможности выполнения произвольного кода на уязвимом устройстве с правами привилегированного пользователя. Как оказалось позже, эта уязвимость касается многих устройств других производителей, использующих стек Broadcom. Примечательно, что часть этих устройств уязвима не только из локальной сети.

Согласно информации от Rapid7 из приблизительно 80 млн. устройств, найденных в сети, около 15 млн. - уязвимы.

Подобная уязвимость найдена и уже исправлена в libupnp - свободной реализации протокола UPnP.

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

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

04 февраля 2013

Wine 1.5.23 для Debian Squeeze/Wheezy

Выложил пакеты для Wine 1.5.23 в свой репозитарий для Debian Squeeze/Wheezy. Анонс новой версии.

На этих выходных выдался свободный час и я решил немного улучшить пакеты Wine (wine-unstable), которые я собираю для себя. На linux.org.ru мне порекомендовали обратить внимание на несколько моментов, которые не учтены в моих пакетах:
  • нет поддержки amd64;
  • нет поддержки OpenCL.

Поддержку OpenCL я добавил только вчера и только для версии под Wheezy (пришлось разделить пакет на два, поскольку я не в курсе как добавить "мягкую" зависимость в Build-Depends).

Пакет для Debian Squeeze под архитектуру amd64 я собрал довольно давно, но для Debian Wheezy у меня пока не получается из-за перехода на multi-arch. Это требует адаптации пакета, которая в свою очередь потребует свободного времени. Но как говорил один товарищ в известном фильме Гайдая - "тот кто нам мешает, тот нам и поможет" (C) Кавказская пленница.

Я это к тому, что при помощи multi-arch появилась возможность установить пакеты для архитектуры i386 в amd64 и использовать их без проблем (большинство пакетов Wine под amd64 являются простыми врапперами, которые предлагают установить 32-битную версию). Для этого нужно проделать несколько несложных манипуляций.

Сначала добавим стороннюю архитектуру (у вас ведь нативная amd64?):

root@wheezy ~# dpkg --add-architecture i386

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

root@wheezy ~# dpkg --print-foreign-architectures
i386

Теперь подключите мой репозитарий в APT и обновите список пакетов:

root@wheezy ~# wget -q -O- http://www.tataranovich.com/tataranovich.asc | apt-key add -
root@wheezy ~# apt-get update

Теперь можно установить wine:

root@wheezy ~# apt-get install wine-unstable:i386

Этот способ не позволит запускать 64-битные приложения Windows, но большинству пользователей это не должно быть критично, т.к. я еще не знаю ни одного массового приложения, которое было бы доступно только для архитектуры x86_64.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

30 января 2013

Не загружался сервер с программным RAID1 на MD

Вчера ночью на одном из серверов вылетел жесткий диск из программного RAID1. Один из вариантов решения проблемы - программно отключить сбойный диск и затем вернуть его обратно, запустив поиск на SATA шине. Я уже как-то описывал этот способ тут.

Недостаток этого способа в том, что не всегда удается надолго вернуть в строй диск подобным способом. Более надежным будет отключить питание от диска и затем подключить его обратно. Поскольку у того сервера нет hot-swap корзины и была возможность отключить сервер, то я выключил и включил сервер (просто перезагрузить или нажать reset может быть недостаточно).

Однако после меню grub'а не последовала загрузка системы, а вместо этого меню ждала ошибка вида VolGroup00/swap not found. Через несколько секунд вывалилось приглашение initramfs и появилась возможность посмотреть причину сбоя.

Поскольку VolGroup00/swap - логический том поверх RAID1В /proc/mdstat не было ни одного массива (на сервере их два: md0 и md1). Смотрю в /etc/mdadm/mdadm.conf - нужные массивы на месте. Пробую запустить их вручную:

initramfs> mdadm -A /dev/md0
initramfs> mdadm -A /dev/md1

После этого нужные массивы появились в /proc/mdstat. Последним штрихом была активация томов LVM2

initramfs> vgchange -ay

Далее выхожу из initramfs (Ctrl+D) и система продолжает нормальную загрузку. После добавления сбойного диска обратно в массив и окончания ребилда, пробую снова перезагрузить сервер и спотыкаюсь о ту же ошибку.

После перепроверки всех настроек, пересборки initramfs я решил сравнить вывод mdadm --detail --scan и соответствующих секций в /etc/mdadm/mdadm.conf. И вот тут нашлось различие:

# mdadm --detail --scan
ARRAY /dev/md0 metadata=1.2 name=finnix:0 UUID=d5824c5a:ecf39d9a:89c3b877:ec43e0c0
ARRAY /dev/md1 metadata=1.2 name=finnix:1 UUID=4c287c75:edef1139:07ca6e74:b0fcb0e6

# grep ^ARRAY /etc/mdadm/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=0 UUID=d5824c5a:ecf39d9a:89c3b877:ec43e0c0
ARRAY /dev/md1 metadata=1.2 name=1 UUID=4c287c75:edef1139:07ca6e74:b0fcb0e6

Различие в значении параметров name=. Заменяю описание актуальным и пересобираю initramfs.

# sed -i -e '/^ARRAY/d' /etc/mdadm/mdadm.conf
# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# update-initramfs -u

После всех манипуляция перезагрузка прошла без проблем.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

22 января 2013

Wine 1.5.22 для Debian Squeeze/Wheezy

Собрал пакеты для свежей версии Wine 1.5.22. Анонс новой версии тут. Пакеты собраны для Debian Squeeze (i386, amd64) и Debian Wheezy (пока только i386). Взять можно в моем репозитарии.

В планах попробовать собрать multiarch для Wheezy, мне уже подкинули пару полезных ссылок, но пока не хватает свободного времени для этого.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

18 января 2013

Настройка планировщика ввода/вывода для дисков с поддержкой NCQ

Появление NCQ в SATA II дисках дало возможность перенести упорядочивание очереди запросов к жесткому диску на плечи самого диска. Сегодня мне довелось тестировать работу базы данных на программном RAID-0 и я решил попробовать NCQ для этой задачи. Чтобы исключить влияние планировщика Linux (сейчас по-умолчанию им является CFQ) я включаю планировщик noop (на самом деле noop не занимается переупорядочиванием запросов и служит для того, чтобы выключить планирование ввода/вывода для конкретного блочного устройства) для всех дисков, которые поддерживают управление очередью запросов.

Руками это можно сделать записав noop в /sys/block/sda/queue/scheduler, но проблема в том, что в тестовый сервер собран на базе простого десктопного железа но с дополнительными SATA контроллерами на шине PCI-E x1. Системный диск и вовсе IDE.

Один из способов решить проблему - задать elevator=noop в параметрах ядра, но тогда придется руками найти системный жесткий диск и вернуть ему cfq в качестве планировщика. Но мне больше нравится идея оставить cfq по-умолчанию, а для жестких дисков с NCQ включить noop в из скрипта при загрузке системы.

$ cat /root/bin/noop4ncq.sh
#!/bin/bash

for _blkdev in `ls -1d /sys/block/*`
do
 # Check if block device has support for NOOP IO scheduler
 if [ -e "$_blkdev/queue/scheduler" ]; then
  if `grep -q noop "$_blkdev/queue/scheduler"`; then
   if [ ! -e "$_blkdev/device/queue_depth" ]; then
    continue
   fi
   if [ `cat "$_blkdev/device/queue_depth"` -gt 1 ]; then
    echo -n "Selecting NOOP I/O scheduler for $_blkdev: "
    echo noop >"$_blkdev/queue/scheduler" 2>/dev/null && echo OK || echo FAIL
   else
    continue
   fi
  else
   continue
  fi
 fi
done

Из скрипта видно, что noop включается не для всех блочных устройств, а только для тех, у которых queue depth > 1. Это связано с тем, что для правильной планирования очереди запросов на аппаратном уровне недостаточно иметь только SATA II жесткий диск. Еще нужна поддержка NCQ в SATA контроллере и операционной системе хоста.

Осталось прописать вызов /root/bin/noop4ncq.sh в /etc/rc.local и все.

UPDATE: Альтернативное решение с использованием UDEV описано тут.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

14 января 2013

Wine 1.5.21 для Debian Squeeze/Wheezy

С горем пополам залил свежий билд Wine 1.5.21 в свой репозитарий. Для squeeze есть сборка для i386/amd64. Для wheezy только i386 (из-за перехода на multiarch и отсутствия свободного времени мне пока не удалось осилить amd64). Анонс версии 1.5.21.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

08 января 2013

Debian preseed

Пост из разряда смотрю в книгу, а вижу фигу.

Пол-часа перечитываю документацию к debian unattended install, но не могу понять почему она не стартует. После N-го прочтения доки таки рассмотрел строку "When the graphical installer menu appears, press ESC", а я пытался жать Tab и редактировать параметры.

Чтобы не забыть
  • Нажать Esc (должно пропасть графическое меню и появиться приглашение boot:);
  • Вбить auto url=http://1.2.3.4/path/to/preseed.cfg;
  • Давить Enter и идти пить чай.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.