An explantion of the example /var/lib/tftpboot/pxelinux.cfg/default:

  • DEFAULT vesamenu.c32 — We are informing PXELINUX to load this file. We could substitute a menu entry instead, or boot a kernel and initrd.
  • TIMEOUT 600 — 600 seconds will pass before action is taken on the users behalf if no keys are pressed
  • ONTIMEOUT — Indicates what action is performed when the TIMEOUT expires. In the above example, we are loading the menu itemBootLocal. If after 5 minutes the user does not choose a menu item, the system will attempt to boot to a local hard disk.

  • PROMPT 0 — Will allow PXELINUX to prompt us for input
  • MENU INCLUDE pxelinux.cfg/pxe.conf — Load additional configuration options from another file. The can be included in the same file, however, I find it a neater look to the menu configuration to place some options in other files.
  • NOESCAPE 1 — Do not allow the user to escape out of the menu system.
  • MENU BEGIN — Start a new menu
  • MENU TITLE — Display title for menu
  • LABEL — Refer to this menu by label
  • MENU LABEL — Display title for label
  • TEXT HELP — Optional text displayed on screen when highlighted
  • ENDTEXT — End of optional text
  • MENU SEPARATOR — Inserts a blank non-selectable line
  • MENU INCLUDE — Include items from another file and create a menu from them. This is used to create the sub-menus
  • MENU END — End of a menu item

Example pxelinux.cfg/pxe.conf:

MENU TITLE  PXE Server
MENU BACKGROUND pxelinux.cfg/logo.png
NOESCAPE 1
ALLOWOPTIONS 1
PROMPT 0
menu width 80
menu rows 14
MENU TABMSGROW 24
MENU MARGIN 10
menu color border               30;44      #ffffffff #00000000 std

The above pxe.conf file is configuring

  1. The colors used
  2. The width
  3. The number of items displayed
  4. The backgroud image

 

 

https://help.ubuntu.com/community/PXEInstallMultiDistro

Для исключения из обновления пакетов

 
echo "packageName hold" | dpkg --set-selections
echo "lighttpd hold" | dpkg --set-selections

 

При периодическом обновлении системы, начинают скапливаться старые версии ядер, которые висят в загрузке Grub и занимают место на Вашем HDD.

Выведем все ядра, которые присутствуют в системе:

$ dpkg -l | grep linux-image
ii linux-image-2.6-686  2.6.32+28  Linux 2.6 for modern PCs (meta-package)
ii  linux-image-2.6.26-2-686  2.6.26-26lenny1  Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4
ii  linux-image-2.6.32-5-486  2.6.32-29 Linux 2.6.32 for old PCs
ii  linux-image-2.6.32-5-686  2.6.32-29 Linux 2.6.32 for modern PCs

Последняя строчка – текущее ядро, т.е. 2.6.32-5-686. Остальные можно удалять.
Удаляем ядро:

$ aptitude purge linux-image-2.6.26-2-686

Вторым шагом уничтожаем ненужные заголовки. Делаем по аналогии:

$ dpkg -l | grep linux-headers
ii  linux-headers-2.6.32-5-686  2.6.32-29 Header files for Linux 2.6.32-5-686
ii  linux-headers-2.6.32-5-common 2.6.32-29 Common header files for Linux 2.6.32-5

Соответственно удаляем ненужные заголовки, если они есть (у меня их нет, поэтому здесь просто показываю пример команды для их удаления):

$ aptitude purge linux-headers-2.6.32-24 linux-headers-2.6.32-24-generic

После всего делаем обновление загрузчика Grub, чтобы ядра пропали из списка загрузки:

$ update-grub

Multicast (англ. групповая передача) — специальная форма широковещания, при которой копии пакетов направляются определённому подмножеству адресатов. Технология IP Multicast использует адреса с 224.0.0.0 до 239.255.255.255. Поддерживается статическая и динамическая адресация. Примером статических адресов являются 224.0.0.1 — адрес группы, включающей в себя все узлы локальной сети, 224.0.0.2 — все маршрутизаторы локальной сети. Диапазон адресов с 224.0.0.0 по 224.0.0.255 зарезервирован для протоколов маршрутизации и других низкоуровневых протоколов поддержки групповой адресации. Остальные адреса динамически используются приложениями. Для определения членов различных групп в локальной сети маршрутизатор использует протокол IGMP. Один из маршрутизаторов подсети периодически опрашивает узлы подсети, чтобы узнать, какие группы используются приложениями узлов. На каждую группу генерируется только один ответ в подсети. Для того чтобы стать членом новой группы, узел получателя инициирует запрос на маршрутизатор локальной сети. Сетевой интерфейс узла-получателя настраивается на прием пакетов с этим групповым адресом. Каждый узел самостоятельно отслеживает свои активные групповые адреса, и когда отпадает необходимость состоять в данной группе, прекращает посылать подтверждения на IGMP — запросы. Результаты IGMP — запросов используются протоколами групповой маршрутизации для передачи информации о членстве в группе на соседние маршрутизаторы и далее по сети.

VLC media player (первоначально от VideoLAN Client) — это свободный медиаплеер.
Программа работает на большинстве современных операционных систем, в частности на:
* GNU/Linux
* BSD (FreeBSD, NetBSD, OpenBSD, Apple Darwin, Mac OS X)
* Solaris
* и других разновидностях UNIX…
* Семейство BeOS (BeOS, Zeta-OS, Haiku-OS)
* QNX
* MorphOS
* Microsoft Windows
* Microsoft Windows CE
Плеер VLC можно использовать в качестве сервера для трансляции потока аудио/видео по сети (поддерживает протоколы IPv4 и IPv6). Для воспроизведения файлов мультимедиа не требуется установка дополнительных кодеков, они уже «встроены» в программу. VLC может воспроизводить DVD и потоковое незашифрованное (бесплатное) видео (IPTV) и Интернет-радио. Также программа может записывать потоковое аудио/видео на компьютер. VLC хорошо воспроизводит испорченные файлы.

Для вещания был выбран слабенький Pentium III 800MHz c 512 Mb RAM и с дисковой подсистемой в RAID1. На все это железо воздрузилась Gentoo Linux:

Portage 2.1.6.4 (default/linux/x86/2008.0, gcc-4.1.2, glibc-2.6.1-r0, 2.6.25-gentoo-r8 i686)
=================================================================
System uname: Linux-2.6.25-gentoo-r8-i686-Pentium_III_-Coppermine-with-glibc2.0
Timestamp of tree: Mon, 09 Feb 2009 22:15:02 +0000
app-shells/bash: 3.2_p39
dev-lang/python: 2.4.4-r13, 2.5.2-r7
dev-python/pycrypto: 2.0.1-r6
sys-apps/baselayout: 1.12.11.1
sys-apps/sandbox: 1.2.18.1-r2
sys-devel/autoconf: 2.13, 2.63
sys-devel/automake: 1.7.9-r1, 1.9.6-r2, 1.10.2
sys-devel/binutils: 2.18-r3
sys-devel/gcc-config: 1.4.0-r4
sys-devel/libtool: 1.5.26
virtual/os-headers: 2.6.27-r2


VLC был собран со следующими флагами:

media-video/vlc-0.9.7 USE="a52 aac ffmpeg hal libgcrypt mp3 mpeg ncurses stream x264 -X -aalib -alsa (-altivec) -arts -atmo -avahi -bidi -cdda -cddax% -cddb -cdio -dbus -dc1394 -debug -dirac -directfb -dts -dvb -dvd -esd -fbcon -flac -fluidsynth -fontconfig -ggi -gnome -gnutls -httpd -id3tag -jack -kate -libass -libcaca -libnotify -libsysfs -libv4l2 -lirc -live -lua -matroska -mmx -modplug -musepack -nsplugin -ogg -opengl -optimisememory -oss -pda% -png -pulseaudio -pvr -qt4 -remoteosd -rtsp -run-as-root% -samba -schroedinger -sdl -sdl-image -seamonkey -shout -skins -speex -sse -svg -svga -taglib -theora -truetype -twolame -upnp -v4l -v4l2 -vcdinfo -vcdx -vlm -vorbis -win32codecs -xinerama -xml -xosd -xv -zvbi (-vcd%)"

Соответственно можно поиграть флагами кому как хочется, обязателен флаг stream. Описание флагов можно подсмотреть командой equery u vlc из пакета gentoolkit. Единственное на что хочется обратить внимание, это флаг optimisememory. Собирал с ним 3 предыдущих версии, процесс за пару дней сжирал на 100% ресурсы процессора и умирал.

Для запуска я писал демона, который удалял старый плейлист, создавал новый и запускал собственно vlc в screen:
vlc -v /home/ftp/pub/playlist.m3u --sout '#standard{access=udp{ttl=15},mux=ts{tsid=22,pid-video=23,pid-audio=24,pid-pmt=25,use-key-frames},dst=[multcast ip]}' --random --loop --volume 100

Screen, а не демон, был выбран для паралельного запуска нескольких каналов, для более простого и удобного мониторинга процесса. PID'ы мне нужны чтобы STB и MidlleWare все правильно скушали. Файлы конвертировались в:

Формат : MPEG Video
Версия формата : Version 2
Настройка матрицы формата : Standard
Режим расчёта битрейта : Переменный
Битрейт : 7 762 Кбит/сек
Ширина : 1 920 пикс.
Высота : 1 080 пикс.
Соотношение кадра : 16/9
Частота кадров : 30,000 кадр/сек
Колориметрия : 4:2:0
Тип развёртки : Прогрессивная


Формат : MPEG Audio
Версия формата : Version 1
Профайл формата : Layer 2
Режим расчёта битрейта : Постоянный
Битрейт : 64,0 Кбит/сек
Канал(ы) : 2 канала(ов)
Частота : 44,1 КГц
Разрешение : 16 бит


Производительность:
up 70 days, 17:08, load average: 0.16, 0.17, 0.11

Загрузка сети:
30 second input rate 8718000 bits/sec, 801 packets/sec
30 second output rate 2000 bits/sec, 2 packets/sec

 

 

http://habrahabr.ru/post/51667/

С IPTV пришлось познакомиться поближе, когда в компании интернет-провайдера где я работал, решили организовать вещание IPTV. Выяснилось, что вещание осуществляется в linux и программой vlc, которая по слухам единственная в своем роде. Была установлена тарелка и DVB-карта SkyStar2, которая предположительно должна была без проблем заработать в linux'e. Так и было со всеми новыми машинами, где была установлена ubuntu server. На Debian заработало только после обновления ядра. Настройка прошла относительно легко, благо на то время уже было несколько статей на эту тему и документация к vlc была тоже очень полезна. После запуска начались некоторые проблемы с пропаданием звука и видео на каналах и другие проблемы, описанные ниже. После их появления были написаны скрипты, устраняющие эти проблемы. Сейчас на них работает 3 сервера с 5 dvb-картами в общей сложности и вещается 23 канала с 3х спутников. Под катом — перечисление проблем, которые могут появиться после запуска вещания IPTV через VLC в Linux и то как с ними бороться. Бороться будем с помощью bash.

Первоначальная настройка и запуск вещания IPTV хорошо описана в статье «Прием спутниковых тв каналов в linux».
Основные проблемы при вещании IPTV: утечка памяти и пропадание видео или звука в одном из каналов.

Утечка памяти

Проблема утечки памяти решается либо 1) перезагрузкой демона vlc раз в день или больше по необходимости через crontab либо 2) периодической проверкой свободной памяти и перезагрузкой демона при уменьшении сводной памяти до определенного значения.

1)
crontab:

 # Перезагружаем vlc в 3 часа ночи
0 3 * * * /usr/local/script/vlc_regular_reload.sh

vlc_regular_reload.sh:

#!/bin/bash
 echo "`date`;VLC regular reload" >> /var/log/vlc/vlc_restart.log
 /usr/local/script/vlc_starter.sh
chmod +x /usr/local/script/vlc_regular_reload.sh

2)
crontab:

#Проверяем каждые 5 минут
*/5 * * * * /usr/local/script/memory_check.sh

memory_check.sh:

#!/bin/bash
 #Получаем переменную свободной памяти
 free_mem=$(free -m | grep ^M | awk -F' ' '{print $4 }')
 #Указываем предельное значение свободной памяти
 mem_limit=16
 #Если свободной памяти меньше или же она совпадает со значением предела то происходит перезагрузка демона
 if [ $free_mem -le $mem_limit ]
 then
 echo "`date`;Memory Overload" >> /var/log/vlc/vlc_restart.log
 /usr/local/script//vlc_starter.sh
 fi
 chmod +x /usr/local/script/memory_check.sh

Пропадание видео или звука

Для решения проблемы необходимо периодически проверять наличие видео и звука в каналах.
Реализация скриптов на примере вещания двух каналов. Вещание идет в два потока — оригинального и сжатого. Иногда помогает перезагрузка проблемного канала, но иногда необходима полная перезагрузка демона.

Для работоспособности скрипта необходимо запустить следующие команды:

cp /usr/bin/vlc /usr/bin/vlc2
 touch /home/desecho/vlc/run.sh
 chmod +x /home/desecho/vlc/run.sh

Скрипт запуска и перезагрузки каналов:

vlc_starter.sh:

#!/bin/bash
 echo "`date`;Reloaded" >> /var/log/vlc/vlc_restart.log
#Выключаем все запущенные vlc процессы
 killall -9 vlc
 #Запуск вещания
 vlc --no-stats -vvv --color --daemon --ttl 12 --ts-es-id-pid --dvb-adapter0 --programs=13,14 dvb: --dvb-frequency=10995000 --dvb-srate=20000000 --dvb-voltage=13 --sout'#duplicate{dst=std{access=http,mux=asf,url=0.0.0.0:8001},select="program=13",dst=std{access=http,mux=asf,url=0.0.0.0:8002},select="program=14"}'
 #Ждем несколько секунд для инициализации вещания
 sleep 5
 #Вещаем сжатый поток в 820Kbit/s видео и 70Kbit/s аудио
 vlc http://127.0.0.1:8001 -vvv --daemon --color --sout '#transcode{vcodec=mp4v,vb=820,scale=1,acodec=mpga,ab=70,channels=1}:duplicate{dst=std{access=http,mux=asf,url=0.0.0.0:8011}'
 vlc http://127.0.0.1:8002 -vvv --daemon --color --sout '#transcode{vcodec=mp4v,vb=820,scale=1,acodec=mpga,ab=70,channels=1}:duplicate{dst=std{access=http,mux=asf,url=0.0.0.0:8012}'
 chmod +x /usr/local/script/vlc_starter.sh

Скрипт проверки каналов:
vlc_restarter.sh:

#!/bin/bash
 #Запись канала
 #$1 - id порта сжатого канала
 function rec {
 #Запись видео
 b="vlc2 http://127.0.0.1:80$1 -vvv --color --daemon --noaudio --sout '#duplicate{dst=std{access=file,mux=asf,dst="/home/desecho/vlc/0$1.avi"}}'"
 #Создание временного исполняемого файла - такой способ необходим из-за наличия в строке запуска vlc различных ковычек
 echo $b > /home/desecho/vlc/run.sh
 /home/desecho/vlc/run.sh
 #Запись аудио
 b="vlc2 http://127.0.0.1:80$1 -vvv --color --daemon --novideo --sout '#duplicate{dst=std{access=file,mux=asf,dst="/home/desecho/vlc/0$1.mp3"}}'"
 echo $b > /home/desecho/vlc/run.sh
 /home/desecho/vlc/run.sh
 sleep 5
 killall -9 vlc2
 }
#Полная перезагрузка vlc
 #$1 - имя канала
 function reload {
 echo "`date`;$1 - Reload" >> /home/desecho/vlc/logs/vlc_restart.log
 /home/desecho/vlc/vlc_starter.sh
 }
#Проверка канала
 #$1 - id порта сжатого канала
 #$2 - имя канала
 function check {
 #Смотрим размер видео
 y="$(du /home/desecho/vlc/0$1.avi | grep -oE --regexp='[0-9]+' | sed -n '1p')"
 #Проверяем пустой ли файл
 if [ $y -gt 10 ] ; then
 x011=1
 else
 x011=0
 fi
 #Смотрим размер аудио
 y="$(du /home/desecho/vlc/0$1.mp3 | grep -oE --regexp='[0-9]+' | sed -n '1p')"
 if [ $y -gt 10 ] ; then
 x012=1
 else
 x012=0
 fi
 echo "    $2 - $x011 $x012" >> /home/desecho/vlc/logs/vlc_restart.log
 let x01=x011+x012
 #Если отсутствует звук или видео, то переменная z=0
 if [ $x01 != 2 ]
 then
 z=0
 else
 z=1
 fi
 }
#Полная проверка
 #$1 - id порта сжатого канала
 #$2 - имя канала
 function check_full {
 #Запись канала
 rec $1
 #Проверка на отсутствие видео или звука
 check $1 $2
 #Если видео и звук в норме то помечаем переменную z канала
 if [ $z = 1 ] ; then
 z[$1]=1
 fi
 }
#Перезагрузка канала
 #$1 - id порта сжатого канала
 #$2 - имя канала
 #$3 - id порта исходного канала
 function restart {
 echo "`date`;$2 - Restart" >> /home/desecho/vlc/logs/vlc_restart.log
 #Выключение неработающего канала
 a="$(ps -C vlc -o '%p%a' | grep "http://127.0.0.1:80$3 -vvv --daemon --color --sout" | grep -oE --regexp='[0-9]+' | sed -n '1p')"
 kill $a
 #Перезапуск вещания канала
 b="vlc http://127.0.0.1:80$3 -vvv --daemon --color --sout '#transcode{vcodec=mp4v,vb=820,scale=1,acodec=mpga,ab=70,channels=1}:duplicate{dst=std{access=http,mux=asf,url=0.0.0.0:80$1}'"
 echo $b > /home/desecho/vlc/run.sh
 /home/desecho/vlc/run.sh
 }
#Перезагрузка канала
 #$1 - id порта сжатого канала
 #$2 - имя канала
 #$3 - id порта исходного канала
 function fix {
 #Если нет видео или звука на канале то перезагружается канал
 if [ ${z[$1]} != 1 ] ; then
 restart $1 $2 $3
 sleep 5
 #повторная проверка
 check_full $1 $2
 fi
 #Если по прежнему нет звука то перезагружаем VLC полностью
 if [ ${z[$1]} != 1 ] ; then
 reload $2
 exit
 fi
 }
 #Присваиваем значение 0 по умолчанию переменным z каналов
 z[11]=0
 z[12]=0
#Проверка канала на отсутствие видео/звука
 check_full 11 perviy
 #Перезагрузка канала при проблемах с видео/звуком
 fix 11 perviy 01
check_full 12 rossiya
 fix 12 rossiya 02
echo "`date`;DVB - Status: Stable" >> /home/desecho/vlc/logs/vlc_restart.log
 chmod +x /usr/local/script/vlc_restarter.sh

Осталось добавить запись в crontab:

*/5 * * * * /usr/local/script/vlc_restarter.sh

В итоге получаем систему, которая автоматически восстановит вещание каналов при пропадании видео или аудио. Все действия скриптов восстановления вещания будут писаться в лог файл.
Удачного вещания!

Для нейтрализации утечки памяти можно собрать vlc без флага «optimisememory» либо попробовать обновить vlc, см. статью
«Вещание видеофайлов с помощью VLC multicast. С теорией».

http://habrahabr.ru/post/66351/

Кратко, rootkit — это набор программ призванный спрятать некую негативную деятельность или присутствие взломщика в системе.

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

Установка rkhunter

Будем устанавливать rkhunter 1.4.0 под Debian 7.

В общем-то, установка не должна составить трудностей, так как оказалось, что rkhunter версии 1.4.0-1 есть в официальных репозиториях Debain 7. Устанавливаем:

# apt-get install rkhunter

Либо можно установить вручную скачав архив с официального сайта:

cd ~ wget http://sourceforge.net/projects/rkhunter/files/rkhunter/1.4.0/rkhunter-1.4.0.tar.gz tar xfz rkhunter-1.4.0.tar.gz cd rkhunter-1.4.0 sh installer.sh --layout default --install

Вывод последней команды:

Checking system for:
Rootkit Hunter installer files: found
A web file download command: wget found
Starting installation:
Checking installation directory «/usr/local»: it exists and is writable.
Checking installation directories:
Directory /usr/local/share/doc/rkhunter-1.4.0: creating: OK
Directory /usr/local/share/man/man8: creating: OK
Directory /etc: exists and is writable.
Directory /usr/local/bin: exists and is writable.
Directory /usr/local/lib: exists and is writable.
Directory /var/lib: exists and is writable.
Directory /usr/local/lib/rkhunter/scripts: creating: OK
Directory /var/lib/rkhunter/db: creating: OK
Directory /var/lib/rkhunter/tmp: creating: OK
Directory /var/lib/rkhunter/db/i18n: creating: OK
Installing check_modules.pl: OK
Installing filehashsha.pl: OK
Installing stat.pl: OK
Installing readlink.sh: OK
Installing backdoorports.dat: OK
Installing mirrors.dat: OK
Installing programs_bad.dat: OK
Installing suspscan.dat: OK
Installing rkhunter.8: OK
Installing ACKNOWLEDGMENTS: OK
Installing CHANGELOG: OK
Installing FAQ: OK
Installing LICENSE: OK
Installing README: OK
Installing language support files: OK
Installing rkhunter: OK
Installing rkhunter.conf: OK
Installation complete

Прочие параметры инсталлятора rkhunter вы можете узнать воспользовавшись командой:

sh installer.sh --help

Каким способом установки пользоваться — решать вам. Первый способ проще, второй потенциально позволяет установить более свежую версию.

Также стоит установить программу unhide, которая позволяет искать скрытые процессы и порты:

apt-get install unhide

Настройка rkhunter

Будем считать, что использовали способ установки из репозитория.

Конфигурационные файлы:

/etc/default/rkhunter — можно настроить периодические задачи (обновление, проверка, отчеты),
/etc/rkhunter.conf — основной конфигурационный файл

Справочная информация может быть найдена в директории /usr/share/doc/rkhunter и с помощью команды man rkhunter. Кое-какие скрипты есть в директории /usr/share/rkhunter.

Параметры, которые можно задать в /etc/default/rkhunter (параметры могут принимать значения true или false):

CRON_DAILY_RUN="« — по умолчанию значение true. Позволяет ежесуточно запускать проверку.
CRON_DB_UPDATE=»" — по умолчанию значение true. Позволяет включить еженедельные обновления баз.
DB_UPDATE_EMAIL="false" — отправлять ли отчеты об еженедельном обновлении баз. По умолчанию — false.
REPORT_EMAIL="root" — адрес электронной почты, куда отправлять отчеты. По умолчанию — root.
APT_AUTOGEN="false« — позволяет включить автоматическое обновление баз.
NICE=»0" — позволяет управлять приоритетом процесса.
RUN_CHECK_ON_BATTERY="false" — следует ли проводить автоматические проверки в случае работы компьютера от батареи.

В /etc/rkhunter.conf можно поправить следующие настройки:

PKGMGR=DPKG — судя по документации, в Debian данный параметр особого эффекта не дает, так что можно оставить по умолчанию.
DISABLE_TESTS="apps" — отключает проверку актуальности версий софта, с этим прекрасно справляются разработчики Debian.
SUSPSCAN_DIRS="/tmp /var/tmp" — указываем в какой директории искать подозрительные файлы.
OS_VERSION_FILE="/etc/debian_version" — где искать файл с версией ОС.
USE_LOCKING=1 — позволяет спользовать блокировку для защиты от ошибок в случае если запущено несколько процессов rkhunter в Debian. Может пригодиться, если вы запускаете rkhunter автоматически с помощью cron.
DISABLE_UNHIDE=2 — отключает использование утилиты unhide.rb написанной на ruby.

Подготовка rkhunter к первому поиску руткитов

Перед выполнением проверки нужно выполнить два действия.

Прежде всего, необходимо создать базу знаний о текущих файлах, чтобы потом было с чем сравнивать. То есть необходимо быть уверенным, что система чистая. Лучшим вариантом будет выполнить это действие сразу после настройки системы. База создается командой:

rkhunter --propupd

Базу можно будет найти по следующему пути: /var/lib/rkhunter/db/rkhunter.dat

Далее требуется обновить базу знаний, содержащую, в том числе, информацию о новых руткитах. Следует выполнить после предыдущей операции и перед первой проверкой. Стоит периодически обновлять базу знаний, но это можно делать не слишком часто. Команда:

rkhunter --update

Первый запуск

rkhunter -c -sk

Результат:

System checks summary
=====================

File properties checks...
Files checked: 135
Suspect files: 0

Rootkit checks...
Rootkits checked : 309
Possible rootkits: 0

Applications checks...
All checks skipped

The system checks took: 6 minutes and 21 seconds

All results have been written to the log file (/var/log/rkhunter.log)

One or more warnings have been found while checking the system.
Please check the log file (/var/log/rkhunter.log)

На самом деле вывод более подробный, представлена только финальная часть. Как видно, лог можно найти по пути /var/log/rkhunter.log

Возможные ключи

Команды

-c, --check — выполнить поиск руткитов, результат будет выведен на стандартный вывод, а также в лог-файл.
--unlock — эта комманда просто удаляет lock-файл.
--update — будет произведена проверка на наличие обновления базы знаний. Для работы данной команды требуется, чтобы в системе был установлен один из браузеров командной строки, к примеру, wget или lynx. Желательно выполнять данную команду с некой периодичностью. При использовании в cron стоит использовать также опцию --nocolors.
--propupd [{filename | directory | package name},...] — команда позволяющая добавить в базу данных о файлах системы информацию о файле, всех файлах в директории или пакете. Это необходимо для работы одного из тестов, который сравнивает файл в текущем состоянии с тем, которое было при создании базы. Помните, добавляемый в базу файл должен быть заведомо не зараженным.
--versioncheck — эта команда заставляет rkhunter проверить наличие новой версии программы для поиска руткитов. Браузер командной строки должен присутствовать в системе. Если используется в cron желательно использовать опцию --nocolors.
--list [tests | {lang | languages} | rootkits | perl | propfiles] — эта команда выводит некоторые поддерживаемые возможности программы. Tests — выведет названия доступных тестов, languages — покажет поддерживаемые языки, rootkits — отобразит списки руткитов из базы rkhunter. Perl — выведет список модулей perl которые могут понадобиться в работе rkhunter, список этот не обязательный, но желательный. Установить модули perl можно с помощью команды cpan или утилиты dh-make-perl, которую нужно устанавливать отдельно. propfiles — отобразит список имен файлов, которые использовались для генерации базы файлов. Если никаких опций не задано, то будут показаны все списки кроме propfiles.
-C, --config-check — будет проведена проверка конфигурационных файлов. Проверяются только включенные опции (enabled). Чтобы проверить все опции можно указать --enable all --disable none в командной строке.
-V, --version — будет выведена версия rkhunter.
-h, --help — эта команда отобразить экран с краткой справкой.

Параметры

Различных параметров достаточно много, поэтому мы посмотрим только часть из них. Те, которые показались автору статьи наиболее полезными.

--appendlog — в случае использования данного параметра лог /var/log/rkhunter.log будет дополнен, а не перезаписан. По умолчанию, после того, как rkhunter отработает, основной лог перезаписывается, а предыдущее его содержимое сохраняется в файле rkhunter.log.log, при чем, хранится только один.
--cs2 — основная цветовая схема рассчитана на черный фон. Если же результат будет выведен на экран с белым фоном, то можно использовать альтернативную цветовую схему.
--cronjob — при указании данного параметра будут использованы следующие опции: --check, --nocolors и --skip-keypress, а также не будет вывода в стандартный выход. Поэтому в сочетание с данным параметром можно использовать --report-warnings-only.
--display-logfile — после того, как rkhunter закончит свою работу вывести содержимое лога. Вообще говоря, лог содержит более подробную информацию о найденных проблемах.
--lang — можно указать на каком языке выводить информацию в процессе проверки. Список доступных языков можно получить командой rkhunter --list lang. По умолчанию используется английский.
--logfile [file] — позволяет переопределить файл в который будет писаться лог. При необходимости ничего не писать в лог, можно задать в качестве пути /dev/null.
--nocolors — этот параметр позволяет включить черно-белый режим вывода результатов работы.
--nolog — подавляет запись чего-либо в лог.
--quiet — подавляет любой вывод. Может быть полезно при проверке только кода выхода. То есть если rkhunter используется из скрипта, к примеру.
--report-warnings-only — при этом выводятся только предупреждения. Может быть полезно при запуске через cron. Таким образом, предупреждения будут видны при подключении к серверу с помощью KVM, к примеру.
--sk, --skip-keypress — по умолчанию rkhunter после некоторых наборов тестов просит нажать клавишу “Ввод”. Чтобы таких запросов не поступало можно использовать эту опцию.
--syslog [facility.priority] — по умолчанию в syslog ничего не пишется. Если требуется отмечать время начала и окончания тестирования, можно использовать данный параметр.
--verbose-logging — этот параметр может использоваться, чтобы некоторые тесты писали в лог более подробную информацию. Это может пригодиться для повторного прогона, когда не понятно из-за чего возникло предупреждение. Требует дополнительного времени.

Автоматический поиск руткитов

Чтобы rkhunter начал автоматически проверять систему ежесуточно (у меня проверка начинается в 6:25) достаточно в файле /etc/default/rkhunter установить значение параметраCRON_DAILY_RUN равным true. В данном случае будет использоваться следующая команда:

/usr/bin/rkhunter --cronjob --report-warnings-only --appendlog

Как мы помним, --cronjob подразумевает под собой параметры --check, --nocolors и --skip-keypress. То есть в данном случае rkhunter запускается для проверки системы в черно-белом режиме отображения, не запрашивает каких-либо нажатий клавиш, при этом в консоль выводятся только предупреждения и лог будет дописываться, а не перезаписываться. Так как со временем файл лога будет увеличиваться  в размере, то не забудьте настроить его ротацию.

Если же вы хотите проводить поиск руткитов по другому расписанию и с другими параметрами, то команду запуска можно добавить в cron вручную.

Организация отказоустойчивой системы хранения данных — это, естественно, RAID. Стоит дать некоторое определение RAID: избыточный (резервный) массив собранный из независимых дисков. Рассматривая возможности покупки аппаратных RAID массивов, всегда приходится сталкиваться с достаточно высокой ценой. Однако, при выборе хранилища данных можно рассмотреть и другие альтернативы. Так, например, одно из возможных решений может быть реализовано на Linux (Debian) с применением недорогих комплектующих. Вот такое решение программного RAID массива мы сегодня и рассмотрим.

Постановка задачи:

  • Организовать отказоустойчивую систему хранения данных;

Условия:

  • быстрое развёртывание;
  • лёгкое управление;
  • минимальные потери при аппаратных сбоях;
  • возможность быстрого ремонта (замены) при аппаратных сбоях;
  • низкая стоимость;

Условия, которые мы поставили вполне выполнимы если мы будем использовать программный RAID массив. Для решения этой задачи не требуется высокопроизводительного и дорогостоящего оборудования, а также платного программного обеспечения.

Решение:

  • системный блок с установленным необходимым количеством жёстких дисков (наверняка, в закромах найдется старенький системник, можно использовать и новый с SATA дисками. Все зависит от того, какой дисковый объем и какая надёжность вам нужна)
  • операционная система Linux (почему именно она? Просто сейчас занимаюсь именно ей. Она бесплатна, всегда можно найти информацию по настройке и внедрению, открытые исходные коды)

Установим ее и приступим к «творению».

 apt-get install mdadm

Во время установки система попросит параметры для обслуживания уже установленных массивов или для будущих. Чтобы не заморачиваться оставьте предложенные параметры по-умолчанию (all). Далее необходимо подготовить жёсткие диски для соединения в массив, определимся, что будем использовать массив класса RAID 1. Один из наиболее надежных (полное зеркалирование) и не дорогое решение.

root# fdisk /dev/sdb 
Command (m for help):n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-41610, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-41610, default 41610):
Using default value 41610

Раздел у нас создан. Посмотрим его параметры.

Command (m for help): p
Disk /dev/sdb: 21.4 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Disk identifier: 0xda185917
Device Boot Start End Blocks Id System
/dev/sdb1 1 41610 20971408+ 83 Linux

Индификатор созданного раздела — 83, это стандартный раздел Linux. Он нам не подходит. Его необходимо сменить на «fd» (linux raid autodetect). Полный список можно посмотреть указав «L» вместо «fd», потом система задаст повторный вопрос.

Command (m for help): t
Selected partition 1
Hex code (type L to list codes):fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Раздел создан, указан необходимый тип, для проверки можно ввести команду «p» и посмотреть результат, если все устраивает, то пора записать разделы на диск и приступить ко второму жёсткому диску.

Command (m for help): p
Disk /dev/sdb: 21.4 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Disk identifier: 0xda185917
Device Boot Start End Blocks Id System
/dev/sdb1 1 41610 20971408+ fd Linux raid autodetect
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

Аналогично готовим второй жёсткий диск

После завершения подготовки дисков можно приступать к непосредственному созданию массива. Создание RAID массива выполняется с помощью программы
mdadm (ключ --create). Добавим опцию --level, для указания типа RAID массива, который хотим получить, в нашем случае первого (1) уровня. С помощью ключа --raid-devices укажем устройства, поверх которых будет собираться RAID массив.

root#  mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdd1 
mdadm: size set to 20971328K
mdadm: array /dev/md0 started.

Если во время сборки не хватает физических дисков, но вы планируете добавить их позже, т.е. собрать не полный RAID массив (degraded) можно указать слово missing вместо имени устройства. Для RAID 5 это может быть только один диск, для RAID 6 — не более двух, для RAID 1 сколько угодно, но должен быть как минимум один рабочий. Массив создан, теперь необходимо убедится, что собранный RAID массив собран правильно.

root#  cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md0 : active (auto-read-only) raid1 sdd1[1] sdb1[0]       20971328 blocks [2/2][UU]          resync=PENDING unused devices: <none>

Система сообщает, что создан RAID 1 массив, в который входят два устройства - sdd1 и sdb1. Проверка состояния нашего массива показывает [UU] — означает, что все в порядке, а ([_U] или [U_] означает, что массив поврежден. Имя нашего RAID массива md0.

Файловая система создана, но она еще не готова принимать к размещению данных. Можно посмотреть статус массива.

root# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdd1[1] sdb1[0]
      20971328 blocks [2/2] [UU]
      [==>..................]  resync =10.7%(2260416/20971328) finish=8.4minspeed=36824K/sec
unused devices: <none>

Теперь нужно создать файл конфигурации нашего RAID массива. Система сама не запоминает какие RAID массивы ей нужно создать и какие компоненты в них входят. Эта информация находится в файле конфигурации mdadm.conf. Параметры, которые следует добавить в этот файл, можно получить при помощи команды mdadm --detail --scan --verbose.

root# mdadm --detail --scan --verbose 
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=00.90 UUID=ddddad18:ae4cb9be:cb5f3c5d:d16ad809
 devices=/dev/hdb1,/dev/hdd1

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

root# mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf 

Настройка уведомления о состоянии RAID массива по email

Создаем новые диски с использование LVM

Теперь все готово.