вторник, 29 март 2011 г.

Inspiration points

От дълго време се каня да пусна пост за моите "точки на вдъхновение".
Това са сайтовете в които търся вдъхновение, идеи, решения или просто разтуха. Тъй като това е първата от надявам се поредица такива теми ще започна с една доста стара точка и една наскоро намерена.

http://www.commandlinefu.com/
кръстникът на нашия блог - commandlinefu - съдържа засукани bash-овизми които в много случаи решават елегантно проблеми които биха изисквали стотици редове код на някои езици за програмиране.

И наскоро попадналият в полезранието ми:
http://chzv.net/
Често Задавани Въпроси е един роден блог който противно на името си отговаря на въпроси за сигурността, *nix администрацията, IT иновациите и куп други за които дори не сте се сетили да попитате :)

Пожелавам успех и дълголетие и на двата сайта и техните автори.

expect - control interactive applications

Наскоро ми се наложи да създам по 10 потребителя на зала с 15 компютъра.
На машините имам root и пуснат ssh но идентификацията е само с парола. Тоест нямам възможност за влизане със сертификат, което отрязва възможността за употреба на едно от многото решения за multi ssh или prallel ssh. След известно търсене намерих expect. Преди го бях срещал в чужди скриптове и никога не се бях заинтересувал какво точно прави, но този път след като го разгледах по-задълбочено установих, че това е страхотен инструмент за контрол на интерактивни приложения (тези които под интерактивни разбират шарени с GUI - моля напуснете веднага).
Скриптовете "очакват" (от там и името expect) някакво действие от страна на извикано приложение и реагират по определен начин.
Ето един линк в който нещата са обяснени доста изичстено и с примери:
http://floppsie.comp.glam.ac.uk/Glamorgan/gaius/scripting/5.html

За по-усложнени приложения има официален сайт с повече документация както и множество сайтове с готови скриптове.

събота, 26 март 2011 г.

вторник, 22 март 2011 г.

ICC + Gentoo

Приемаме, че имаме инсталиран Composer XE на Intel, от който е част ICC.

От тук нататък има поне 2 варианта :)

1. Да се използва gcc по подразбиране и само пакетите изброени в /etc/portage/package.icc да се компилират с icc

2. Да се използва icc по подразбиране и само пакетите изброени в /etc/portage/package.gcc да се компилират с gcc

Aз реших въпреки всички заплахи да опитам втория вариант, че даже и да добавя леко рисковани оптимизации и на gcc.

В общи линии се придържах към това ръководство:

http://www.gentoo-wiki.info/HOWTO_ICC_and_Portage


UPDATE: /etc/portage/bashrc при мен изглежда по следния начин:

http://chvor.net/bashrc


Първия ред не е споменат в ръководството, но той е нужен за да може portage си намери пътя на до icc както и да си вземе и останалите променливи на средата необходими за работата с целия Composer XE.

Чрез този метод компилирах нормална "general purpose" система с gnome, kde, openbox, видео/аудио плеари, web browsers, flash и др. Също така смея да твърдя, че след едно- седмично използване на системата се забелязва леко подобрение във времето за реакция. Приложенията се държат неочаквано стабилно с изключение на compiz-fusion, който гръмна 1-2 пъти, но той си гърмеше и преди icc.

UPDATE: /etc/make.conf

http://chvor.net/make.conf


Това са пакетите, които са компилирани с gcc: /etc/portage/package.gcc:

http://chvor.net/package.gcc


Toва са всички инсталирани пакети:

http://chvor.net/world


вторник, 15 март 2011 г.

YouTube или защо по навик търсим hack а не решение дадено от автора на сайта

След поста за youtube video в mplayer и осъзнавайки че google и в частност youtube са били така добри да предоставят решение което не включва "хак" на уеб сайта им се почувствах задължен да споделя това с "милионите" читатели на блога ни.

Решението е именно google data api-то което с пълна сила работи с youtube предоставяйки тонове готови библиотеки за различни езици и доста удобна документация с примери на всички тези езици:
http://code.google.com/apis/youtube/2.0/developers_guide_protocol_audience.html

Ето и линк с информация за останалите API-та на google:
http://code.google.com/apis/youtube/getting_started.html

Авторът, верен на идеята, че може да пише на всеки създаван някога програмен език (дори и тези които никога не е виждал) разбира се се насочи към най-малко познатият си Python:
http://code.google.com/apis/youtube/1.0/developers_guide_python.html 

Ето едно парче код като proof of concept с което ще приключим този пост:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Peach
import gdata.youtube
import gdata.youtube.service
import sys
def PrintEntryDetails(entry):
print '%s [%i:%i]' % (entry.media.title.text, (int(entry.media.duration.seconds)//60), (int(entry.media.duration.seconds)-(int(entry.media.duration.seconds)//60)*60) )
#print 'Video published on: %s ' % entry.published.text
#print 'Video description: %s' % entry.media.description.text
#print 'Video category: %s' % entry.media.category[0].text
#print 'Video tags: %s' % entry.media.keywords.text
#print 'Video watch page: %s' % entry.media.player.url
#print 'Video flash player URL: %s' % entry.GetSwfUrl()
#print 'Video duration: %s' % entry.media.duration.seconds

def PrintVideoFeed(feed):
i=1
for entry in feed.entry:
sys.stdout.write('[')
sys.stdout.write(str(i))
sys.stdout.write('] ')
i=i+1
PrintEntryDetails(entry)

def SearchAndPrint(search_terms):
yt_service = gdata.youtube.service.YouTubeService()
query = gdata.youtube.service.YouTubeVideoQuery()
query.vq = search_terms
query.max_results = 50
query.orderby = 'relevance'
query.racy = 'include'
feed = yt_service.YouTubeQuery(query)
PrintVideoFeed(feed)

SearchAndPrint('Rihanna unfaithful')

Софтуер за инвентаризация; WMI (част 2)

Втора част на темата за инвентаризационния софтуер.

В края на първа част си изяснихме какви са заявките които GNI изпълнява на таргет машината, сега дойде врееме да се въвлече малко код и тъй като по определение системните администратори са мързеливи и не обичат да правят нещата отначало то ще използваме страхотен инструмент който Microsoft са създали през далечната 2005 година.

WMI Code Creator v 1.0
http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en

Това е едно страхотно приложение което генерира код (имаме избор между C#, VB.NET,VBS) изпълняващ WMI заявки върху локалната машина, отдалечен компютър или група от компютри.

За нашите нужди разбира се ще се наложи да използваме група компютри и тъй като автора е бегло запознат единствено със C# то това ще е езика на генериране.

Добре ще е да можем да си набавяме групата компютри по по-интелигентен начин от записване на ръка. Идеален начин е да използваме LDAP през Windows Domain и тъй като ние разбира се разполагаме с такъв то ето малко C# код който прави точно това.

http://stackoverflow.com/questions/3044489/c-net-retrieve-list-of-computers-in-a-folder-in-a-domain

Е от тук предполагам, че всеки може сам да си напише(събере) код който прави нещата по начин който му харесва.

Това че автора не поства кода на собственото си приложение е само за да не бъде изпиратствано то от зловредни агенти а не защото е толкова мързелив че все още не го е написал :)

Софтуер за инвентаризация; WMI (част 1)

 Поста е провокиран от нуждата от софтуер който да създава автоматизирана инвентаризация на Windows работни станции. Такива софтуери съществуват много и все пак никой който аз съм срещал не дава всичко от което имаме нужда наведнъж без излишни такси или инсталация на агенти. За да стане по-ясно ще обобщя какви са задължителните изисквания към софтуера:

1. Да събира информация от работните станции за:
  • Процесор
  • Дънна платка 
  • Инсталирана RAM
  • Hard disk
  • Мрежов адаптер
  • ... (всякаква друга периферия)
     
2. Да не изисква инсталация на работните станции.
3. Да притежава елементарен интуитивен web интерфейс
4. Да може да организира отделните станции в групи (по зали)
5. Да може да сигнализира за промяна в хардуерната конфигурация на ниво машина или зала

След едно доста широко търсене за такъв софтуер (свободен; желателно с отворен код) се откриха множество проекти които изпълняват част от условият като към тях прибавят огромна шарения + възможности за къпане на бебета, но нито един който да прави всички горе изброени точки без да добавя излишни неща.

Все пак търсенето на софтуер не беше напълно безпочвено тъй като изясни ако не кой ще е кандидата то поне какви биха били техническите характеристики на решението. А именно (по точки):

1. WMI
2. WMI
3. код който чете от WMI и пише в база данни от която друг код пълни web интерфейса
4. в т.3 обърнете внимание на база данни
5. О! база данни + email2sms

(предполагам, че ако някой чете този блог ще бъде силно озадачен какво изобщо става тук, но трябва да е ясно, че целта на блога е да обяснява на технически грамотни люде какво е направил един(или няколко) системни администратори. т.е. не очаквайте прекалено дълги захаросани обяснения)

да се върнем на техническото описание на решението за да обобщим характеристиките на нашият hero app :)

Това би било софтуер който извлича информация за работна станция през WMI и я записва в база данни. И друг такъв който въз основа на информацията в базата създава web приложение за справочни цели. Нека добавим и тригери в базата които извикват елементарен външен скрипт който ни известява за проемни в хардуерната конфигурация. 

Това звучи сложно, но хей ...  нека се опитам да го представя през админски поглед :)   (отново в типичният вече за този блог натрупан с линкове доста хаотичен стил)



1. харесваме си софтуер който прави необходимите WMI справки. Аз съм се спрял на Global Network Inventory на фирмата MagnetoSoft. Браво момчета чудестна работа но при 300 работни станции и цена от 950 долара за година... предпочитам да ви почерпя бира и да си говорим за мацки :)
2. инсталираме GNI (Global Network Inventory) trial версия на някоя машина.
3. на друга машина Vista+ стартираме wevtutil така че да следи за WMI активност.
http://www.windowsitpro.com/article/windows-client/An-Easier-Way-to-View-Incoming-WMI-Queries.aspx
4. Изпълняваме GNI сканиране на машината от точка 3 така че цялата информация която GNI може да извлича за дадена станция да е налична.
5. Отново според туториъла в точка 3 изличаме логовете за  WMI активност
и ги записваме във текстов файл (в моя случай 1.log)
6. Магически ги пресяваме. Например с egrep под линукс:
peach@l1fe:~/Desktop$ cat 1.log | egrep -o "<Operation>.*.</Operation>" | grep ExecQuery | egrep -o "select.*.<"
select *from Win32_Service<select *from Win32_DiskDrive<
select *from Win32_LogicalDisk<
select *from Win32_Printer<
select *from Win32_Processor<
select *from Win32_PhysicalMedia<
select *from Win32_VideoController<
select *from Win32_Environment<
select __RELPATH, Name from Win32_Desktop<
select *from Win32_OperatingSystem<
select __RELPATH, __RELPATH from Win32_Process<
select *from Win32_PhysicalMemory<
select *from Win32_PageFile<
select *from Win32_PortConnector<
select *from Win32_BIOS<
select *from Win32_ComputerSystem<
select *from Win32_ComputerSystemProduct<
select *from Win32_SystemEnclosure<
select *from Win32_NetworkAdapter<
select *from Win32_BaseBoard<
select *from Win32_OperatingSystem<
select __RELPATH, __RELPATH from Win32_Process<
select *from Win32_NetworkAdapterConfiguration<
select *from Win32_Desktop<
select *from Win32_SystemSlot<

Ето и WMI заявките които GNI изпълнява. Благодаря ти GNI :)
Край на първа част.
Очаквайте във втора част писането на кода отново изпълнено с множество изненади :)

петък, 11 март 2011 г.

YouTube в Mplayer (или друг плейър)

Големи благодарности на целия екип на FreeBSD, че не си бяха свършили работата да предоставят работеща алтернатива на flashplayer която да може да пуска видеа от youtube.

По този начин те предоставиха предизвикателството да се намери заобиколен начин за пускане на youtubе-ските видеа с външен плейър.

Решението което ще покажа е работещо към датата на публикуване и устройва автора като начин/удобство на употреба.

Решението се състои от 3 основни стъпки:
  1. firefox
  2. greasemonkey script
  3. bash script 
По точка първа ще ви трябва работещ firefox 3.5+ (тествано с 3.6) с инсталиран greasemonkey.  Конфигурираме нов протокол във firefox който да работи с външно приложение. Справки тук:
http://kb.mozillazine.org/Register_protocol#Linux

Точка втора е създаването на greasemonkey script който да изрязва video id-то от отворената youtube страница и да го изпраща към bash скрипта. Ето скрипта който аз използвам:

// ==UserScript==
// @name Youtube Video Play to Mplayer
// @namespace http://admin-fu.blogspot.com/
// @description Play You Tube video to Mplayer
// @include http://*.youtube.com/*
// @include http://youtube.com/*
// ==/UserScript==
function youtubeIDextract(url)
{
var youtube_id;
youtube_id = url.replace(/^[^v]+v.(.{11}).*/,"$1");
return youtube_id;
}
var id = youtubeIDextract(window.location.href);
GM_openInTab("ytm://"+id);


И последната точка 3 е bash скрипта който се явява протокол хендлър за новият портокол на firefox (обяснено в точка 1). Ето скрипта:

#!/bin/bash
i=`echo "$1" | cut -d"/" -f3`
mplayer $(wget http://www.youtube.com/watch?v=$i -qO- | sed -n "/fmt_url_map/{s/[\'\"\|]/\n/g;p}" | sed -n '/^fmt_url_map/,/videoplayback/p' | sed -e :a -e '$q;N;5,$D;ba' | tr -d '\n' | sed -e 's/\(.*\),\(.\)\{1,3\}/\1/')


Предполагам ще се налага промяна в bash скрипта всеки път като youtube параноясат и решат да защитават нечии авторски права.

Testdisk

http://www.cgsecurity.org/wiki/TestDisk

TestDisk is powerful free data recovery software! It was primarily designed to help recover lost partitions and/or make non-booting disks bootable again when these symptoms are caused by faulty software, certain types of viruses or human error (such as accidentally deleting a Partition Table). Partition table recovery using TestDisk is really easy.

TestDisk can

  • Fix partition table, recover deleted partition
  • Recover FAT32 boot sector from its backup
  • Rebuild FAT12/FAT16/FAT32 boot sector
  • Fix FAT tables
  • Rebuild NTFS boot sector
  • Recover NTFS boot sector from its backup
  • Fix MFT using MFT mirror
  • Locate ext2/ext3/ext4 Backup SuperBlock
  • Undelete files from FAT, NTFS and ext2 filesystem
  • Copy files from deleted FAT, NTFS and ext2/ext3/ext4 partitions.

TestDisk has features for both novices and experts. For those who know little or nothing about data recovery techniques, TestDisk can be used to collect detailed information about a non-booting drive which can then be sent to a tech for further analysis. Those more familiar with such procedures should find TestDisk a handy tool in performing onsite recovery.

dcfldd - Enhanced dd

http://dcfldd.sourceforge.net/


Introduction

  • dcfldd is an enhanced version of GNU dd with features useful for forensics and security. Based on the dd program found in the GNU Coreutils package, dcfldd has the following additional features:
     
  • Hashing on-the-fly - dcfldd can hash the input data as it is being transferred, helping to ensure data integrity.
     
  • Status output - dcfldd can update the user of its progress in terms of the amount of data transferred and how much longer operation will take.
     
  • Flexible disk wipes - dcfldd can be used to wipe disks quickly and with a known pattern if desired.
     
  • Image/wipe Verify - dcfldd can verify that a target drive is a bit-for-bit match of the specified input file or pattern.
     
  • Multiple outputs - dcfldd can output to multiple files or disks at the same time.
    Split output - dcfldd can split output to multiple files with more configurability than the split command.
     
  • Piped output and logs - dcfldd can send all its log data and output to commands as well as files natively.