четверг, 13 октября 2011 г.

R.I.P. Dennis MacAlistair Ritchie

Сегодня только узнал, что навечно нас покинул еще один из великих людей.



По данным из Википедии  8 октября умер Денис Ритчи: один из разработчиков языка C и операционной системы UNIX.

Покойся с миром Денис, мы никогда не забудем твоих заслуг. Ты дал миру великие инструменты прорыва в ИТ-сфере... :.(

P.S. Статья на Википедии о нем.

воскресенье, 9 октября 2011 г.

Мысли о виртуализации десктопа

После очередной перестановки основной операционной системы передо мной снова стал вопрос  о быстром восстановлении пользовательского окружения (программы, настройки, данные), причем все это усложняется жизнью в двух параллельных мирах Windows и Linux.


Поэтому я принял решение держать путь на виртуализацию десктопа. Конечно сразу хотелось воспользоваться всеми благами человечества и использовать платформу KVM или XEN с поддержкой VT-d (проброс физического оборудования в виртуальную среду) и SPICE (протокол удаленного доступа с поддержкой передачи медиа-информации, например видео), но бюджет был ограничен и я выбрал следующую архитектуру:


В качестве виртуальной машины выбрана Oracle VirtualBox 4. Она бесплатна и решает все поставленные задачи. В качестве хост-системы работает компьютер с конфигурацией: 
Процессор: Core 2 Quad Q9300 (c VT-x)
Оперативная память: DDR3 5Gb
Операционная система: Ubuntu 11.04 Desktop или Windows 7 (в случае параллельного запуска специфичных медиа-задач параллельно с работой :)
Сама же деятельность спокойно проходит в виртуальной машине (ВМ №1) или реже в виртуальной машине (ВМ №2). Жесткие диски виртуальных машин храняться на отдельном жестком диске, что заставляет на упираться только в производительность интерфейса SATA-2.

В чем же плюс такой конфигурации? Он в том что при аварии/переустановке на хостовой системе вам нужно лишь поставить программу виртальных машин и вам снова доступно ваше настроенное окружение.

суббота, 24 сентября 2011 г.

Puutty + Linux

Да мой любознательный читатель, я наконец-то скомпилировал Putty под Ubuntu и теперь на еще одну зависимость от Windows стало меньше... :)


Вы возможно зададитесь вопросом, зачем нам Putty под линуксом ведь есть SSH? А за тем что есть закрытые ключи сгенерированные PuttyGen и подключитить их через SSH у меня их пока не получилось, из-за их специфического формата. Поэтому я решил собрать его под *nix.

Вообще компиляция под *nix штатная возможность, для этого достаточно скачать исходники с сайта производителя chiark.greenend.org.uk в tar.gz архиве. Мне был доступен релиз 0.61

Установим необходимое для компиляции ПО:
$ sudo apt-get install gcc build-essential libgtk2.0-dev halibut build-dep

После этого идем в папка загрузки и распаковываем архив:
$ tar xzvf putty-0.61.tar.gz

Переходим в папку:
$ cd putty-0.61/unix

Выполняем сборку:
$ make -f Makefile.gtk

Теперь компилируем и устанавливаем:
$ make -f Makefile.gtk install

Все готово! Вызываем набором команды "putty" в терминале. Если вы будете создавать пользовательскую кнопку запуска или прописывать в главное меню очевидно вам понадобиться оригинальная иконка, ее вы можете найти на сайте vlad.design.com.ua.

При компиляции под GTK очень помог источник:
http://jamesmcdonald.id.au/it-tips/open-source-apps/putty-gtk2 

воскресенье, 4 сентября 2011 г.

Ippon Back Power Pro 800 и Ubuntu Lininux

Я давно использую Linux в качестве основной системы на своем десктопе, а поскольку все *nix'ы очень не любят спонтанные отключения питания (в отличии от местных электриков), то с начала года в доме давно тихо мирно живет ИБП Ippon Back Power Pro 800.


Но прикрутить его к Linux так руки и не доходили. И вот на днях я все-таки решился. А чтобы не забыть в очередной раз алгоритм этой процедуры опишу тут.

Итак исходные данные:
ИБП Ippon Back Power Pro 800,
Ubuntu Linux 10.04 (да я сторонник LTS-версий).

Для начала пред подключением ИБП к компьютеру по средствам USB даем команду:

lsusb

потом подключаем ИБП и снова повторяем команду, чтобы выявить идентификаторы устройства. Например из строки "Bus 002 Device 005: ID 0665:5161 Cypress Semiconductor USB to Serial" можно узнать, что VendorID = 0665 ProductID = 5161 для моего ИБП.

1. Установка ===========================================

Далее установим NUT:

sudo apt-get install nut

2. Настройка правил UDEV ===============================

После этого создаем файл (в случае USB подключения ИБП) в /lib/udev/rules.d/52-nut-usbips.rules со следующим содержанием:

# Ippon Back Power Pro 800
ATTR{idVendor}=="Ваш_VendorID", ATTR{idProduct}=="Ваш_ProductID", MODE="664", GROUP="nut"

Если ваш ИБП использует для подключения RS232 (аля COM-порт), то создаем файл /lib/udev/rules.d/52_nut-serialups.rules содержащий:

# Ippon Back Power Pro 800
KERNEL=="ttyS0", GROUP="nut"

где ttyS0 - номер COM-порта к которому подключен ИБП (в данном случае COM1)

Далее для USB достаточно вынуть разъем из порта и снова воткнуть. А для COM-порта выполнить следующие команды или перезагрузить систему:

sudo udevadm control --reload_rules
sudo udevadm control trigger

3. Настройка NUT ======================================

NUT может управлять множеством ИБП в сети, но мы будем использовать простую конфигурацию для 1 компьютера. Для этого в файле /etc/nut/nut.conf выставим соответствующий режим:

MODE=standalone

В файле /etc/nut/ups.conf укажем параметры подключения к нашему ИБП:

[ippon-800]
driver = blazer_usb
port = auto
desc = "Ippon Back Power Pro 800"
default.battery.voltage.high = 13.60
default.battery.voltage.low = 10.60
offdelay = 6
ondelay = 7

где
[ippon-800] - имя нашего ИБП в системе NUT, оно может быть любым;
driver - имя драйвера для подключения к ИБП, смотрим его тут http://www.networkupstools.org/stable-hcl.html, для моего ИБП это blazer_usb и blazer_serial в зависимости от порта подключения;
port - имя файла порта, для USB можно просто "auto", для COM1-порта "/dev/ttyS0"
desc - комментарий;
default.battery.voltage.high - максимальное напряжение батареи при полном заряде, необходимо для расчета остаточного заряда батареи;

default.battery.voltage.low - минимальное напряжение батареи при полном разряде;
offdelay - команда ИБП перейти в режим ожидания через 6 минут

Далее в файле /etc/nut/upsd.conf мы пропишем контроль доступа:

ACL all 0.0.0.0/0
ACL localnet 192.168.1.0/24
ACL localhost 127.0.0.1/32
ACCEPT localhost localnet
REJECT all

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

Далее заводим пользователей, которые могут контролировать ИБП в файле /etc/upsd.users:

[имя_пользователя]
password = пароль_пользователя
allowfrom = localnet
upsmon master
actions = SET
instcmds = ALL

где
allowfrom - параметр определяющий источник подключения;
upsmon master - параметр дающий права на управление ИБП.

И последнее, осталось настроить службу мониторинга в файле /etc/nut/upsmon.conf пишем:

RUN_AS_USER nut
MONITOR имя_ибп@localhost 1 имя_пользователя пароль_пользователя master
MINSUPPLIES 1
POWERDOWNFLAG /etc/killpower
SHUTDOWNCMD "sbin/shutdown -Ph +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

где SHUTDOWNCMD "sbin/shutdown -Ph +0" - команда на завершение работы компьютера.

Все. Теперь включив систему NUT командой:

sudo service nut start

можно запросить статус ИБП командой:

upsc имя_ибп

в ответ вам система выдать примерно следующее:

battery.charge: 100
battery.voltage: 13.60
battery.voltage.high: 13.60
battery.voltage.low: 10.60
battery.voltage.nominal: 12.0
beeper.status: enabled
device.type: ups
driver.name: blazer_usb
driver.parameter.offdelay: 6
driver.parameter.ondelay: 7
driver.parameter.pollinterval: 2
driver.parameter.port: auto
input.current.nominal: 3.0
input.frequency: 49.9
input.frequency.nominal: 50
input.voltage: 246.0
input.voltage.fault: 246.0
input.voltage.nominal: 220
output.voltage: 209.5
ups.delay.shutdown: 6
ups.delay.start: 420
ups.load: 41
ups.productid: 5161
ups.status: OL TRIM
ups.temperature: 25.0
ups.type: offline / line interactive

Далее если хочется смотреть в графике можно установить knutclient:

sudo apt-get install knutclient

После установки knutclient надо сконфигурировать Setting->Configure KNutClient->UPS->Add. Здесь пишем Имя - понятное вам имя ИБП; UPS адрес - имя машины с ИБП (в данном случае localhost); UPS имя - название ИБП в системе NUT; Имя пользователя - пользователь в системе NUT; Пароль - его пароль. Далее выбираем необходимые вам переменные или их все (те что ИБП не поддерживает, просто не будут отображаться) и нажимаем ОК.


среда, 23 февраля 2011 г.

Linux совместимые девайсы

Вот недавно в районе НГ мне подарили Bluetooth мышь A4Tech BT-630 и USB Bluetooth адаптер D-link DBT-122.
На тот момент на компьютере стояла Ubuntu 10.04, под которой эта связка сразу же заработала, а для WindowsXP пришлось поставить драйвер с сайта D-link.
Где-то в районе первых чисел февраля, как это бывает каждый год, Ubuntu довела меня своими глюками, поэтому после формата винтов были установлены Windows7 и в противовес ей OpenSUSE 11.3.
Выбор на SUSE пал из-за родного KDE4, т.к. хотелось поиграться с Plasm'ой. Конечно на этапе установки мышь не работала (вот тут минус всех bluetooth-устройств), но после окончания установки (и настройки утилиты KBluetooth кажется) снова резво бегала по экрану.
А вот в Windows7 в отличие от XP адаптер нашла сама и мышка также просто подключается, однако драйвера с сайта Dlink лучше не ставить, возможны проблемы с подключением.

Сегодня 23 женушка подарила веб-камеру A4Tech PK-750MJ, дешевая китайская камера.


Но что интересно под обоими системами (Windows7 и OpenSUSE 11.3) заработала без проблем и настроек. Просто воткнул и работай... Красота!

суббота, 15 января 2011 г.

SSH под Windows или как мы настроили защищенный удаленный рабочий стол. (Часть 2)

В прошлой статье мы установили SSH-сервер и сгенерировали пару ключей. Теперь же я просто покажу как можно подключиться к этому всему и как пробросить  RDP-порты.

Итак Putty мы уже установили, поэтому запустим его и приступим к настройке подключения. На вкладке Session:



Внесем IP-адрес нашего SSH-сервера и порт на котором он ждет подключения. Здесь же можно после окончания всех настроек сохранить сессию, чтобы конфигурировать все каждый раз.
Далее перейдем на закладку Windows->Translation:



Здесь мы вручную укажем кодировку СР866, потому что именно в ней нам будет выдавать консоль ОС Windows.
Перейдем на вкладку Connection->Data:


На данной вкладке укажем укажем логин пользователя, для того чтобы не вводить его каждый раз вручную. И перейдем на вкладку Connection->SSH->Auth:



Нажмем на ней кнопку Browse и укажем путь к приватному ключу. Теперь вернемся на вкладку Session и сохраним настройки под любым именем.
А теперь коннект! Смело жмем Open и если все правильно, то выскакивает окно сообщающие цифровую подпись ssh-сервера, нажмем здесь Yes (это нужно для того, чтобы в следующий раз ваш пк знал, что подключился к правильному серверу). Далее мы видим приглашение ввести кодовую фразу:


После ввода корректной фразы у вас откроется штатная консоль управления с правами System (так что осторожней). После того как мы все сделали пишем команду EXIT, для корретного закрытия сессии.
Ну вот коннектиться к шеллу удаленной машины мы можем, теперь самое вкусное - проброс портов!

Для этого все настройки оставляем как в первом случае только добавляется еще одна на вкладке Connection->SSH->Tunnels:



Тут в "Source port" мы пропишем любой свободный локальный порт нашего пк, например: 9999, а в Destination пропишем IP-адрес сервера внутри локальной сети (на который мы хотим пробросить RDP). Выставим флаги Local и IPv4. И сохранив конфигурацию нажмем Open и введем парольную фразу.

И что? - спросите вы- Перед нами опять системная консоль!
Да консоль та! - скажу я - Да сессия не та! :)

Консоль не закрываем! Открываем RDP-клиент (например тот что зовется "Удаленный рабочий стол") и коннектимся по адресу - localhost:9999



Жмем Подключить и...



видим стандартное окно логина, как будто мы с сервером в одной локальной сети :)
Все, устойчивых вам коннектов!

пятница, 14 января 2011 г.

SSH под Windows или как мы настроили защищенный удаленный рабочий стол. (Часть 1)

Как известно в ОС Windows никогда не было штатного SSH-сервера и очень зря, т.к. это очень полезная и интересная штучка. 
Secure SHell  — сетевой протокол сеансового уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов). Сходен по функциональности с протоколами Telnet и rlogin, но, в отличие от них, шифрует весь трафик, включая и передаваемые пароли. SSH допускает выбор различных алгоритмов шифрования.
Как раз на днях назрела проблема с удаленным доступом к внутренним серверам корпоративной сети и я решился убить время на установку SSH-сервера. Я перепробовал несколько вариантов бесплатных серверов (CopSSH, OpenSSH fo Windows, SSHD из Cygwin, KpyM SSH-ServerFreeSSHd). В силу подбора продукта под Windows, я искал простой в установке и функциональный сервер. По ряду причин таким оказался FreeSSHd.
В установке этого продукта нет ничего сложного, скачиваем дистрибутив с официального сайта и запускаем инсталляцию.
На запрос "Private keys should be created. Should I do it now?" (запрос на создание серверных RSA/DSA ключей) отвечаем да.
На запрос "Do you want run FreeSSHd as a system service?" (запрос на регистрацию FreeSSHd как системной службы) отвечаем по желанию. Если вам надо чтобы сервер запускался при старте компьютера без необходимости локального входа, то ставим да.
Далее идем Пуск->Программы->FreeSSHd->FreeSSHd либо вызываем его из системного трея. Появиться окно конфигурации, где мы перейдем на закладку SSH.


Здесь мы можем выбрать (описаны последовательно):
- на каком интерфейсе будет "висеть" сервер
- какой порт он будет "слушать"
- максимальное число подключений
- таймаут простоя сессии
- путь к файлу сообщения при  логине пользователя в систему
- путь до шелла пользователей (программа запускаемая при логине пользователя и обрабатывающая его команды)
- Флаг запуска SSH сервера при запуске службы freeSSHd
- Флаг "использование новой консоли", должен быть включен. Т.к. есть сообщения о подвисании сессии с опущенным флагом.
- Путь к RSA-ключу сервера
- Путь к DSA-ключу сервера.

Рекомендуется на данной вкладке настроить нестандартный порт,  дабы отсечь часть скриптов "little-хакеров".

Далее переходим на закладку Authentication:



Здесь мы можем изменить расположение папки публичных ключей (Public key folder), по умолчанию она указывает на папку программы, что мне не понравилось и я сменил его на подпапку с именем pub-keys.
Ну а самое главное тут можно глобально настроить методы аутентификации. Их два: парольная и публичным ключом. Каждый метод может находиться в состоянии: отключен (Disabled), разрешен (Allowed), запрашивается/обязательный (Required). На скриншоте выше показана конфигурация для аутентификации по ключу.

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



Ну и наконец нам осталось завести пользователя на сервере. Делается это на закладке Users:


Нажав на этой вкладке кнопку Add мы добавим пользователя. В появившемся окне пропишем логин, правила аутентификации, и права.
Тип аутентификации может быть:
- NT, применяем в случае использования Windows-пользователя. 
- парольная на хеше SHA-1, может быть использована в случае не желания использовать Windows-пользователей для входа.
- на публичных ключах, аналогична предыдущей. Только для входа используем ключ.

Права пользователя определяют флаги "User can use", это:
- использование шелла
- использование безопасного FTP
- использование туннелей

Ставим нужное (а для удаленного рабочего стола нам нужны права на туннели и возможно шелл, аутентификацию вберем по ключам) и нажимаем ОK->Применить->OK. После чего надо перезагрузить компьютер иначе аутентификация по ключам не будет работать (а будет выпадать ошибка "No supported authentication methods available").

Далее нам нужен SSH-клиент Pytty. Качаем пакет установщика, либо PuTTY + PuTTYgen.
Запускаем PuTTYgen:


В Parameters выставляем SSH-2 RSA и длину в 1024 бита, нажимаем Generate.


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


В этом окне в поле "Key comment" вводим имя пользователя, для которого создавали ключ (то имя которое регистрировали в FreeSSHd), это надо чтобы потом мучительно не вспоминать чей это ключ.
Далее выделаем весь текст в поле "Public key for pasting into OpenSSH..." и вставляем его в обычный текстовый файл одной строкой. Имя файла задаем обязательно совпадающее с именем пользователя FreeSSHd, а расширение (в данном случае TXT) убираем совсем. Все публичный ключ готов, но окно PuTTYgen рано закрывать.
Мы еще должны сохранить частный/приватный ключ. Для этого сначала введем кодовую фразу (любую, лишь бы запомнить) в поле "Key passphrase" и повторим ее в поле "Confirm passphrase"(это надо чтобы защитить ваш ключ, если он будет украден, то без этой фразы его применить будет нельзя). И нажмем "Save private key" сохранив под именем пользователя с расширением ppk.

Далее необходимо закачать публичный ключ на SSH-сервер, как мы помним что настраивали его на подпапку pub-key  в папке с программой. 

Все готово для коннекта. Подробности о коннекте и туннелировании RDP во второй части.