В серии TrinuxOid на SecurityLab.ru я хотел бы рассказать более подробно о мини-дистрибутивах (вроде Trinux или RTK), их плюсы и минусы, а также способы их успешного применения и использования. Начнем с самого начала - поговорим о процессе загрузки Trinux версий 0.71 и 0.80rc2.
Stalsen stalsen@trinux.atanor.ru http://trinux.atanor.ru
В серии TrinuxOid на SecurityLab.ru я хотел бы рассказать более подробно о мини-дистрибутивах (вроде Trinux или RTK), их плюсы и минусы, а также способы их успешного применения и использования. Начнем с самого начала - поговорим о процессе загрузки Trinux версий 0.71 и 0.80rc2.
Давайте посмотрим, как создается сам образ и что туда добавляют. Сердце самой системы - это ядро, в обычном виде оно занимает намного больше, чем емкость всей дискеты и естественно его предется всячески урезать, вот например зачем тринуксоиду поддержка звука (да и прочей мультимедии), скази, всякиз файловых систем и пр. Это ведь можно загрузить через модули, главное включить такую функцию в ядре. Кому очень интересно посмотреть его конфиги, пора идти на www.trinux.org (или на trinux.atanor.ru для РТК). У Мэтью (создателя трунукса) ядра получаются примерно на 590 Кб!
Далее сжатый виртуальный диск, не менее важная часть. Он содержит дерево каталогов, основных команд и библиотек, без которых невозможно нормально работать. При загрузке раздел Тринукса создается в виртуальной/временной памяти машины (RAM), так что данные невозможно сохранить и чтобы вы не делали, после каждого ребута их не будет... Если вам срочно нужно что-то записать (например логи сканирования), то можете подключить любой раздел жесткого диска и писать туда (только естественно надо знать, какая файловая система на партишине, если например NTFS - придется качать модуль, если MS-DOS/FAT - качать ничего не надо, вообще модули можно подключать во время загрузки системы, добавив их на дискету/ы и в скрипт/ы, либо во время работы системы, монитровав диск с модулем и написав insmod [modname].o).
Естественно все это само зупускаться не будет, нужен загрузщик, по дефолту используется syslinux (хотя вполне подошел бы lilo (linux loader)). Финальными штрихами является дополнение основными пакетами, необходимыми для работы, а также help-файлом и лицензией.
Во первых для создания дискеты вам надо загрузить floppy image с trinux.sourceforge.net. Сразу говорю для счастливых пользователей Windows - Drag'n'Drop тут не прокатит. Нужен специализированный софт для записи образа, например RaWrite (можно найти на trinux.atanor.ru). Для UNIX-совместимых ОС достаточно набрать:
# dd if=[floppy_image] of=/dev/fd0И хочу заметить - Rawrite часто пишет с ошибками, то CRC, то I/O Error и т.д. Лучше используйте dd. В состав Trinux 0.70 входят два инсталяционных скрипта для UNIX и Windows. Процесс этот, собственно говоря, не занимает много времени. Вы скопировали систему, но нужна ли она без пакетов, модулей и прочих дополнений? Вот например нужно залезть на диск с NTFS под Win2k, на входе пароль, что делать? Конечно, загружаете тринукс, встявляете модуль (insmod ntfs.o), монтируйте диск и вперед. Все пакеты и модули можно найти на www.trinux.org или на trinux.atanor.ru.
"A:> syslinux a:" или из Линукса: "# syslinux /dev/fd0".После этого шага в корне загрузочной дискеты появится файл LDLINUX.SYS. По дефолту syslinux при "запуске" судорожно пытается найти ядро с именем LINUX (хотя в строке "boot:" можно быстренько написать имя нужного kernel'а, да и еще передать какие-нибудь параметры, например местонахождение сжатого виртуального диска, а то без него будет паника), конечно это можно изменить, используя конфиг файл, но об этом чуть позже. Далее следует краткая информация о Trinux, ее авторе и копирайтах (эта инфа берется из файла license boot-диска, который в свою очередь указан в конфиге загрузщика):
========================================================== Trinux: A Linux Security Toolkit http://trinux.sourceforge.net (C) 2000 Open Security Solutions ============================================================= Any original code in this distribution, as well as most of its source base, is free software, which can be redistributed and/or modified under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Trinux was originally released by Matthew Franz <mdfranz@io.com> in 1998, but many other folks have helped out along the way. See the Trinux Project Page on SourceForge <http://sourceforge.net/projects/trinux/> for more information about the project or to join support mailing lists. Links to most of the network security tools used by Trinux are available at http://www.opensec.net or at PacketStorm (http://packetstorm.securify.com). This version of Trinux relies up BusyBox (http://busybox.lineo.com). Trinux is developed using Slackware 7.x with the help of VMWare. ============================================Хотя данные этого сообщения время от времени меняются с течением версий (но думаю лицензия не изменится никогда) и появлется до боли знакомая строчка "boot:". Здесь вам предстоит выбрать image или просто ввести имя ядра (но, как я уже говорил, с дополнительными параметрами) для загрузки. Конфиг загрузщика находится в syslinux.cfg (на дискете):
------- syslinux.cfg --------- display license # понятное дело, выводит файл license promtp 1 # эта штука указывает выводить boot: и ждать ввода определенное количество времени (указанное в timeout) default floppy # по дефолту будет грузиться label floppy timeout 30 # процесс ожидания в десятых секунды (следовательно 0.3 сек) label floppy # имя данного image для ввода после boot: kernel bzimage # указывает месторасположение ярда. append initrd=initrd.gz root=/dev/ram0 pkg=tflp # append - передача специальных параметров ядру. # initrd - указывает на путь к сжатому виртуальному диску. # root - точка монтирования файловой системы. # pkg - способ загрузки пакетов. # Дальше уже все идет по аналогии: label cdrom kernel bzimage append initrd=initrd.gz root=/dev/ram0 pkg=tcd label network kernel bzimage append initrd=initrd.gz root=/dev/ram0 pkg=tnet label fixed append initrd=initrd.gz root=/dev/ram0 pkg=tfixОт вас зависит, что вы введете в строке boot: (это довольно логично, верно :-)?). Далее видим строки: Loading initrd.gz... Здесь распаковывается вирутальный диск, если открыть архив и посмотреть на initrd каким-нибудь текстовым редактором, то можно увидеть отрывки многих файлов. Чтобы все правильно изменить, вам нужно монтировать распакованный initrd:
# gzip -d initrd.gz # mount -o loop initrd /[точка-монтирования]Теперь переходите в /[точку-монтирования] и модифицируйте все по своему усмотрению. После размонтируйте устройство и упакуйте initrd:
# umount /[точку-монтирования] # gzip initrdА теперь можете положить его на дискету или слепить с ним новый образ. Loading bzimage... # загружается ядро, как я уже говорил, его конфиг можно найти на trinux.sourceforge.net/kernel/.
ln -sf /proc/self/fd/0 /dev/stdin ln -sf /proc/self/fd/2 /dev/stderr ln -sf /proc/self/fd/1 /dev/stdoutОпция [-sf] означает создать символические ссылки и убрать файлы назначения. Если в самом Тринуксе посмотреть на эти файлы, то все они линкуются с терминалом, на котором вы сидите (например tty1, tty2 etc.). Потом начининаются попытки найти девайсы для загрузки пакетов, такие как флоппи, UML, CD-ROM и если что-нибудь найдено, его адрес (например /dev/cdrom) записывается в переменную $BOOT и идет следующий код:
1-2. Уведомляет пользователя о найденном загрузочном девайсе и ядре, например: BOOT: /dev/fd0, KERNEL: 2.4.5
3-5. Если переменная $BOOT равна /dev/fd0 (дискета), тогда выводит используемую файловую систему vfat: BOOTFS: vfat.
6-8. В другом случае (то есть $BOOT не равен /dev/fd0) если переменная $UML существует, выводит BOOTFS: ext2.
10-12. И если ничего не найдено, ставится iso9660 (CD-ROM) с префиксом trinux/ (это стандартная корневая папка расположения пакетом на HDD/CD-R/RW).
13. После всех этих проверок выводится в STDOUT (на монитор) определенная файловая система (например если доступен флопик - vfat, если что-то найдено на cdrom'е - то iso9660).
Следующим шагом является выполнение init скрипта (специально создан для ввода ваших команд в начале загрузки, его можно найти по адресу tux/init/first загрузочной дискеты) и постороение RAM-диска, при успешной конфигурации увидите что-то вроде:
RAM is > 48 MB Creating /usr Creating /usr/local Creating /home --------------------FILESYSTEM CONFIGURATION--------------------- Filesystem 1k-blocks Used Available Use% Mounted on /dev/ram0 6076 1567 4509 26% / /dev/null 16000 0 16000 0% /usr /dev/null 8000 0 8000 0% /usr/local /dev/null 2000 0 2000 0% /home
if [ "$PKGSRC" = "/dev/fd0" ] then echo -n "Do you have a package disk? " read response until [ "$response" != "y" ] do if mount -t vfat -r /dev/fd0 /floppy then cd /floppy if ls *.o > /dev/null 2> /dev/null then echo "Copying modules from package disk" cp *.o /lib/modules 2> /dev/null fi for i in *.tgz do cd /floppy pkgadd $i done fiЭтот простой код проверяет значение переменной $PKGSRC, и если она равна /dev/fd0 то выводится: "Do you have a package disk?" и слушается ввод юзера, если вы ввели "у", то происходит монтирование дискеты, а также поиск и соответственно установку пакетов и модулей. Потом запускается несколько скриптов (они специально созданы для вашего редактирования), а также некоторые демоны и выводится сообщение:
"Welcome to Trinux: A Linux Security Toolkit" "Type 'man' for a list of help topics. ALT-<Left/Right>" "allows you to view other virtual terminals. "Если вы вдруг решили пересмотреть загрузочные сообщения ядра, воспользуйтесь командой dmesg (попрошу заметить, ядра, а не linuxrc). Конечно расписать весь linuxrc здесь не удастся (это ведь более 1200 строк кода!).
Но время идет, появляются новые версии, а следовательно и новые возможности, но увы не новая документация (во всяком случае применительно к Trinux :-()! Итак, что изменилось в версии 0.80rc2? Загрузщик остался тот же (SYSLINUX), но вот конфиг файл немного изменен:
------- syslinux.cfg --------- display license # выводит файл license prompt 1 # эта штука указывает выводить boot: и ждать ввода определенное количество времени (указанное в timeout) default network # по дефолту будет грузиться label network timeout 30 # процесс ожидания в десятых секунды (следовательно 0.3 сек) label floppy kernel bzimage # месторасположение ядра append initrd=initrd.gz root=/dev/ram0 pkg=floppy # передает дополнительные параметры ядру - путь находжения сжатого виртуального диска, точка монтирования и способ загрузки. Здесь каждому названию label соответствует способ загрузки пакетов. Далее все по аналогии... label cdrom kernel bzimage append initrd=initrd.gz root=/dev/ram0 pkg=cdrom label network kernel bzimage append vga=4 initrd=initrd.gz root=/dev/ram0 pkg=network console=/dev/ttyS1 label fixed kernel bzimage append initrd=initrd.gz root=/dev/ram0 pkg=fixedДа и linuxrc немного другой, не считая мелких изменений (точнее усовершенствований, которых нет смылса тут обсуждать), а вот работу с созданием виртуальных дисков (точнее разделов) следует рассмотреть:
MEMORY=`grep MemTotal /proc/meminfo | cut -d':' -f2 | cut -d'k' -f1` # узнаем общий объем оперативной памяти. echo "RAM: $MEMORY MB" # уведомляем об этом тринуксоида, например RAM: 64 MB. echo -n "RAM is " # далее видим на мониторе RAM is, а дальше в зависимости от кода (и возможностей твоего компа):
1-5. Если RAM меньше 16 мегов, то значение USR и HOMEP (HOME) равно 2048/128 соответственно.
6-10. Если RAM больше 16 мегов, то значение USR и HOMEP (HOME) равно 4096/256 соответственно.
11-15. Если RAM больше 24 мегов, то значение USR и HOMEP (HOME) равно 8192/512 соответственно.
Это довольно интересный подход, теперь вес "каталогов" определяется не наобум/по дефолту, а в зависимости от возможностей вашего компутера. Далее идет следующий код (естественно часть пропущена):
if [ "$USR" != "" ] then echo "Creating /usr" mkdir /usr 2> /dev/null mkfs.minix /dev/ram3 $USR 2> /dev/null > /dev/null mount -t minix /dev/ram3 /usr fi fiЕсли переменная USR чему-то равна, то на мониторе ты лицезрешь "Creating /usr" и создается /usr в виртуальном диске /dev/ram3 с файловой системой MINIX размером (при условии что USR равна 2048) 2048 блоков.
# mount /dev/fd0 /floopy; ls readme bzImage tux nichelp ramdisk syslinux.cfg version ldlinux.sys initrd.gz pkg.tgz licenseРазберемся с каждым из них:
#cd tux; ls
http://www.ibiblio.org/pub/Linux/distributions/trinux/latest/pkg/ http://www.io.com/~mdfranz/trinux/pkg/
В Матрице безопасности выбор очевиден