Posts tagged ‘linux’

Системни статистики с vmstat

vmstat е позната като програма за показване на статистики за виртуалната памет. Ние обаче може да я използваме и за други статистики.

Освен статистики за паметта, може да се изведат статистики за процесора, IO, Swap, Proc, системните прекъсвания. vmstat се използва много лесно. Без никакви допълнителни опции можем да я ползваме така:

vmstat [delay] [counts]

Нека да предположим, че искате да разпечатвате информация на екрана всяка секунда, 60 пъти (искате да вземете статистиките в продължение на една минута през интервал от 1 секунда):

vmstat 1 60

Изхода от командата ще изглежда така:

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 3  0  57768   5712   4696 174692    0    0     0   496  458 1636 19  2 77  2
 2  0  57768   5712   4696 174692    0    0     0     0  466 1687 25  1 74  0
 0  0  57768   5712   4696 174704    0    0     0     0  438  990  7  1 92  0
 2  0  57768   5712   4696 174704    0    0     0     0  459 1020  6  0 94  0
 2  0  57768   5712   4696 174704    0    0     0     0  429  965  7  0 93  0
 2  0  57768   5712   4704 174696    0    0     0    40  455 1039  3  0 97  0
...

Нека да погледнем към полетата:

Описание на полетата
 Procs
 r: Брой процеси, които чакат да се изпълнят.
 b: Брой процеси, които спят и не могат да се прекъсват.

   Memory
 swpd: Количеството виртуална памет, което се използва.
 free: Количество свободна памет.
 buff: Памет използвана за буфери.
 cache: Памет използвана за кеш.
 inact: Неактивна памет. (-a option)
 active: Активна памет. (-a option)

   Swap
 si: Показва колко виртуална памет е прочетена от диска (/s).
 so: Покзва колко виртуална памет е записана на диска. (/s).

   IO
 bi: Блокове прочетени от блоково устройство (блокове/s).
 bo: Блокове записани на блоково устройство (блокове/s).

   System
 in: Брой на прекъсванията в секунда, включително и прекъсванията за часовника.
 cs: Брой на смяната на контекста за секунда.

   CPU
Това са проценти от цялото време на процесора.
 us: Време, през което се изпълнява код, който не принадлежи на ядрото.
 sy: Време, през което се изпълнява код на ядрото. (системно време)
 id: Време, през което не се изпълнява нищо. Преди ядро 2.5.41, това включва и IO-wait времето.
 wa: Време, през което се чака за IO операции. Преди ядро 2.5.41, се включва в id.
 st: Време което е използвано от виртуалната машина.Преди ядро 2.6.11, не е установена стойност.

Обикновено се интересувам главно от две полета. Под Memory, полето free, което покзва колко неизползвана памет е останала. Под CPU, полето id, което показва колко е натоварен процесора. Ако стойностите в free или id стане много малка, това означава, че системата се е натоварила и трябва да се провери какво се случва.

vmstat е много удобна когато трябва да се прави отдалечено наблюдение. Може да се използва заедно със ssh по следния начин:

ssh username@domain.com "vmstat 60 99999"

vmstat не разпечатва датата или времето. Ако искате да си направите лог на статистиките заедно с времето, когато са взети, може да го постигнете по следния начин:

vmstat 1 1;for ((;;));do date; vmstat 10 2 | tail -n1;done

Командата ще разпечатва статистики на всеки 10 секунди.

Изхода ще изглежда по подобен начин.

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  57644   6096   8080 160828    0    1    30    31  441  137 11  1 86  1
Sat Dec  8 12:51:40 MYT 2007
 0  0  57644   6152   8092 160828    0    0     0    38  449  989  8  0 92  0
Sat Dec  8 12:51:50 MYT 2007
 0  0  57644   5864   8108 160828    0    0     0     8  443  980  5  0 95  0
Sat Dec  8 12:52:00 MYT 2007
...

vmstat може да извежда и статистики за използването на диска и др. Консултирайте се с man страниците за повече информация.

Possibly Related Posts:


drop_caches

Задаването на стойности на /proc/sys/vm/drop_caches кара ядрото да освободи кешовете, dirty страниците и inodes от паметта.

За да освободим кешовете:

echo 1 > /proc/sys/vm/drop_caches

За да освободим dirty страниците и inodes от паметта:

echo 2 > /proc/sys/vm/drop_caches

За да освободим кешовете, dirty страниците и inodes от паметта:

echo 3 > /proc/sys/vm/drop_caches

За да сме сигурни, че всичко ще бъде освободено трябва да изпълним командата „sync“ преди да задаваме стойности на /proc/sys/vm/drop_caches.  Тази опция е добавена от версия на ядрото 2.6.16.

Possibly Related Posts:


Конфигуриране на ядрото: Поддръжка на мрежови протоколи

Менюто с мрежовите настройки съдържа опции за настройване на мрежовите протоколи. Може да включвате или да изключвате поддръжка на цели протоколи, или да настроите финно ядрото за определена роле, като рутер или пакетен филтър.

Packet and Socket Options

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

В някой случаи е желателно, или понякога нужно, да опбработваме мрежовата информация по друг начин, като да модифицираме стандартния пакет, или да променим или разширим стандартните пакетни операции. Някои от тези опции са толкова важни, че си имат собствени секции. Някой опции включват следното:

Packet Socket— Тази опция позволява на програмите да пропускат нормалното обратване на информацията. Повечето програми не се нуждаят от това, но някои инструменти за мрежова диагностика имат нужда от достъп до тази информация. Например tcpdump, който показва информация от ниско ниво за TCP/IP протокола, използва тези опции в ядрото. Включването на тези опции без да има нужда ще уголеми ядрото малко и може да позволи на натрапник да използва инстументи за анализ на протоколи, като tcpdump, които бихте искали да не могат да се ползват от натрапници. Пропускането на тази опция, също ще ви попречи да използвате тези инструменти.

Packet Socket: Mmapped IO— Това е подопция на сокетите, която, ако е активирана, може да повиши производителността на инструментите, котио използват връзки със сокети.

Unix Domain Sockets— Няколко важни програми в Линукс ползват мрежови протоколи, за да комуникират помежду си когато работят на един и същи компютър. Примери са syslogd (който се грижи за логовете) и X (X програмите използват мрежови протоколи, за да комуникират с X сървъра, който показва техните прозорци). Тези сокети позволяват мрежовата комунуикация дори ма компютри, на които липсва мрежов хардуер. Би трябвало да включите тази опция на всички стандартми Линукс машини. Само някои тясно специализирани устройства може да нямат нужда от тази опция.

Тези всички опции имат настойки по подразбиране, които са достатъчно уместни за повечето случаи.

Possibly Related Posts:


Ограничаване на достъпа до команда в Линукс

Как да огранича достъпа до /usr/local/bin/start само за определени потребители на системата ? Отговорът на върпроса е, че трбва да използвате стандартните Линукс групи.

Стъпка 1: Създайте група за всички оторизирани потребители

Създайте групата:

#groupadd restrictedapp

Добавете потребители в тази група:

#usermod -aG {име_на_група} {потребителско_име}
#usermod -aG restrictedapp ivan
#usermod -aG restrictedapp petar

Където:

-a Добавя потребителя към групата

-G Списък с групи, към които да се добави потребителя

Стъпка 2: Ограничете достъпа

Вече имаме група с потребители, които трябва да могат да изпълняват командата. Сега трябва да използваме chgrp, за да сменим групата на самата програма:

#chgrp {група} {път_до_приложението}
#chgrp restrictedapp /usr/local/bin/start

Трябва да използваме командата chmod, за да ограничим достъпа на всички, които не са от групата restrictedapp да имат достъп до приложението.

#chmod 750 {път_до_приложението}
#chmod 750 /usr/local/bin/start

Стъпка 3: Тествайте

Пробвайте първо да изпълните комадата с потребител ivan:

#su – ivan
#/usr/local/bin/start
#exit

#su – valeri
#/usr/local/bin/start
bash: /usr/local/bin/start: Permission denied

Забележка:

Възможностите, които ви се предлагат от командите chmod, chgrp и usermod, не ви предлагат пълен контрол върху изпълнението на дадени приложения. По-добрия вариант би било да се въведат SELinux и ACL-и на файловата система.

Possibly Related Posts:


Slackware news: 4 Октомври 2009

Има две важни промени днес PHP и Samba. Промените са направени едновременно в -Stable и в -Current. В -Current, обаче има и доста други промени като MySQL, Amarok, QT, Perl, както и GCC 4.4.1.

Това е последното от -Current changelog-а:

Sun Oct 4 00:17:50 CDT 2009
ap/mysql-5.1.39-i486-1.txz: Upgraded. This bumps the version of the shared libraries to .so.16.0.0.
d/perl-5.10.1-i486-1.txz: Upgraded. Compiled against mysql-5.1.39, upgraded to perl-5.10.1, DBD-mysql-4.013, DBI-1.609, and URI-1.40.
kde/amarok-2.2.0-i486-1.txz: Upgraded.
l/qt-4.5_0bd8418-i486-1.txz: Upgraded. This is the KDE Qt 4.5.2-patched git branch, compiled against mysql-5.1.39.
l/redland-1.0.9-i486-1.txz: Upgraded. Compiled against mysql-5.1.39.
l/soprano-2.3.1-i486-1.txz: Upgraded.
l/taglib-1.6-i486-1.txz: Upgraded.
l/taglib-extras-1.0.1-i486-1.txz: Upgraded.
n/openssh-5.3p1-i486-1.txz: Upgraded.
n/php-5.2.11-i486-1.txz: Upgraded. This release fixes some possible security issues,
all of which have "unknown impact and attack vectors".For more information, see:

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3291

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3292

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3293

(* Security fix *)
Also, thanks to Frank Gingras and Rich Bowen for helping to improve the syntax in mod_php.conf.
n/samba-3.4.2-i486-1.txz: Upgraded.
This update fixes the following security issues.
A misconfigured /etc/passwd with no defined home directory could allow security restrictions to be bypassed.
mount.cifs could allow a local user to read the first line of an arbitrary file if installed setuid.
 (On Slackware, it was not installed setuid)
Specially crafted SMB requests could cause a denial of service.
For more information, see:

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-2813

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-2948

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-2906

(* Security fix *)
testing/packages/gcc-4.4.1/gcc-4.4.1-i486-1.txz: Added.
testing/packages/gcc-4.4.1/gcc-g++-4.4.1-i486-1.txz: Added.
testing/packages/gcc-4.4.1/gcc-gfortran-4.4.1-i486-1.txz: Added.
testing/packages/gcc-4.4.1/gcc-gnat-4.4.1-i486-1.txz: Added.
testing/packages/gcc-4.4.1/gcc-java-4.4.1-i486-1.txz: Added.
testing/packages/gcc-4.4.1/gcc-objc-4.4.1-i486-1.txz: Added.

Possibly Related Posts:


GoblinX 3.0

Flavio Pereira de Oliveira представи днес последната версия на неговата популярна Slackware-базирана жива дистрибуция, GoblinX, още позната като G:Standard. GoblinX 3.0 имаше пет десктоп мениджъра, но явно Flavio е решил да запази само един KDE. С KDE4, тази дистрибуция включва стабилност и добър външен вид в един ISO имидж.

В новата версия на GoblinX 3.0:

· KDE 4.2.4;
· Opera 10 (с поддръжка на Slik/Webmount);
· Подобрения на KDE 4;
· Обновен X.Org;
· Обновени са различни пакети;
· Оправени са много бъгове и грешки;
· Добавени са различни програми;
· Добавени са някои GTK+2 приложения;
· Много допълнителни подобрения и модификации…

Има няколко бъга все още. Например GoblinX 3.0 не може да работи на FAT32 файлова система на USB флаш памети, понеже KDE4 не може да се тръгне ако се използва Posixovl за запис на промените. Освен това драйвера за Интелски видео карти (xf86-video-intel), има проблеми с ядтотро 2.6.27. Напредналите потребители могат да сменят a.NX11-3.0-i486-1.lzm пакета с a.NX11-3.0-i486-2.lzm и да ребилднат ISO имиджа. Втория пакет съдържа старата версия на X.Org сървъра, която работи добре с Интелски видео карти.

За GoblinX

GoblinX е жива дистрибуция, базирана на Slackware и създадена с помощта на Linuxlive сцриптовете на Flavio de Oliveira. Дистрибуцията е перфектна за тези, които искат качествени приложения и практичен и красив десктоп. Дистрибуцията включва някои от най-използваните приложения и позволяван на всеки да си я променя по много лесен начин.

Possibly Related Posts:


Основи на Линукс автоматизацията

Тази статия описва начина, по който могат да се изпълняват команди в определено време без да се налага на потребителя да ги въвежда. Програмите отговорни за това в линукс са cron и at.

Изпълняване на команди в точно определено време:

Ако нямате нужда командата да се изпълнява редовно може да използвате. Например може да ползвате :

at midnight

След като изпълните това ще си се покаже at командния ред( at>; ). Напишете командата, която искате да се изпълни. Например:

at>; who > who.out

Можете да въвеждате по една команда на ред. Когато сте готови натиснете Ctrl и D. Сега би трябвало да видте :

X         2006-05-26 00:00 a yourname

Където X е номера на вашата команда. Тази поредица от команди казва на вашата машина да изпълни в полунощ командата, която сте въвели.

Ако решите, че вече на искате да се изпълнява тази команда, може да използвате :

atrm X

X е номера на командата, която искате да не се изпълнява. atrm е командата, с която се премахват задачи зададени с at.

atrm поддържа много разновидности на въведеното време. Например може да ползвате: morning, noon, teatime, or midnight. „teatime“ също работи и изпълнява команди в  4 следобед!

Ако ви се налага да изпълнявате една команда всеки ден от месеца например, може тогава не е удобно всеки ден да назначавате да се изпълнява. Cron ви позволява да изпълнявате команди по този начин. Освен това има една много важна разлика между cron и at. at може да се изпълнява само от root, a cron от всички потребители.

Може да има различни настройки за всеки потребител на системата. Преди да започнете каквото и да било трябва да се уверите, че cron работи като демон.

За да можем да създаваме задачи, трябва да разберем как работи Cron. Най-добрия начин е чрез примери.

Първо, всяка задача за cron има следния синтаксис:

Minute (0-59) Hour (0-23) Day of Month (1-31) Month (1-12 or Jan-Dec) Day of Week (0-6 or Sun-Sat) Command

Не е нужно да се указва всяко поле. Ако искате да укажете всеки месец например може да използвате *. Това е пример как може да използване *.

* * * * 5 who

Това ще изпълнява командата who всяка минута, от всеки час, от всеки месец от за всеки петък. Използваме 5 на мястото на ден от седмицата.

5 * * * * who

Това ще изпълнява командата who на всяка пета минута, от всеки час, от всеки месец, за всеки ден от седмицата. Тук използваме 5 на мястото на минутите.

Ако искате някаква команда да се изпълнява всяка вечер в полунощ?

0 0 * * * whо

Това ще изпълнява командата who в полунощ, всеки месец, за всички дни от седмицата. Тук 0 има на мястото за часове и минути и представлява полунощ.

За повече гъвкавост може да използваме / (наклонена черта). Например:

*/15 * * * * who

Този ред ще изпълнява командата who всеки 15 минути, от всеки час, от всеки месец, за всички дни от седмицата. Използване /15 на мястото на минутите за да покажем колко често трябва да се изпълнява задачата.

Има и други опции, но за да не усложняваме ще ги пропуснем.

Създаване на автоматична задача

За да можете да задавате задачи на cron процеса трябва да използвате crontab. Тази команда се въвежда на командния ред. Като изпълните командата тя отваря редактора по подразбиране на вашата дистрибуция и ви дава възможност да редактирате всички задачи за вашия потребител. Може да въведете това, което искате да изпълнявате :

Първо изпълнявате командата с параметър -е (edit):

crontab -e

След това въвеждате задачата:

*/15 * * * * yourcommand

Заменете yourcommand, с това което искате да изпълнявате. След това запазете файла и излезте от редактора. Трябва да видите нещо от сорта на:

crontab: installing new crontab

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

Изчакайте да се изпълни командата. Ако се пуснали crond с възможност да записва задачите, които изпълнява, може да проверите какво става така :

tail -f /var/log/cron

Може да редактирате задачата по същия начин, по който я създадохте, само че редактирате файла и запазвате. За да изтриете всички задачи може да използвате:

crontab -r

Ако искате да изтриете само някои:

crontab -е

След това изтривате редовете, които не са нужни вече и запазвате.

Possibly Related Posts:


Linux 2.6.31

Тази версия на ядрото добавя USB 3.0 поддръжка, еквивалент на FUSE за подаване на звук от OSS към ALSA, някой подобрения в управлението на паметта, добавена е поддръжка за ATI Radeon Modesetting, както и за Intel Wireless Multicomm 3200 Wifi устройства. Добавена е поддръжка и за броячите за производителност, поддръжка за gcov, проверка за не инициализирана памет, детектор за memory leaks и много други. Цялата информация може да видите тук.

Possibly Related Posts:


Как да търсим файлове в Линукс

Как да търсим с ‘locate’

Най-лесния начин да търсим файлове в Линукс е с програмата locate. Когато пуснете за пръв път програмата може да ви изпише съобщение за грешка. Проблема е че е нужна база с всички файлове на на компютъра за да може locate да ви покаже резултат. Съобщението за грешка ще би подкани да се логнете като root и да изпълните определена команда. След това програмата би трябвало да работи.

Има няколко начина по които може да ползваме приложението.
$ locate index.html

Това ще разпечата списък с всички файлове, в името на които има index.html. Примерни резултати биха били :

/home/pamela/index.html
/usr/local/games/pam/index.html

Може да използвате -q опцията за да подтиснете съобщенията за грешки. Съобщения за грешки, които може да срещнете, са например, че нямате достъп до файловете понеже не сте логнати с потребител root. Освен това -q опцията ще подтисне всякакви други съобщения за грешки.

$ locate „*.dat“ -q

Може да използвате -n опцията за да укажете колко резултата да показва програмата.

$ locate „*.c“ -n 10

Това ще покаже само първите 10 файла, на които имената завършват на .c.

Има още няколко параметъра, но те се ползват рядко и са описани в man страниците на програмата.

Как да търсим с ‘find’
Един от най-добрите начини за търсене на файлове в Линукс е с find. Тази програма има много параметри които може да се използват за да намерите точно това, което търсите.

Ако просто искате да знаете къде в файловата система се намира даден файл то тогава е по-добре да използвате locate.

Ето няколко начина, по които можете да ползвате find.

$ find / -name ‘program.c’

където :

/ – директорията, в която търсим

-name – с тази опция показваме, че търсим файлове

program.c – указваме файла, който търсим

$ find / -name ‘index*’
$ find / -iname ‘index*’
Първата команда ще намери файлове, които започват с index. Програмата ще започне да търси от директорията / и ще продължи във поддиректориите.
Втората кманда ще търси за същите файлове, но няма да бъде чувствителна към това дали са написани с малки или големи букви.

$ find -name met*
Тази команда ще търси за файлове, които започват с met в настоящата директория и всички нейни поддиректории. Понеже не е указана директория, се взима настоящата по подразбиране.

$ find /mp3collection -name ‘*.mp3′ -size -5000k
$ find / -size +10000k
Първата команда ще търси за всички файлове в директорията /mp3collection, които завършват на mp3 и са по малки от 5000 KB ( < 5MB)
Втората команда ще търси в / директорията и ще търси файлове, които са по-големи от 10000KB (> 10MB)

$ find /home/david -amin -10 -name ‘*.c’
$ find /home/david -atime -2 -name ‘*.c’
$ find /home/david -mmin -10 -name ‘*.c’
$ find /home/david -mtime -2 -name ‘*.c’

Първата команда търси за файлове в директорията /home/david и всички нейни поддиректории за файлове, които завършват на .c и върху които са били извършвани операции върху тях в последните 10 минути.
Втората команда търси за същите работи, но за файлове, върху които са извършван операции в последните 10 часа.
Третата и четвъртата команда отново търсят за същите файлове, но само ако тяхното съдържание е било променяно.

$ find / -mount -name ‘win*’
Тази команда връща файловете, които започват с ‘win’. Разликата е че ще се търсят само файлови системи,които не са маунтнати.

$ find /mp3-collection -name ‘Metallica*’ -and -size +10000k
$ find /mp3-collection -size +10000k ! -name „Metallica*“
$ find /mp3-collection -name ‘Metallica*’ -or -size +10000k

Булевите оператори като AND, OR или NOT правят find доста полезен инструмент.
Първата команда търси в директория /mp3-collection за файлове, започващи с ‘Metallica’ и са по-големи от 10000 килобайта (> 10 MB).
Втората команда търси в същата директория като по-горе, но за файлове, които са по-големи от 10MB и не започват с ‘Metallica’.
Третата команда търси за файлове в същата директория като по-горе за файлове, които започват с ‘Metallica’ или файлове, които са по-големи от 10 MB.

Може би най-важната опция е exec. exec ви позволява да изпълняваате опредлена комнда върху резултатите от търсенето. Тук е показан прост пример, в който искаме да изведем детайлите за всеки намерен файл.

$ find / – name ‘Metallica*’ -exec ls -l {\}\ \;

Командата ще изведе всички файлове, които започват с ‘Metallica’ и после ще изпълни ‘ls -l’ върху всеки от тях.

{\}\ показва файла върнат от търсенето, който ще бъде заместен в командата, която изпълняваме.
\;  се използва, за да се укаже края на командата и е задължителен.

Possibly Related Posts:


Как да правим всичко с dd ?

Синтаксиса на командата е :

dd if=<source> of=<target> bs=<byte size>(обикновено степен на 2, но не по-малко от 512 байта) skip= seek= conv=<conversion>.

Source са входните данни. Target е мястото, където се записва информацията. Ако направите грешка и им размените местата, може да затриете много информация.

Примери :

Копиране партишън от един хард диск на друг :

dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=notrunc,noerror

sda2, sdb2 са партишъните. В този случай копираме sda2 върху sdb2. Ако sdb2 не съществува, dd ще започне да пише от началото на диска и ще го създаде. Много е важна последователността на if и of. Може да запишете празен диск върху такъв с информация ако не внимавате.

Създаване на iso image на CD:

dd if=/dev/hdc of=/home/someone/mycd.iso bs=2048 conv=notrunc

CD секторите са дълги 2048 байта и тази команда копира сектор по сектор. Резултата е файл върху хард диска със съдържанието на CD. Може да монтирате копието с „mount -o loop /home/someone/mycd.iso /mnt/mycd“. Файловата система ще вижда файловете и директориите в копието в директорията /mnt/mycd. Може да променяте съдържанието но копието, но няма да можете да го запишете понеже dd не може да пише по CD-та. Ще трябва да използвате друга програма за да записвате.

Копиране на дискета :

dd if=/dev/fd0 of=/home/sam/floppy.image bs=2x80x18b conv=notrunc

или

dd if=/dev/fd0 of=/home/someone/floppy.image conv=notrunc

18b указва 18 сектора по 512 байта, 2x умножава големината на сектора с броя на главите, а 80x указва цилиндрите – общо 1474560 байта. Тази команда чете наведнъж 1474560 байта от /dev/fd0 и после пише 1474560 байта в /home/someoune/floppy.image.

Изписване на „I loveBeer“ вертикално.

echo -n „I love Beer“ | dd cbs=1 conv=unblock 2> /dev/null

Клониране на хард диск:

dd if=/dev/sda of=/dev/sdb conv=notrunc,noerror

В този пример копираме sda върху sdb. Важно не да объркате двата диска. noerror указва да се продължи копирането дори да има грешка. Обикновено dd спира при грешка.

За да видим виртуалната памет

dd if=/proc/kcore | hexdump -C | less

показва по един екран на терминала

За да видим какви файлови системи имаме

dd if=/proc/filesystems | hexdump -C | less

Заредени модули

dd if=/proc/kallsyms | hexdump -C | less

Таблицата с прекъсванията

dd if=/proc/interrupts | hexdump -C | less

Колко секунди е работила машината

dd if=/proc/uptime | hexdump -C | less

Партишъни и техните големини в kb

dd if=/proc/partitions | hexdump -C | less

Статистики за паметта

dd if=/proc/meminfo | hexdump -C | less

За да направим файл с 100 произволни байта

dd if=/dev/urandom of=/home/someone/myrandom bs=1 count=100

Записване на произволна информация върху файл преди да го изтрием

първо правил ls -l , за да видим колко е голям файла. В този случай е 3769

ls -l afile
-rw——- … 3769 Nov 2 13:41 <filename>

dd if=/dev/urandom of=afile bs=3769 count=1 conv=notrunc

Това ще запише произволни символи върху файла.

Копиране на партишън във файл. Не копирайте партишън върху себе си.

dd if=/dev/sdb2 of=/home/someone/partition.image bs=4096 conv=notrunc,noerror

Възстановяване на партишън от файл:

dd if=/home/someone/partition.image of=/dev/sdb2 bs=4096 conv=notrunc,noerror

Конвертиране на символите във файл от малки в големи:

dd if=filename of=filename conv=ucase

Копиране на рам паметта във файл:

dd if=/dev/mem of=/home/someone/mem.bin bs=1024

/dev/mem представлява системната памет. Всъщност може да копирате каквото си искате от там с dd.

Ако искате да направите копие на партишън но на друга машина:

Използвайте ssh(secure shell), за да копиранте от отдалечената машина.

ssh 192.168.xx.yy „dd if=/dev/sda ibs=4096 conv=notrunc,noerror“ | dd of=/dev/sda obs=4096

Използвайте ssh, за да копирате на отдалечената машина.

dd if=/dev/sda ibs=4096 conv=notrunc,noerror | (ssh 192.168.xx.yy dd of=/dev/sda obs=4096)

Операнди

Тези операнди се поддържат:

if=file

Указва входните данни. Ако не е указано взима стандартния вход stdin.

of=file

Указва изходящите данни. Ако не е указано взима стандартния изход stdout. Ако не е указано conv=notrunc, съдържанието на изходящия файл ще бъде изтрито преди да започне операцията.

ibs=n

Указва големината в на блокът на входните данни в байтове. Ако не е указано е 512.

obs=n

Указва големината в на блокът на изходните данни в байтове. Ако не е указано е 512.

bs=n

Указва едновременно големината на блокът на входните и изходните данни да е n байта.

cbs=n

Определя големината на блока за преобразуване в байтове. По подразбиране е 0. Ако cbs= е опропуснато или има стойност 0, използването на block или unblock има незнаен ефект.

files=n

Копира и съединява n входни файла преди да приключи. Има смисъл само като се записва върху магнитна лента или подобни устройства.

skip=n

Пропуска n блока от началото на входния файл преди да започне копирането.

iseek=n

Пропуска n блока от началото на входния файл преди да започне копирането. Използва се, когато горната опция е много бавна.

oseek=n

Пропуска n блока от началото на изходния файл преди да започне копирането.

seek=n

Пропуска n блока от началото на изходния файл преди да започне копирането.

count=n

Копира само n блока.

conv=value[,value. . . ]

Където value са разделени със запетая символи от този лист:

ascii

Конвертира EBCDIC в ASCII.

asciib

Конвертира EBCDIC в ASCII, като използваBSD-съвместими символи.

ebcdic

Конвертира ASCII в EBCDIC. Ако конвертирате ASCII със еднаква дължина без нови редове добавете pipeline с dd conv=unblock преди това.

ebcdicb

Конвертира ASCII в EBCDIC, като използваBSD-съвместими символи. Ако конвертирате ASCII със еднаква дължина без нови редове добавете pipeline с dd conv=unblock преди това.

block

Взима входа като записи, завършващи с нов ред или край на файл (EOF), без значение колко е голям входния блок. Всеки запис се конвертира в запис с определена дължина. Премахват се символите за нов ред. Добавят се SPACE символи към редовете, които са по-къси от големината на блока. Тези редове които имат повече символи отколкото е големината на блока се отрязват, като се разпечатва номера на отрязаните редове.

unblock

Конвертира записите с еднаква дължина в записи с променлива дължина.

lcase

Променя символите за големи букви, определени от LC_CTYPE в малки букви.

ucase

Променя символите за малки букви, определени от LC_CTYPE в големи букви.

swab

Разменя всяка двойка входни байтове. Ако входните байтове са нечетен брой, се пропуска последния ред.

noerror

Не спира при грешка. Когато има грешка при копирането, се изкарва съобщените за грешка, последвано от настоящия брои на блоковете на входния и на изходния файл. Ако е указано sync липсващите данни се заменят с нулеви байтове, иначе входния блок ще се пропусне при записаването.

notrunc

Не изтрива съдържанието на изходния файл преди да започне да копира. Запазва съдържанието на данните, които са не са записани от dd процеса, който извършва операцията. (See also the preceding of=file operand.)

sync

Прави всеки входен блок с големината на ibs= buffer, като при нужда добавя нулеви байтове.
Ако са използвани пове4е от един conv= операнд, се използва последната двойка operand=value.
За bs=, cbs=, ibs=, и obs= операндите, приложението трябва да предостави големината в байтове от вида:

положителен десетичен символ
положителен десетичен символ последван от k, указващ умножение с 1024
положителен десетичен символ последван отM,указващ умножение с 1024*1024
положителен десетичен символ последван отb,указващ умножение с 512
два или повече положителни десетични символа (с или без k или b) разделени от x, указваще произведението на символите.

Possibly Related Posts:


Запознаване с Tor

Tor е софтуер, който е създаден с цел да ви помогне да бъдете анонимен онлайн и да защитите своята лична неприкосновеност докато ползвате интернет. Публикуваната по-долу статия ще ви даде най-обща идея как работи Tor и за какво може да го използвате. Моля, запознайте се и с правата, които имате да ползвате и разпространявате текста.

Въведение
Tor е мрежа от виртуални тунели, която позволява на отделни лица или групи от хора да подобрят сигурността и защитят анонимността си в Интернет. Също така Tor позволява софтуерни разработчици да създават нови комуникационни инструменти с вградени функции за защита на лична информация. Tor стои в основата на широк кръг от приложения, позволяващи на организации и отделни лица да споделят информация в интернет, без да излагат на риск личните си данни.

Хората използват Tor, за да посещават анонимно уебсайтове, да защитят себе си и членовете на семействата си от проследяване, или за свързване с новинарски сайтове, услуги за общуване в реално време, или в случаите, когато гореизброените бъдат блокирани от интернет доставчици. Скритите услуги в Tor дават възможност на потребителите да публикуват сайтове и да използват други уеб услуги, без да е необходимо да разкриват местоположението на сайта. Хората използват Tor също и за общуване на лични или чувствителни теми: чат стаи и уеб форуми за жертви на побой и изнасилване или хора с определени заболявания.

Журналистите използват Tor, за да общуват по-безопасно с опасни и подозрителни лица или дисиденти. Неправителствените организации (НПО) използват Tor, за да позволят на своите служители да се свързват с уебсайта на организацията докато са в чужди страни, без да обявяват на всеослушание къде и за кого работят.

Групи като Индимедия препоръчват Tor като предпазно средство за осигуряване сигурността на личната информация онлайн на своите членове. Активистки групи като Фондация “Електронна граница” (EFF) препоръчват Tor като механизъм за защита на гражданските свободи онлайн. Корпорациите използват Tor като безопасен начин да провеждат анализи на конкуренцията, както и да защитават поверителни съобщения от подслушване. Използват го също и като заместител на традиционните VPN мрежи, които разкриват колко време е продължила дадена комуникация и кога е била осъществена. Къде се намират служителите, работещи до късно? Къде се намират служителите, посещаващи сайтове за търсене на работа? Кои отдели за проучвания общуват с адвокатите на компанията, движещи патентите?

Клон на американските военноморски сили използва Tor за разузнаване и събиране на информация, а един от екипите му използва Tor съвсем наскоро при мисия в Близкия Изток. Службите за ред и сигурност използват Tor за посещаване и наблюдение на уебсайтове, без да оставят правителствени IP адреси в техните лог файлове, както и за по-голяма сигурност по време на операции под прикритие.

Разнообразието на хората, които използват Tor, е всъщност част от причините той да бъде толкова сигурен. Tor ви скрива сред останалите потребители на мрежата, така че колкото по-популярна и разнообразна е базата от потребители на Tor, толкова по-добре защитена ще бъде вашата анонимност.

Защо се нуждаем от Tor
Употребата на Tor ви защитава от обичайната форма на интернет наблюдение, позната като “анализ на трафичните данни”. Анализът на трафика би могъл да се използва, за да подскаже кой с кого разговаря в дадена публична мрежа. Информацията за източника и местоположението на вашия интернет трафик позволява на другите да проследяват вашето поведение и интереси. Това би могло да засегне вашата банкова сметка, ако например сайт за електронна търговия използва ценова дискриминация според страната, в която живеете, или според произхода ви. Разкриването на информация за това къде се намирате и кой сте вие би могло дори да се окаже заплаха за работата или физическото ви здраве. Например, ако пътувате в чужбина и се свързвате с компютъра на своя работодател, за да проверите или изпратите електронна поща, вие можете неволно да разкриете своята националност и професионални връзки на всеки, наблюдаващ мрежата, дори когато връзката е криптирана.

Как работи анализът на данни от трафика? Пакетите с интернет данни съдържат две части: същинския пакет данни и хедър, използван за рутиране. Същинският пакет данни представлява съдържанието – всичко онова, което бива изпратено, независимо дали става въпрос за e-mail съобщение, уеб страница или аудио файл. Дори да криптирате същинските пакети на вашите съобщения, анализът на трафика продължава да разкрива голяма част от информацията относно това, което правите, и вероятно това, което казвате. Това е така, защото се фокусира върху хедъра, който издава източник, направление, размер, време и т.н.

Основен проблем за тези, които се грижат за запазването на личните си данни, е че получателят на вашите съобщения може да види, че са изпратени, само като погледне хедърите. Същото могат да сторят и оторизирани посредници като доставчиците на интернет услуги, а понякога и неоторизирани лица. Най-простата форма на трафик анализ би могла да включва позициониране някъде между подател и получател в мрежата, позволяващо да се виждат хедърите.

Но също така съществуват и по-мощни видове анализ на трафика. Възможно е следене едновременно от няколко места в Интернет и използването на сложни статистически техники за проследяване на моделите на комуникация на много различни организации и хора. Криптирането не помага срещу такива атаки, тъй като скрива само съдържанието на интернет трафика, но не и хедърите.

Решението: разпръсната, анонимна мрежа
Tor помага да се намали рискът едновременно от обикновения и от по-сложен трафик анализ като разпръсква вашите действия на различни места в Интернет, така че нито една точка да не води директно към вашето реално местоположение. Идеята прилича на използването на криволичещ, труден за проследяване път с цел да заблудите някой, който ви преследва, като след това периодично изтривате следите си. Вместо да използват директен път от източник до крайно направление, пакетите с данни в мрежата на Tor поемат по случаен път чрез няколко препредавания, които прикриват следите ви, така че нито един наблюдател на която и да е точка да не може да каже откъде точно идват данните и накъде отиват.

tor how it works 1

За да създаде отделен мрежови път с помощта на Tor, потребителският софтуер или клиент постепенно изгражда верига от криптирани връзки чрез междинни точки от мрежата. Веригата се разширява с по едно звено на всяка стъпка, а всяка междинна точка по пътя знае само от коя предна точка получава данните и на коя следваща трябва да ги предаде. Нито една от точките не знае целия път, който изминава даден пакет от данни. Клиентът се уговаря за различен комплект от криптиращи ключове с всяка от междинните точки, за да подсигури невъзможността която и да е от тези точки да проследи връзките, през които преминават данните.

htw2

След като веднъж тази верига бъде създадена, могат да бъдат разменяни много видове данни или пък различни видове софтуерни приложения да бъдат използвани през мрежата на Tor. Тъй като всяка междинна точка е в състояние да вижда само едно звено от веригата, нито подслушвател, нито компрометирана междинна точка може да да използва трафичните данни, за да се свърже с източника и направлението на връзката. Tor работи само за TCP потоци (стриймове) и може да се използва от всякакво приложение с поддръжка на SOCKS протокол.

С цел ефикасност, софтуерът на Tor използва една и съща верига за свързвания, която вече е била осъществена, само в последните десетина минути. По-късните заявки получават нова верига, за да се попречи на хората да свържат по-ранните ви действия с новите.

htw3

Скрити услуги

Tor също така прави възможно за потребителите да скрият своето местоположение, докато предлагат различни видове услуги, например публикуване в уеб или програми за общуване в реално време. Използвайки “местата за срещи”, други Tor потребители могат да се свързват към тези скрити услуги, без никой да знае идентичността на мрежата на другия. Тази функционалност би могла да даде възможност на потребителите на Tor да създадат уебсайт, където хората да публикуват съдържание, без да се страхуват от цензура. Никой не би бил в състояние да определи кой стои зад този сайт, както и никой, който предлага такъв сайт, не би могъл да знае кой публикува в него. Прочетете повече за конфигурирането на скритите услуги и как работи протоколът за скрити услуги.

Запазване на анонимност
Tor не е в състояние да разреши всички проблеми на анонимността. Той се фокусира само върху защитаването при транспортирането на данни. Ако не желаете сайтовете, които посещавате, да виждат данните, които ви идентифицират, вие трябва да използвате софтуер, който е специфичен за използвания протокол. Например, можете да използвате уеб проксита като Privoxy докато браузвате, за да блокирате кукита и да прикриете информация за типа на вашия браузър.

Също така, за да защитите своята анонимност, бъдете умни. Не оставяйте името си или друг тип лична информация в уеб форми. Трябва да сте наясно, че както всички мрежи, които осигуряват анонимност и са достатъчно бързи за уеб браузване, Tor не предоставя защита срещу атаки от началната до крайната времева точка: ако този, който ви следи, може да наблюдава трафика, който излиза от вашия компютър, както и да следи трафика, който пристига в избраната от вас дестинация, той би могъл да използва статистически анализ, за да разбере, че са част от една и съща верига.

Бъдещето на Tor
Осигуряването на работеща мрежа, която да запазва анонимността в Интернет, е непрекъснато предизвикателство. Ние искаме софтуер, който да отговаря на нуждите на потребителите. Искаме също да запазим мрежата работеща по такъв начин, който позволява присъствието на колкото е възможно повече потребители. Сигурност и ползваемост не е необходимо да бъдат непременно невъзможна комбинация: с увеличаването на ползваемостта на Tor ще бъдат привлечени повече потребители, което ще увеличи възможните източници и направления за всяко съобщение, като по тази начин ще се увеличи и сигурността за всеки като цяло. Ние продължаваме да се развиваме, но се нуждаем то вашата помощ. Моля, обърнете внимание на поддържане на междинна точка или доброволно сътрудничество като разработчик.

Растящите тенденции в закона, политиката и технологиите заплашват анонимността както никога досега, подкопавайки нашата способност да се изразяваме и да общуваме свободно онлайн. Тези тенденции подронват също националната сигурност и важни инфраструктури, като правят общуването между индивиди, организации, корпорации и правителства по-уязвими на анализи. Всеки нов потребител и точка във веригата осигуряват допълнително разнообразие, което подобрява способността на Tor да върне контрола върху сигурността и защитата на лична информация обратно във вашите ръце.

Ползване и разпространение на статията
Настоящата статия е превод на част от оригиналната документация на Tor, с автор Анелия Костова-Бозгунова.  Статията се разпространява при условията на Creative Commons – Attribution 3.0, което ви дава право свободно да използвате и променяте произведението, стига да запазите бележката относно автора на текста и превода.

Лично аз ви насърчавам и ще съм благодарен, ако публикувате цялата статия или връзка към нея, на колкото можете повече места.

Possibly Related Posts:


Slackware News: 17 Юни 2009

Новия ъпдейт включва нова версия на Mozilla Firefox и apr-util. Сменена е версията на aaa-base пакета на 13.0, което ни навежда на мисълта, че Slackware 13.0 ще излезе съвсем скоро.

a/aaa_base-13.0-noarch-1.txz:  Rebuilt.  Updated slackware-version.
a/e2fsprogs-1.41.6-i486-1.txz:  Upgraded.
a/ed-1.3-i486-1.txz:  Upgraded.
a/file-5.03-i486-1.txz:  Upgraded.
a/findutils-4.4.2-i486-1.txz:  Upgraded.
a/jfsutils-1.1.14-i486-1.txz:  Upgraded.
a/ntfs-3g-2009.4.4-i486-1.txz:  Upgraded.
a/usbutils-0.82-i486-1.txz:  Upgraded.
a/xfsprogs-3.0.1-i486-1.txz:  Upgraded.
ap/dmapi-2.2.10-i486-1.txz:  Upgraded.
ap/man-pages-3.21-noarch-1.txz:  Upgraded.
ap/sqlite-3.6.14.2-i486-1.txz:  Upgraded.
ap/xfsdump-3.0.1-i486-1.txz:  Upgraded.
d/git-1.6.3.2-i486-1.txz:  Upgraded.
d/m4-1.4.13-i486-1.txz:  Upgraded.
d/subversion-1.6.2-i486-1.txz:  Upgraded.
  Thanks to Robby Workman and Vincent Batts for work done on enabling the
  bindings for Python, perl, and Ruby.
kde/kdelibs-4.2.4-i486-2.txz:  Rebuilt.  Patched popupapplet.cpp to fix
  plasmaboard, a virtual keyboard for plasma.
l/apr-1.3.5-i486-1.txz:  Upgraded.
l/apr-util-1.3.7-i486-1.txz:  Upgraded.
  Fix underflow in apr_strmatch_precompile.
  Fix a denial of service attack against the apr_xml_* interface
  using the "billion laughs" entity expansion technique.
  For more information, see:
    http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-0023
    http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-1955
  (* Security fix *)
l/neon-0.28.4-i486-1.txz:  Upgraded.
l/sdl-1.2.13-i486-4.txz:  Upgraded.  Use SDL_image-1.2.7, and compile SDL
  without esd, as linking to esd breaks audio within VirtualBox.  Thanks to
  Luigi Trovato for the bug report.  Also, compile without arts support.
l/seamonkey-solibs-1.1.16-i486-2.txz:  Added.  This is a subset of the
  shared libraries from the seamonkey package used for runtime support of
  programs (such as rpm) on machines without X, or applications for X.
n/bluez-utils-3.36-i486-6.txz:  Rebuilt.  Edited rc.bluetooth to start hidd
  before any other bluetooth service.  This avoids an address conflict that
  can cause devices to fail to reconnect if the connection is lost.
  Thanks to Heinz Wiesinger.
n/iptables-1.4.3.2-i486-1.txz:  Upgraded.
n/iw-0.9.14-i486-1.txz:  Upgraded.
n/lftp-3.7.14-i486-1.txz:  Upgraded.
xap/mozilla-firefox-3.0.11-i686-1.txz:
  Upgraded to firefox-3.0.11.
  This fixes some security issues.
  For more information, see:
    http://www.mozilla.org/security/known-vulnerabilities/firefox30.html
  (* Security fix *)
xap/seamonkey-1.1.16-i486-2.txz:  Rebuilt.
xap/xfce4-power-manager-0.6.6-i486-1.txz:  Upgraded.
xap/xine-lib-1.1.16.3-i686-6.txz:  Rebuilt.  Use i686 arch, not i486.
extra/tightvnc/tightvnc-1.3.10-i486-1.txz:  Added.
+--------------------------+

Possibly Related Posts:


KDE 4.2.4 CornRow

От KDE не спират да ни изненадват тези дни. Днес беше пуснато KDE 4.2.4. KDE 4.2.4 се препоръчва на всички, които са чакали до сега да пробват KDE 4.2.

За момента изглежда, че от KDE  се опитват да концентрират всички усилия за следващата версия 4.3.0, която вече започва да се оформя, и е много верятно да няма KDE 4.2.5. Ако няма сериозни проблеми или дупки по сигурността, се очаква KDE 4.2.4 да е последната от KDE 4.2 сериите.
По-рано днес сорса е пуснат официално, което означава че скоро може да се очакват готови пакети.

Possibly Related Posts:


Slackware news: 16 Март 2009

Няколко дни след големия ъпдейт на – Current следва още един, само че този е по-малък. Changelog :

Mon Mar 16 00:11:40 CDT 2009
 ChangeLog bugs in the last update:
   eigen was removed, not moved from /testing.  This was intentional, as we
   are not aware of anything that has not moved to using eigen2 now.
   k3b was upgraded to k3b-r936571 in kde/, but does not seem to be stable.
   The installers were updated and now support ext4.
 a/cpio-2.9-i486-2.tgz:  Patched for new gcc version.
   Thanks to Fred Emmott.
 ap/foomatic-filters-4.0_20090315-i486-1.tgz:
   Upgraded to foomatic-filters-4.0_20090315.
   Thanks to Beej Jorgensen for pointing out this version with many bugfixes.
 d/gcc-4.3.3-i486-2.tgz:  Recompiled with --enable-libssp.  Removing that was
   a regression as there are binaries out there that expect to link with
   libspp.  If it causes any problems, let me know.
 d/gcc-g++-4.3.3-i486-2.tgz:  Recompiled.
 d/gcc-gfortran-4.3.3-i486-2.tgz:  Recompiled.
 d/gcc-gnat-4.3.3-i486-2.tgz:  Recompiled.
 d/gcc-java-4.3.3-i486-2.tgz:  Recompiled.
 d/gcc-objc-4.3.3-i486-2.tgz:  Recompiled.
 kde/kdebase-workspace-4.2.1-i486-2.tgz:  Recompiled against freetype-2.3.9,
   removed broken hicolor theme index.
 l/cairo-1.8.6-i486-2.tgz:  Recompiled against freetype-2.3.9.
 l/freetype-2.3.9-i486-1.tgz:  Upgraded to freetype-2.3.9.
   freetype-2.3.8 accidentally broke the ABI.  Binaries linked with 2.3.8 that
   use the FT_Get_PS_Font_Info function will need to be recompiled.
 l/hicolor-icon-theme-0.10-noarch-5.tgz:  Rebuilt.
 l/libcap-2.16-i486-1.tgz:  Upgraded to libcap-2.16.
 l/libwnck-2.24.2-i486-1.tgz:  Upgraded to libwnck-2.24.2.
 l/qt-r931082-i486-2.tgz:  Recompiled against freetype-2.3.9.
 n/iwlwifi-4965-ucode-228.57.2.23-fw-1.tgz:  Upgraded iwlwifi-4965-2.ucode
   firmware to version 228.57.2.23.
 x/compiz-0.7.8-i486-3.tgz:  Recompiled against libwnck-2.24.2.
 xap/pidgin-2.5.5-i486-1.tgz:  Upgraded to pidgin-2.5.5.
 xap/xfce-4.6.0-i486-2.tgz:  Recompiled against libwnck-2.24.2.
 xap/xfce4-power-manager-0.6.4-i486-2.tgz:  Patched to only start the power
   manager inside the Xfce environment.

Possibly Related Posts:


Етернет мостове с линукс

Какво е мост ?

Мостът свързва два мрежови сегмента, за да могат пакетите да преминават от единия сегмент в другия все едно са в една мрежа. Този процес се извършва на втория слой от OSI модела и не за виси от протокола, който се използва в мрежата. Обикновено, когато не използваме мостове, компютър с две мрежови карти би бил свързан към две различни мрежи. Въпреки че компютърът не маршрутизира пакети между двете мрежи, на всеки интерфейс би имало различен мрежов адрес и маска в зависимост от мрежата, в която е свързан. Когато ползваме мостове, и двата мрежови интерфейса са част от един и същ логически мрежов сегмент. Двата интерфейса могат да бъдат представени като един мостов интерфейс, а устройствата, свързани към двата мрежови сегмента ще получат адреси от една и съща мрежа.

Само пакетите, които трябва да минат от един сегмент в друг ще преминават физически от единия интерфейс към другия. Мостът ще научи MAC адресите на устройствата от двата сегмента, за да знае кои пакети трябва да се препредават към другия мрежов сегмент. Това прави мостовете полезни за намаляването на трафика като сегментираме мрежата по такъв начин, че в един сегмент е намират устройства, между които се предава голям обем данни. Днес почти всяка мрежа съдържа поне един суич. Суичът може да се разгледа като устройство, което има мост на всеки порт. Това означава, че когато се пренасят данни от един порт на друг данните не се предават и на всички останали портове.

Защо да използваме мостове?

Няма особено голям смисъл да използваме Линукс машина за мост или за суич при положение, че последните са доста по-евтини, тихи и ефективни. Освен това всеки интерфейс, които е конфигуриран на Линукс машина като мост трябва да работи в безразборен режим за да може да получава пакети, които не са предвидени за него. Това би повишило натоварването на машината. За това е добре да се ползва отделна машина като мост, а не такава която изпълнява и други функции.  Има работи които могат да се направят с линукс мостове, които не могат да се направят с обикновени суичове. Например мост между една мрежа и ppp интерфейс или мост между няколко частни мрежи.

Поддръжка на мостове в линукс

Поддръжка за мостове в линукс има във всички ядра след 2.4.0.

Конфигурация на ядрото

Ако използвате ядро, което е инсталирано с дистрибуцията която ползвате и не сте си го компилирали вие, има шанс да имате вече поддръжка за мостове в него. Много вероятно поддръжката да е включена като модул. В този случай трябва да заредите модула по този начин:


# modprobe bridge

Ако се налага да прекомпилирате ядрото уверете се че променливата ‘CONFIG_BRIDGE’  има присвоена стойност ‘y’ или ‘m’ по време на конфигурацията. Как да си компилирате ядро, не е част от обхвата на тази статия.

Допълнителни инструменти

Повечето дистрибуции имат пакет, които се казва ‘bridge-utils’. Пакетът съдържа командата ‘brctl’. Ако вашата дистрибуция няма такава команда можете да свалите сорса от тук.

Компилирането и инсталирането е доста лесно

# tar xzf bridge-utils-1.4.tar.gz
# cd bridge-utils-1.4
# ./configure --prefix=/usr/local
# make
# su
# make install

Създаване и използване на мостове

Като пример, нека си представим, че имаме два физически мрежови сегмента и искаме да ги обединим в една логическа мрежа. Имаме една машина, която е мостът, с два мрежови интерфейса eth0 и eth1. Освен това в двата сегмента имаме други машини.

bridge01

Преди да създадем моста, трябва да сме сигурни, че и двата интерфейса не са вдигнати и нямат мрежови адреси.


# ifconfig eth0 0 down
# ifconfig eth1 0 down

След това може да създадем мрежовия интерфейс. Използваме командата brctl ‘addbr’, която създава мостов интерфейс с име ‘br0′.


# brctl addbr br0

Няма ограничения за името на мостовия интерфейс, стига да няма вече такъв интерфейс със същото име. По принцип, обаче е добре да се  именуват br0, br1 и т.н.

След като сме създали мостовия интерфейс, към него трябва да добавим и реалните интерфейси като портове.


# brctl addif br0 eth0
# brctl addif br0 eth1

От тук нататък може да използваме мостовия интерфейс като всеки друг интерфейс в Линукс. Първото нещо което  трябва да направим е да му дадем мрежов адрес и да го вдигнем.


# ifconfig br0 10.1.9.1 netmask 255.255.255.0 broadcast 10.1.9.255 up

# ifconfig br0
br0 Link encap:Ethernet HWaddr 10:00:01:04:71:06
inet addr:10.1.9.1 Bcast:10.1.9.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:49 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:9442 (9.2 KiB)

Командата brctl има опция ‘show’ function, чрез която можем да видим състоянието на мостовите интерфейси на машината.


# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.100001047106 yes eth0 eth1

Нека да отбележим, че „bridge id“ се използва от Spanning Tree протокола, който е обяснен по-нататък.

В този момент би трябвало да имате ping от моста до клиенти от двата сегмента на мрежата.


bridge01:/# ping -c 1 -n 10.1.9.2
PING 10.1.9.2 (10.1.9.2) 56(84) bytes of data.
64 bytes from 10.1.9.2: icmp_seq=1 ttl=64 time=20.6 ms

bridge01:/# ping -c 1 -n 10.1.9.4
PING 10.1.9.4 (10.1.9.4) 56(84) bytes of data.
64 bytes from 10.1.9.4: icmp_seq=1 ttl=64 time=20.6 ms

Би трябвало също да имате връзка от единия сегмент до другия през моста.


linux01:/# ping -c 1 -n 10.1.9.5
PING 10.1.9.5 (10.1.9.5) 56(84) bytes of data.
64 bytes from 10.1.9.5: icmp_seq=1 ttl=64 time=20.6 ms

По-важното е, че трябва да се вижда като трафик между две усторйства в един мрежов сегмент. Това може да се провери по следния начин. Пускаме tcpdump на една машина и пращаме ICMP от втора машина към трета. Първата машина е в единия сегмент а другите две са в другия сегмент.


linux03:/# tcpdump -n -i eth0 icmp

linux01:/# ping -n 10.1.9.3
PING 10.1.9.3 (10.1.9.3) 56(84) bytes of data.
64 bytes from 10.1.9.3: icmp_seq=1 ttl=64 time=20.6 ms

Ако мостът работи правилно машината, на която сме пуснали tcpdump, не трябва да вижда трафика между другите две, въпреки че се намират в един и същ логическа мрежа.

От друга страна ако пратим ICMP пакет на broadcast адреса на мрежата, моста трябва да до предаде и във другия сегмент.


linux01:/# ping -c 1 -b 10.1.9.255
WARNING: pinging broadcast address
PING 10.1.9.255 (10.1.9.255) 56(84) bytes of data.
64 bytes from 10.1.9.2: icmp_seq=1 ttl=64 time=0.251 ms

linux03:/# tcpdump -n -i eth0 icmp
tcpdump: listening on eth0
19:39:48.273806 10.1.9.2 > 10.1.9.255: icmp: echo request (DF)
19:39:48.273965 10.1.9.4 > 10.1.9.2: icmp: echo reply
19:39:48.274582 10.1.9.5 > 10.1.9.2: icmp: echo reply

Важно е да се спомене, че ако не бяхме дали мрежов адрес на моста, той пак щеше да работи, но нямаше да може да участва в комуникацията от по-високо ниво от layer 2.

С командата ‘showmacs’ можем да видим MAC адресите на устройствата в мрежата и на кой порт са свързани.


bridge01:/# brctl showmacs br0
port no mac addr is local? ageing timer
2 10:00:01:02:24:04 no 0.49
1 10:00:01:02:95:35 no 0.98
1 10:00:01:02:34:56 no 3.84
2 10:00:01:03:26:02 no 9.19
1 10:00:01:03:73:03 yes 0.00
2 10:00:01:04:71:06 yes 0.00

Този списък показва MAC адресите на шест устройства свързани в мрежата. Периода откакто мостът е видял пакет от определен MAC адрес се нарича Ageing Time. След определено време мостът ще премахне адреса от своя списък. Това осигурява актуална таблица ако има устройства, които се местят от един порт на друг.

Времето, което мостът да държи записа за адреса в таблицата си, може да се конфигурира с ‘setageingtime’ командата:


# brctl setageingtime br0 40

Това ще накара мостът да премахва адреси от таблицата си след 40 секунди.

Премахване на мостови портове и мостови интерфейси

Ако ви се налага да пременете порт от моста, можете да го направите така :


# brctl delif br0 eth1

Ако искате да премахнете мостът изцяло трябва да използвате ‘delbr’, но трябва да свалите интерфейса преди да направите това.


# ifconfig br0 down
# brctl delbr br0

Spanning Tree протоколът

Spanning Tree Protocol (STP) се използва от суичове, когато в мрежата между тях има повече от един път. По принцип ако суича или моста, които направихме по-горе може да представлява сериозна проблем за нашата мрежа. Например, ако има повреда в устройството, двете части на сегмента няма да могат да комуникират помежду си. Това може коригира когато се добави втори мост. STP позволява тези два моста да комуникират и да се „разберат“, кой да е активен и кок пасивен. Активния мост пренасочва всички пакети, докато пасивния не прави нищо докато няма проблем с активния.

STP е доста сложен протокол и не може да бъде покрит в такава статия затова ще разгледаме само основите на протокола.

Както се уверихме по-рано всеки мост има уникален осем битов номер. Първите два байта представляват приоритета на моста, които могат да се променят ръчно, а следващите шест са MAC адреса на моста. Под Линукс приоритета по подразбиране е 32768. MAC адреса на моста се избира да е този с най-малка стойност от всички MAC адреси на машината. Например 8000.100001037303 е номера на моста с приоритет 32768 (8000 hex) и MAC адрес 10:00:01:03:73:03.

В мрежа с много мостове мостът с най-малък номер се избира да бъде главен(root bridge). Главния мост определя приоритета за всеки дублиращ се път в мрежата. Когато се получат зацикяния между мостове с дублиращи се връзки, някои от портовете трябва да преминато в „blocking“ режим. Това означава, че тези портове няма да предават повече пакети.

По принцип под линукс STP протоколът е изключен по подразбиране. Може да проверите дали е включен или изключен с командата „brctl show br0″, а режима може да се сменя така :


# brctl stp br0 on

или


# brctl stp br0 off

За да получите повече информация за настройките на STP на моста може да ползвате командата „showstp“:


bridge01# brctl showstp br0
br0
bridge id 8000.100001037303
designated root 8000.100001037303
root port 0 path cost 0
max age 20.00 bridge max age 20.00
hello time 2.00 bridge hello time 2.00
forward delay 15.00 bridge forward delay 15.00
ageing time 300.00
hello timer 0.17 tcn timer 0.00
topology change timer 0.00 gc timer 0.00
flags

eth0 (1)
port id 8001 state forwarding
designated root 8000.100001037303 path cost 100
designated bridge 8000.100001037303 message age timer 0.00
designated port 8001 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags

eth1 (2)
port id 8002 state forwarding
designated root 8000.100001037303 path cost 100
designated bridge 8000.100001037303 message age timer 0.00
designated port 8002 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags

Това, което виждаме е че моста е главен мост за мрежата(погледнете „bridge id“ и „designated root“) и освен това и двата му интерфейса предават пакети. Ако пуснем същата команда на втория мост, ще видим някой различия:


bridge02# brctl showstp br0
br0
bridge id 8000.100001087423
designated root 8000.100001037303
root port 1 path cost 100
max age 20.00 bridge max age 20.00
hello time 2.00 bridge hello time 2.00
forward delay 15.00 bridge forward delay 15.00
ageing time 300.00
hello timer 0.00 tcn timer 0.00
topology change timer 0.00 gc timer 238.59
flags

eth1 (1)
port id 8001 state forwarding
designated root 8000.100001037303 path cost 100
designated bridge 8000.100001037303 message age timer 18.63
designated port 8001 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags

eth2 (2)
port id 8002 state blocking
designated root 8000.100001037303 path cost 100
designated bridge 8000.100001037303 message age timer 18.63
designated port 8002 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags

Моста има номер 8000.100001087423, но полето designated root показва номера на другия мост. Това е така понеже само един мост може да бъде главен в една мрежа. Освен това виждаме, че единия от портовете му не предава пакети. Това е смисъла на STP протокола. Той предпазва мрежата от зацикляне на пакети междъ мостове. Ако мостът получи пакети, които трябва да бъдат предадени на друд мрежов сегмент, той ще ги игнорира понеже дргуя мост ще ги обработи.

Ако, по някаква причина, искате да смените приоритета на мост, можете да го направите с ‘setbridgeprio’ командатаcommand. Тук сменяме приоритета на 4096 (1000 hex).


# brctl setbridgeprio br0 4096

Сега можем да се уверим, че номера на моста се е сменил.


# brctl show
bridge name bridge id STP enabled interfaces
br0 1000.100001047106 yes eth0
eth1

Възможно е да се слага приоритет и на порт. Това може да е нужно, когато по-бавния порт е избран за главен вместо по-бързия и искате да промените това.


# brctl setportprio br0 eth1 50

В зависимост от топологията на мрежата някой мостови портове може да си сменят режима от „forwarding“ в „blocking“. Това се случва когато чсто от мрежата е недостижима, но би трябвало бързо да се стабилизира.

За повече информация относно Spanning Tree протоколът: IEEE 802.1D specification.

Заключение

След като сте прочели тази статия може да експериментирате с по-слжни конфигурации. Това може да ви е полезно ако имате много виртуални машини и трябва да свържите мрежите, в които се намират те с мостове. Така можете да направите сравнително сложни топологии.

Possibly Related Posts: