Шукати в цьому блозі

вівторок, 26 червня 2012 р.

Запрос к MSSQL на Perl из Linux

Собственно используем FreeTDS, /etc/freetds/freetds.conf:
[orion]
        host = 10.254.103.38
        port = 1433
        client charset = UTF-8
        tds version = 8.0
        text size = 20971520
Устанавливаем tdsodbc, unixodbc и libdbd-odbc-perl:
$ sudo aptitude install tdsodbc libdbd-odbc-perl unixodbc
Настраиваем UnixODBC, /etc/odbcinst.ini:
[FreeTDS]
Description = FreeTDS
Driver      = /usr/lib/odbc/libtdsodbc.so
Setup       = /usr/lib/odbc/libtdsS.so
UsageCount  = 1
Ну вот, теперь пишем запрос в Perl'е:
#!/usr/bin/perl -w

use strict;
use DBI;

my $dbh = DBI->connect('dbi:ODBC:server=orion;port=1433;driver=FreeTDS;tds_version=8.0', 'username', 'password', {PrintError => 0});
die "Unable for connect to server $DBI::errstr" unless $dbh;

my $rc;
my $sth;
    
#$sth = $dbh->prepare('select @@servername');
$sth = $dbh->prepare('SELECT [Caption] AS conn_details, 0 AS cnt_conn_details FROM [OrionDB].[dbo].[Nodes] GROUP BY [Caption] ORDER BY conn_details');
if($sth->execute) {
    while(my $dat = $sth->fetchrow_hashref) {
        foreach my $k (sort keys %{ $dat }) {
            print $k,"=>",${ $dat }{$k},"\n";
        }
    }
}

Чтение UTF16 в Perl

Попалась чудная программа, которая разработана под Windows и хранит свои данные хоть и в текстовом формате, но не в UTF8, который является привычным для Linux, а в UTF16.
Встала задача прочитать этот чудный файл в Perl'е, да так чтобы его содержимое было корректно воспринято.
Оказалось всё не просто, а очень просто:
foreach my $orionmap ( sort @orionmap ) {
    open my $FMAP, "<:encoding(utf16)", "$orionmap" || die "Can't open $orionmap for read: $!\n";
    while (<$FMAP>) {
        chomp;
        chop if /\r$/;
        print;
        print "\n";
    }
    close $FMAP;
}
Потом уже нашёл статью на Хабре где народ говорит о возможных граблях. Что-ж, как говорил один знакомый людоед: "Пожуём - увидим!".

середа, 6 червня 2012 р.

Сброс пароля учётной записи в Windows7


Случается, что пароль или забылся(особенно если он был сложный), или потерялся. В данном примере мы не будем пытаться узнать забытый пароль, мы его просто сбросим или поменяем.
Нам понадобится установочный диск Windows7 для активации скрытой учетной записи Администратора. Способ активации заключается в правке реестра из установочной среды.
Загружаемся с диска и нажимаем Shift+F10 для запуска командной строки. Вбиваем regedit и запускаем редактор реестра. Выделяем раздел HKEY_LOCAL_MACHINE и в меню выбираем Файл -> Загрузить куст.. (File -> Load hive..). Нам нужен будет файл с именем SAM, который находится в каталоге \Windows\System32\config на диске, где установлена Windows7. В запросе ввода имени куста — пишите что угодно. Теперь выбираем раздел HKEY_LOCAL_MACHINE\имя_куста\SAM\Domains\Account\Users\0001F4 и дважды кликаем по ключу F. Откроется редактор, в котором нужно перейти к первому числу в строке с номером 0038, это будет число 11. Меняем его на 10. На этом моменте осторожнее — поменять надо только это число, ничего не добавляя и не удаляя. Теперь выделяем загруженный куст HKEY_LOCAL_MACHINE\имя_куста\ и в меню выбираем Файл -> Выгрузить куст… (File -> Unload hive…), подтверждаем выгрузку куста.
Всё. Вынимаем диск и перезагружаемся. Теперь можно зайти под учетной записью Администратора(по умолчанию без пароля) и в панели управления пользователями поменять забытый пароль.

ps: Мопедик не мой, я только объявку дал ;)

вівторок, 5 червня 2012 р.

Skype + PulseAudio

С переходом на KDE как-то незаметно в жизнь вошёл PulseAudio. Недавно заметил, что в Skype перестал работать микрофон, хотя пока под Gnome использовался ALSA такой проблемы не существовало.
Решение достаточно простое - установить пакет pavucontrol и настроить с его помощью ввод с микрофона
aptitude install pavucontrol
Всё дело в том, что при первоначальной установке PulseAudio пакет pavucontrol не устанавливался автоматически, хотя именно с его помощью и настраивается PulseAudio.
А так всё достаточно просто и понятно.

четвер, 31 травня 2012 р.

Шифруемся и прячемся: стеганография

Кратко о предметной области.
Стеганография - в переводе с греческого дословно означает «тайнопись». Это наука о скрытой передаче информации путём сохранения в тайне самого факта передачи. В отличие от криптографии, которая скрывает содержимое секретного сообщения, стеганография скрывает само его существование.
Для достижения преследуемых в этой заметке целей в Debian GNU/Linux есть замечательный пакет - steghide:
A steganography hiding tool
Steghide is steganography program which hides bits of a data file in some of the least significant bits of another file in such a way that the existence of the data file is not visible and cannot be proven.

Steghide is designed to be portable and configurable and features hiding data in bmp, wav and au files, blowfish encryption, MD5 hashing of passphrases to blowfish keys, and pseudo-random distribution of hidden bits in the container data.
установим его:
$ aptitude install steghide
Теперь можем попробовать спрятать любой текст в изображении. Спрячем текст взяв его со стандартного ввода:
$ echo "Текст спрятанного сообщения" | steghide embed -cf image.jpg -p passw0rd -ef -
"Текст спрятанного сообщения" будет имплементирован в файл image.jpg поэтому если оригинал изображения дорог вам как память то предварительно создайте его копию.
Чтобы увидеть спрятанный текст проделаем обратную операцию:
$ steghide extract -sf image.jpg -p passw0rd -xf -
Ничего сложного! Можно посмотреть информацию о спрятанных данных:
$ steghide info image.jpg
"image.jpg":
  format: jpeg
  capacity: 4,9 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase: 
  embedded data:
    size: 53,0 Byte
    encrypted: rijndael-128, cbc
    compressed: yes
А также получить список всех поддерживаемых алгоритмах шифрования, которые можно использовать совместно с опцией -e (--encryption):
$ steghide encinfo
encryption algorithms:
<algorithm>: <supported modes>...
cast-128: cbc cfb ctr ecb ncfb nofb ofb
gost: cbc cfb ctr ecb ncfb nofb ofb
rijndael-128: cbc cfb ctr ecb ncfb nofb ofb
twofish: cbc cfb ctr ecb ncfb nofb ofb
arcfour: stream
cast-256: cbc cfb ctr ecb ncfb nofb ofb
loki97: cbc cfb ctr ecb ncfb nofb ofb
rijndael-192: cbc cfb ctr ecb ncfb nofb ofb
saferplus: cbc cfb ctr ecb ncfb nofb ofb
wake: stream
des: cbc cfb ctr ecb ncfb nofb ofb
rijndael-256: cbc cfb ctr ecb ncfb nofb ofb
serpent: cbc cfb ctr ecb ncfb nofb ofb
xtea: cbc cfb ctr ecb ncfb nofb ofb
blowfish: cbc cfb ctr ecb ncfb nofb ofb
enigma: stream
rc2: cbc cfb ctr ecb ncfb nofb ofb
tripledes: cbc cfb ctr ecb ncfb nofb ofb
Спрятанный текст можно брать не только из стандартного ввода, но и из заранее подготовленного файла:
$ steghide embed -cf image.jpg -p passw0rd -ef secretfile.txt
Равно как и восстанавливать его из картинки:
$ steghide extract -cf image.jpg -p passw0rd -ef secretfile.txt
Кстати, интересный момент, можно прятать не только текст, но и изображение в изображении, главное чтобы размер того в чём прячем изначально был больше того, что прячем (не знаю на сколько - не проверял), а иначе рискуем получить ошибку следующего вида:
steghide: the cover file is too short to embed the data.
Для примера "спрячем" мой аватар в другой красивой картинке:
$ steghide embed -cf image.jpg -p passw0rd -ef gremlin-gizmo.jpg
Оригинал от полученного изображения по размеру не сильно отличается, равно как и по качеству:
$ ls -l image.*
-rw-r--r-- 1 olden olden 260660 Май 31 15:55 image.jpg
-rw-r--r-- 1 olden olden 250538 Май 31 15:55 image.orig.jpg
$ md5sum image.*
5c3dfbd17d4e8bfbe15006e2282e17c2  image.jpg
b2d51cdf620b9180daebb5a2dad4a186  image.orig.jpg
Аватарка:

Оригинал:

А вот тут спрятана аватарка:

Всё тайное рано или поздно становится явным!
$ steghide extract -sf image.jpg -p passw0rd -xf avatar.jpg
Сравним результаты:
$ md5sum gremlin-gizmo.jpg avatar.jpg 
4c9106a839c2e0c6d7e4ccd8b095ff6e  gremlin-gizmo.jpg
4c9106a839c2e0c6d7e4ccd8b095ff6e  avatar.jpg
и визуально:

Кстати, помимо сравнения размеров и md5sum для оригинального изображения и изображения со стеганограммой, интересно сравнить их ещё и визуально:
$ compare -verbose image.orig.jpg image.jpg diff.png
Прелюбопытнейший результат. А с первого взгляда на изображения и не скажешь, что в них столько различий.

У вас до сих пор не было паранойи?! Тогда мы идём к вам!!!

вівторок, 24 квітня 2012 р.

Ограничение доступа на Extreme Networks

Создаём полиси:

edit policy noc-telnet
(редактор а-ля vi, поэтому не составляет особого труда с ним освоиться)

Заполняем содержимым:
entry entry-10 {
 if match any {
    source-address xxx.xxx.xxx.xxx/32 ;
    source-address xxx.xxx.xxx.xxx/27 ;
 }
 then {
    permit;
 }
}
entry entry-20 {
  if {

 }
 then {
    deny;
 }
}
(В каком-то мануале читал, что в match any необходимо использовать вместо source-address nlry, но так policy не работало)
Подключаем полиси к сервису:
configure telnet access-profile noc-telnet

Посмотреть полиси можно так:
show policy noc-telnet

Если хотим что-то поменять в полиси то опять рисуем edit, а затем не забываем:
refresh policy noc-telnet

вівторок, 20 березня 2012 р.

Samba user account management tool (pdbedit)


Если Вы используете SAMBA в качестве контроллера домена Window, то управлять групповыми политиками необходимо с помощью утилиты - pdbedit.

В данной заметке хочу описать и привести примеры ее использования:
Просмотр перечня всех существующих груповых политик домена:
[root@router ~]# pdbedit -P ?
No account policy by that name!
Account policy names are:
min password length
password history
user must logon to change password
maximum password age
minimum password age
lockout duration
reset count minutes
bad lockout attempt
disconnect time
refuse machine password change
Samba политики домена NT4
NT4 policy Name Samba Policy Name NT4 Range Samba Range Samba Default
Maximum Password Age maximum password age 0 - 999 (days) 0 - 4294967295 (sec) 4294967295
Minimum Password Age minimum password age 0 - 999 (days) 0 - 4294967295 (sec) 0
Minimum Password Length min password length 1 - 14 (Chars) 0 - 4294967295 (Chars) 5
Password Uniqueness password history 0 - 23 (#) 0 - 4294967295 (#) 0
Account Lockout - Reset count after reset count minutes 1 - 99998 (min) 0 - 4294967295 (min) 30
Lockout after bad logon attempts bad lockout attempt 0 - 998 (#) 0 - 4294967295 (#) 0
*** Not Known *** disconnect time TBA 0 - 4294967295 0
Lockout Duration lockout duration 1 - 99998 (min) 0 - 4294967295 (min) 30
Users must log on in order to change password user must logon to change password 0/1 0 - 4294967295 0
*** Registry Setting *** refuse machine password change 0/1 0 - 4294967295 0

Просмотреть значение параметра политики, можно так:
[root@router ~]# pdbedit -P "НАЗВАНИЕ ПОЛИТИКИ"
min password length - минимальная длинна пароля, который можно задать. В данном случае пароль должен быть не меньше 8-ми символов.
[root@router ~]# pdbedit -P "min password length"
account policy "min password length" description: Minimal password length (default: 5)
account policy "min password length" value is: 8
password history - история пароля. Сохранять историю прежде вводимых паролей. Если указать, например значение "5", то старый пароль можно будет повтороно ввести только после 6-ти уникальных паролей.
[root@router ~]# pdbedit -P "password history"
account policy "password history" description: Length of Password History Entries (default: 0 => off)
account policy "password history" value is: 0
Пример, установим сохранение 3-х прежде введенных паролей:
[root@router ~]# pdbedit -P "password history" -C 3
account policy "password history" description: Length of Password History Entries (default: 0 => off)
account policy "password history" value was: 0
account policy "password history" value is now: 3
user must logon to change password - требовать смену пароля при следующем входе в систему.
[root@router ~]# pdbedit -P "user must logon to change password"
account policy "user must logon to change password" description: Force Users to logon for password change (default: 0 => off, 2 => on)
account policy "user must logon to change password" value is: 0
maximum password age - Запрос смены пароля пользователям. Тут указываем количество времени в секудах, на протяжении которого пароль можно не менять. С этого момента времени пароль будет меняться в соответствии с политикой.
[root@router ~]# pdbedit -P "maximum password age"
account policy "maximum password age" description: Maximum password age, in seconds (default: -1 => never expire passwords)
account policy "maximum password age" value is: 4294967295
Пример, установим максимальный срок действия пароля 90дней:
[root@router ~]# pdbedit -P "maximum password age" -C 777600
minimum password age - Минимальный срок действия пароля в секундах (по умолчанию: 0 => позволяют немедленного изменения пароля).
[root@router ~]# pdbedit -P "minimum password age"
account policy "minimum password age" description: Minimal password age, in seconds (default: 0 => allow immediate password change)
account policy "minimum password age" value is: 0
Пример, установим минимальный срок действия пароля 80дней:
[root@router ~]# pdbedit -P "minimum password age" -C 691200
lockout duration - время блокировки при неудачном входе. Устанавливаем в минутах, или ставим значение -1 - "на всегда" (учетная запись должна быть повторно включаться вручную).
[root@router ~]# pdbedit -P "lockout duration"
account policy "lockout duration" description: Lockout duration in minutes (default: 30, -1 => forever)
account policy "lockout duration" value is: 1
reset count minutes - сброс счетчика минут, блокировки учетной записи.
[root@router ~]# pdbedit -P "reset count minutes"
account policy "reset count minutes" description: Reset time after lockout in minutes (default: 30)
account policy "reset count minutes" value is: 30
bad lockout attempt - блокировка при неудачной попытке входа в домен.
[root@router ~]# pdbedit -P "bad lockout attempt"
account policy "bad lockout attempt" description: Lockout users after bad logon attempts (default: 0 => off)
account policy "bad lockout attempt" value is: 3
Пример, в данном случае после 3-х неудачных попыток ввода пароля пользователем, он блокируется.
[root@router ~]# pdbedit -P "bad lockout attempt" -C 3
account policy "bad lockout attempt" description: Lockout users after bad logon attempts (default: 0 => off)
account policy "bad lockout attempt" value was: 3
account policy "bad lockout attempt" value is now: 3
disconnect time - время до разъединения. Возможные значения: 0 - отключать пользователя, -1 - не отключать.
[root@router ~]# pdbedit -P "disconnect time"
account policy "disconnect time" description: Disconnect Users outside logon hours (default: -1 => off, 0 => on)
account policy "disconnect time" value is: 4294967295
refuse machine password change - отказываются менять пароль машины.
[root@router ~]# pdbedit -P "refuse machine password change"
account policy "refuse machine password change" description: Allow Machine Password changes (default: 0 => off)
account policy "refuse machine password change" value is: 0