вторник, апреля 01, 2008

Psi, Jabber.ru и сертификат

Intro


В Psi есть такая вещь, как подключение к серверу по протоколу SSL.

-А что такое SSL и на кой оно надо?

SSL (Secure Socket Layer) служит для того, чтобы передавать данные по открытым каналам (таким как интернет), но так, чтобы никто не смог их прочесть даже в случае перехвата трафика каким-набудь третьим лицом. Технически представляет собой прослойку (layer) между протоколом высокого уровня и протоколом TCP, для шифрования использует асимметричные алгоритмы.

Обычно применяется между сервером и клиентом, например, протокол https представляет именно SSL-трафик, в который завёрнут обычный http-протокол. Наш любимый жабер тоже поддерживает работу по етому протоколу. Привет любопытным админам ;) .

Как использовать


Влючается в настройках аккаунта, вкладка Connection, комбобокс Encrypt connection (рис.1). Выбрать надо или Always, или When available. Что есть что - думаю, сами поймёте.



Но тут есть одна фича - на стандартной виньХП Псайка плачет при подключении к jabber.ru, говорит,что сертификат какой-то левый (рис.2).

Мы не ленимся, тыкаем батончик Details и видим что да, Certificate is not valid, потому что Self-signed (рис.3).

Тут я мог бы рассказать о сертификатах, как они распространяются, что такое корневые сертификаты, как они попадают в комп... Но это - в другой раз, и то при условии что кому-то ето любопытно. Полюбовавшись на мессагу, тычем Close и на предыдущем вопросе Continue. Дальше всё работает нормально.

Можно терпеть ето окошко, тыкая каждый раз Continue, но настоящий ленивый компьютерщик так делать не станет. Тем более что тыкать придётся на каждом реконнекте. А станет он искать пути избавления от етого надоедливого окошка.

Лечение


Есть два варианта убрать ету надоедливую мессагу:

1. Подавить предупреждение;

2. Заставить Psi доверять сертификату.

1. Давим предупреждение

Порядок действий следующий:

Лезем в настройки аккаунта, вкладка Connection, ставим галочку Ignore SSL warnings (рис.4). Метод действенный, но не совсем кошерный (на мой взгляд).



2. Заставляем Psi доверять сертификату.

Снова обратим внимание на рис.3. Приглядевшись, видим строку: Organizational unit: http://www.cacert.org. Не ленимся, идём на етот сайт, и сразу на главной странице видим линк Root Certificate. Переходим на него, и качаем Root Certificate либо в PEM-формате, либо в DER-формате.

Далее нам надо установить ети сертификаты в ось. Идём к нашему скачанному сертификату, тычем его два раза, выходит окошко с информацией про сертификат (рис.5).

Тычем батон "Установить сертификат", далее нас приветствует мастер импорта сертификатов, Далее, Далее, Готово.

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

После етой операции, наша ось начинает доверять сертификатам, выданным Сacert, а Псайка как раз проверяет через ось, стало быть, она тоже доверяет сертификату от Jabber.ru, который как-раз-таки получен от Cacert :).

Мораль


Что тут скажешь... Надо быть достаточно ленивым, что бы запариться каждый раз выполнять одни и те же действия, и при етом достаточно любопытным, что бы найти решение, которое избавит вас от етой рутины. Заодно по пути знаний наберётесь и получите через некоторе время левелап :).

+P.S. Да, весь етот SSL даёт шифрование от клиента до сервера, то есть кроме сервера никто не сможет прочесть сообщения. Но настоящим параноикам и етого мало - им надо, чтобы и сервер не мог читать нашу переписку :) . И это тоже можно сделать, используя Псайку и GnuPG-шифрование. Об етом я буду писать позже.

Дальше...

Экономия трафика

Тема, конечно не актуальная нынче, с приходом во многие места безлимитного интеренета, но есть ещё места, где это актуально. Например, у меня дома инет - только по жопарезу, на работе - тоже желательно экономить, что бы не получить по шапке :).
Так вот, есть очень простое решение - поставить программу toonel (http://www.toonel.net/generic/005050/toonel.jar). Странное расширение для запускаемого файла, правда :) ?. Дело в том, что программа написана на Java, так что запускать надо хитрым методом :). Зато плюс в том, что безразлично, какая платформа, хоть линукс, хоть виндовс, главное, чтобы была установлена java-машина.

Далее я буду описывать, как запустить toonel под виндой, так как вариант для линукса у меня не отточен, да и линуксоиды обычно подкованные, и должны справиться сами :). У меня не получилось поставить джаву нормально, и в итоге я сделал просто вызов java с указанием пути. Возможно позже расскажу, как ставить нормально, если не лень будет, или придётся джаву ставить нормально :).

Скачать джава-машину можно с интернета, некоторые программы тащат её с собой, так что может и не понадобиться качать отдельно. Проверить просто - Пуск, Выполнить, cmd, в появившемся чёрном окошке набрать "java -version" (без кавычек, разумеется) и посмотреть, то скажут. Если что-то вроде:

C:\>java -version
java version "1.5.0_08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03)
Java HotSpot(TM) Client VM (build 1.5.0_08-b03, mixed mode, sharing)

то, всё в порядке, джава-машина установлена. Если скажут

"java" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

то идём и качаем джава-машину. (http://www.java.com/en/download/manual.jsp)
Качаем, ставим, снова проверяем командой java -version.

Теперь идёт в папку, куда мы положили toonel.jar: Пуск - Выполнить, cmd, Enter, далее
cd c:\path\to\toonel. Запускается он командой java -jar toonel.jar. появляется окошко с четырьмя вкладками.


Настроек там минимум, родительский прокси и качество картинок. У меня качество jpeg стоит 30%, качество gif - medium. Родительский прокси - соответсвенно ваш прокси, если его нет - оставляем пустым. Настройки маппинга можно не трогать, а можно настроить на ваши почтовики, чтобы и почтовый трафик тоже сжимался. Далее, идём в ваш любимый браузер, ищем там настройки прокси, и настраиваем прокси на localhost и порт 8080. После этого можно серфить со спокойной душой :). Если решили пустить через toonel и почту, то делайте так: создавайте маппинг, в хостнейм пишете адрез вашего pop-сервера, локалпорт - любой свободный в вашей системе, ремотепорт - порт вашего pop-сервера. Галочку Use ssl - по желанию, рекомендуют ставить, если почтовик не поддерживает шифрование пароля. Пример для майла:



После этого в почтовике указываем вместо адреса вашего поп-сервера localhost, и указываем порт, который указали в маппинге как локалпорт (из примера это 1110).

Настройки для smtp аналогичны.

О степени сжатия
У меня в Опере отключен показ картинок (точнее, стоит "Отображать кэшированные"), так что трафик через toonel идёт практически только текстовый. Сжатие при этом достигает 65%-75%. Статистику с работы можете видеть на картинке выше. Тут сжатие несколько меньше, так как периодически картинки погружаю, и качаю что-нибудь в архивах, которые, как известно, уже дальше не жмутся.
Статистику можно глянуть или через браузер (http://localhost:7999), для етого мне пришлось Опере объяснить, что на localhost ходить через прокси не надо, или на окошке самой программы.

Итог
Вот так, нехитрым путём, за короткое время (если не считать скачку или нахождение java-машины где-нибудь) мы добились экономии траффика в два-три раза. Есть ещё побочный эффект - несколько ускоряется открытие страничек, что не может не радовать :)

Дальше...

Смена пароля рута

На этой неделе случилось вот что: сбойнула ФС на пром.компе, который работает под соляркой (Solaris 5.10). Ось перестала грузиться, ссылаясь на ошибку, вываливалась в сингл-мод и просила рутовский пасс. Пасса никто не знал. Комп ставили подрядчики, пасс рута не сказали, просто завели пользователя для нас. Возможно, даже прописали его в sudoers, но в текущей ситуации это не помогало. Начали действовать в обход.
В первую очередь сняли жёсткий диск. Чтобы нам жизнь малиной не казалась, он оказался формата 2.5 дюйма. Ничего критического, но переходника usb - mini-ide найти не удалось. Пришлось вставлять этот винт в ноутбук, что радости нам не прибавило. Кто разбирал ноутбуки, поймёт :).
Дальше грузимся с Кноппикса 4го, он винт видит, но как-то совсем генериком. Подумавши, нарезали 5ый Кноппикс, благо образ под ругой был и болванка нашлась. Он уже определил винт нормально. Далее - cfdisk нам рассказывает, что там раздел, а перед ним немного свободного места. Раздел формата - bf, UFS от Соляриса. fdisk говорит тоже самое. Пробуем монтировать:

mount /dev/hda1 /mnt/hda1

и обламываемся. Указание -t ufs не помогает. Слава богу, товарищ Aixrein подсказал:
Все слайсы доступны под следующими свободными именами девайсов. Покажу на примере.
/dev/hda1 ... WIN95
/dev/hda2 ... BSD44
/dev/hda3 ... BSD44
/dev/hda4 ... EXT2FS
Пусть в hda2 несколько слайсов и указанной командой они не монтируются. Линух присваивает им имена начиная от hda5. Т.е.:
mount -t ufs -o ufstype=44bsd /dev/hda5 /mnt/disk

Так и оказалось: покопавшись в /dev/hda* нашли разделы hda5,hda6,hda7. Монтируем снова:
mount /dev/hda1 /mnt/hda1 -t ufs -o sunx86

Опция -o sunx86 нашлась в процессе самостоятельного гуглежа - оказывается, UFS бывает разных типов.
Теперь всё смонтировалось. Видим файлы, всё хорошо. Сейчас нас интересуют файлы /etc/passwd и /etc/shadow. Смотрим в passwd, видим, что надо смотреть в shadow - на месте пароля в passwd стоит "x". Идём в shadow, видим пользователей, в том числе рута и нашего. Дальше - дело техники: меняем хеш пароля рута на хеш пароля нашего пользователя и - вуаля! Пароль рута поменялся на пароль нашего пользователя, а его мы уже знаем. Разумеется, предварительно оба файла скопировали на флешку, ибо бэкапы рулили, рулят и будут рулить.
Скоро сказка сказывается... При попытке записи файла нас обламывают: filesystem is read-only. Тваю мать! Отмонтируем раздел, монтируем с опцией rw, проверяем командой mount - пишут, что раздел rw-таки. Повторяем фокус с заменой хеша - результат тот же. Расстраиваемся и идём пить пиво чай (на работе всё-таки).
После чаепития решили слазить в dmesg:
dmesg | tail.

Кстати, очень полезная вещь, много раз выручала.
Так вот, в выводе dmesg'а написано, что ФС с ошибками и надо бы fsck прогнать. По всей видимости из-за этого и не давали нам писать в эту ФС. Ладно, фигня делов, достаём fsck:
umount /dev/hda5
fsck /dev/hda5 -t ufs

И опять засада - нету у нас fsck.ufs. Что в переводе на русский значит - нечем прочекать. Вот теперь расстраиваемся ещё больше и идём пить пиво, так как день кончился.
К началу следующего дня родился ещё один вариант решения: если мы не можем изменить файл в файловой системе, то кто нам сможет помешать просто изменить несколько байт в секторе жёсткого диска? Некоторое время потратили на поиск соответствующих утилит - хекс-редакторов. Остановились на lde - он специализируется на работе с жёстким диском и есть в Кноппиксе.
Достали ноутбук с нашей соляркой, но, прежде чем продолжить эксперименты, решили проверить сам винж на предмет сбойных секторов, ибо солярка при загрузке упоминал что не может прочесть сектор такой-то с винта. Проверяем:
dd if=/dev/hda of=/dev/zero bs=16K

Копирует... Винт лампочками моргает не переставая... А вот сколько он уже скопировал, и сколько нам ещё ждать по времени - неизвестно. К счастью, в man dd написано, что если послать процессу dd сигнал USR1, то dd выдаст нам статистику, не прерывая работы. Ищем pid dd, создаём ещё одну консоль и там пишем:
ps aux | grep dd

Запоминаем pid (ну, к примеру, 5508), пишем:
kill -USR1 5508

В консоли dd признаётся, сколько он считал записей, сколько записал, сколько это в гигабайтах, сколько времени прошло и какова средняя скорость. Отсюда, путём простых подсчётов, находим оставшееся время. Вышло что-то около 15 минут, при прошедших пяти. Можно было просто подождать, попивая чай, но программисткая мысль пошла дальше, и родила следующюю конструкцию: пишем в консоли с kill'ом
while true ; do { date ; kill - USR1 5508 ; sleep 10 ; } ; done

Результат - каждые 10 секунд dd выводит статистику. Намного приятней распивать чаи, созерцая статистику, чем просто пялится на пустой экран...
В общем итоге, образ 40кагигового винта ушёл в /dev/zero примерно за 20 минут, показав среднюю скорость около 30-35 мбайт/сек, без единой ошибки. Уже легче - винт сам живой, значит, сбой был только на уровне ФС. А это лечить проще, чем искать новый винт и вживлять туда солярку.
Продолжаем лечение:
lde /dev/hda

Там выбираем блочный режим (b), делаем поиск строки (/). Мы искали сначала хеш рута, но с первой попытки попали в какой-то другой файл, поэтому повторили поиск по хешу пароля нашего пользователя. Нашли, разрешили запись на винт (f,w), перешли в режим редактирования (e), переправили хеш рута на хеш нашего пользователя.
Чтобы не перегружаться, решили проверить результат через qemu:
qemu -hda /dev/hda

В Кноппикс не включён ускоряющий модуль kqemu, поэтому процесс идёт неторопливо. Но в итоге проверку пароля мы прошли :). Ура, массы ликуют, дамы бросают в воздух чепчики, суровые админы утирают украдкой скупую слезу - всеобщее счастье :).
Проверку ФС под эмулятором решили не делать: во-первых, железо эмулятора отличается от железа, на котором жила солярка, что может вызвать дополнительные проблемы; во-вторых - будет слишком долго.
Поставили винчестер на его родное место, запустились оттуда, вышли в сингл-мод, ввели пароль,прогнали fsck. Проверка прошла, что-то там исправила. Потом мы перезагрузились и у нас всё забегало.
+P.S. Опус писался постфактум, поэтому вышел немного сумбурным и нет выводов команд.
Все низкоуровневые операции с винчестером надо производить при отмонтированных разделах.
Дальше...