Software
RPM
dpkg
tarballs / tgz
Проверка целостности файлов
Автоматическое обновление
Автообновление и RPM
Автообновление и dpkg
Автообновление и
tarballs / tgz
Отслеживание установки софта
Преобразование форматов файлов
Поиск софта
Безопасное программирование
Тестирование программ
Патчи компилятора
RPM утилита для управления софтом, первоначально создана Red Hat, позже
опубликована под лицензией GNU (
http://www.rpm.org). Она составляет ядро администрирования на многих
системах, решая задачи обновления софта и его установки. Своевременное
обновление может быть трудной задачей, поскольку средний сервер 200-400
пакетов, а ведь основная причина взломов серверов старые пакеты.
man-страница для RPM не очень хороша, с другой стороны, есть отличная
книга " Maximum RPM" (ISBN: 0-672-31105-4), свободно доступная на
http://www.rpm.org в формате post script.
Пакеты в rpm-формате именуются по простому соглашению:
package_name-package_version-rpm_build_version-architecture.rpm
nfs-server-2.2beta29-5.i386.rpm
означает пакет nfs-server, версии 2.2beta29
пятый билд этого rpm (то есть, он был пересобран с небольшими модификациями
5 раз), для архитектуры Intel architecture и он в формате rpm.
Команды и их назначение
-q Запрос пакета/базы данных для сведений о пакете
-i Установить пакет
-U Обновить или установить пакет
-e Как я понял, удалить пакет из системы
-v Сообщать дополнительные данные
-h Линейка прогресса
Пример команды |
Действие |
rpm -ivh package.rpm |
Установит 'package.rpm' с линейкой прогресса и дополнительной информацией
|
rpm -Uvh package.rpm |
Обновит 'package.rpm' с линейкой прогресса и дополнительной информацией
|
rpm -qf /some/file |
Проверит какому пакету принадлежит файл file неизвестного происхождения
|
rpm -qpi package.rpm |
Запросит информацию о пакете 'package.rpm' |
rpm -qpl package.rpm |
Запросит информацию о пакете 'package.rpm', список всех файлов |
rpm -qa |
Запросит базу данных RPM на предмет списка всех установленных пакетов
|
rpm -e package-name |
Удалит из системы пакет 'package-name' (как перечислен в выводе команды
rpm -qa) |
Red Hat Linux 5.1 поставляется с 528 пакетами, а Red Hat Linux 5.2 с 573,
это не так много (SuSE 6.0 поставляется на 5 CD, я не считал сколько там
пакетов). Обычно Вы будете иметь дел с 2-300 пакетами. RPM-пакеты Red Hat
обычно довольно хорошие, требуется 6-12 месяцев на их устаревание.
Список URL и списков рассылки с информацией об ошибках и обновленниях
пакетов доступны дальше в этом документе.
Debian package system подобна RPM, однако испытывает недостаток по части
функциональных возможностей, хотя и делает превосходную работу по управлению
пакетами программ в системе. Oбъединив ее с утилитой dselect Вы можете
соединяться с удаленными сайтами, просматривать доступные пакеты,
устанавливать их, выполнять любые необходимые скрипты конфигурации, все из
консоли. man-страница для dpkg "man dpkg" очень подробная.
Основной формат имени файла пакета Debian (.deb):
packagename_packageversion-debversion.deb
ncftp2_2.4.3-2.deb
В отличие от rpm-файлов, .deb-файлы не помечены для конкретной
архитектуры, это надо помнить.
Команды и их функции:
-I Запрашивает пакет
-i Устанавливает пакет
-l Список установленных пакетов (аналог rpm -qa)
-r Удаляет пакет
Пример команды |
Действие |
dpkg -i package.deb |
Устанавливает package.deb |
dpkg -I package.deb |
Информация о package.deb (аналог rpm -qpi) |
dpkg -c package.deb |
Список всех файлов в package.deb (аналог rpm -qpl) |
dpkg -l |
Показывает все установленные пакеты |
dpkg -r package-name |
Удаляет пакет 'package-name' (имя соответствует указанному в выводе
команды dpkg -l) |
Debian имеет 1500+ пакетов, доступных с системой. Вообще-то, dpkg имеет
все необходимое для работы, но часто RPM удобнее.
Наиболее современные дистрибутивы Linux используют систему управления
пакетами чтобы устанавливать, следить и удалять программное обеспечение.
Имеются, однако, много исключительных ситуаций, Slackware не использует
систему управления пакетами, но взамен имеет precompiled tarballs (сжатый
файл tar, содержащий файлы) который Вы просто распаковываете из корневого
каталога, чтобы установить пакет. Некоторые такие пакеты имеют скрипт
установки, чтобы выполнить любые задачи установки типа добавления
пользователя. Эти пакеты также могут быть удалены, но функции типа запроса
относительно файлов пакета, сравнения установленных файлов с файлами пакета
и им подобные практически отсутствуют. Иногда Вам придется иметь дело с
такими пакетами, даже если система использует менеджер пакетов. Допустим, Вы
хотите попробовать последнюю версию X, но никто еще не создал хороший .rpm
или .deb файл, так что Вы должны захватить исходный текст (также обычно в
сжатом tarball), распаковывать его и установить. Это представляет не большую
опасность, чем любой пакет поскольку большинство tarball имеет MD5 и/или
PGP сигнатуры, связанные с ними. Так что Вы можете загрузить и проверить
пакет. Главная проблема в том, чтобы отслеживать нужные файлы и определять
их версии. Например, удалили Вы какой-то пакет, вместе с кучей его библиотек,
а система работать перестала. Что такое? А все просто: библиотеки были нужны
еще пакетам, которые Вы добавили уже после этого. Так что лучше бы Вам их не
использовать, но если очень надо, сделайте перед установкой список файлов
системных каталогов, после установки еще один и сравните их, чтобы знать,
что куда дописалось. Собственно, менеджеры пакетов часто делают именно это.
Запустите 'find /* > /filelist.txt' перед и 'find /* > /filelist2.txt'
после установки tarball и используйте 'diff -q /filelist.txt /filelist2.txt
> /difflist.txt' для получения перечня изменений. Альтернатива: выполните
'tar -tf blah.tar' чтобы получить список файлов в архиве, но толку от этого
может и не быть: большинство tarballs выполняет компиляцию программ и
установочные скрипты, так что простой перечень файлов может и не помочь.
Другой метод для слежения за тем, что Вы установили через tar состоит в
использовании программ типа stow, stow ставит пакет в отдельный
каталог (например, /opt/stow) и создает ссылки из системы на данный каталог.
Stow требует Perl и доступен на
http://www.gnu.ai.mit.edu/software/stow/stow.html.
Команда |
Действие |
tar -tf filename.tar |
Перечисляет имена файлов в filename.tar |
tar -xf filename.tar |
Распаковывает файлы из filename.tar |
Обычно скачав пакет Вы его ставите. Но недавно ftp.win.tue.nl был вскрыт,
и пакет TCP_WRAPPERS (и не он один) был заменен трояном. Прежде чем это
заметили, пакет скачали 59 раз. Так что обязательно проверяйте целостность
свежескачанного пакета до его установки.
RPM-пакеты могут иметь (и обычно имеют) PGP-подпись автора. Она может быть
проверена, и в случае несовпадения, пакет, скорее всего, троянский. Это
подробно описано в главе 7 в Maximum RPM (online-версия на
http://www.rpm.org), проверка состоит из
добавления ключей разработчиков к общему PGP-брелку, и затем использования
опции -K, которая захватит соответствующий ключ и проверит сигнатуру.
dpkg поддерживает MD5. MD5 входит во многие дистрибутивы.
Многие tarballs распространяются с PGP-сигнатурами в отдельных
ASCII-файлах, для их проверки добавьте ключ разработчиков к Вашему брелку и
используйте PGP с опцией -o. PGP для Linux доступен на
ftp://ftp.zedz.net.
Также используется GnuPG, полностью открытая исходная версия PGP, которая
не использует никаких патентованных алгоритмов. Вы можете скачать ее с
http://www.gnupg.org.
Другой путь проверки пакета состоит в том, чтобы создать MD5 контрольную
сумму. Проблема в том, что как-то надо получить надежные данные о контрольной
сумме. Обычно это делается по email после анонсирования павкета.
NSBD (not-so-bad-distribution) метод автоматического безопасного
распространения и обновления пакетов по сети. Скачать можно с
http://www.bell-labs.com/project/nsbd.
AutoRPM вероятно самый лучший инструмент для обновления rpm. Вам надо
просто указать каталог ftp, после чего будут скачаны и установлены пакеты,
которые являются более новыми чем те, которые Вы имеете. Пожалуйста имейте в
виду что если кто-то отравляет Ваш кэш DNS, Вы легко попадете в неприятную
историю, так что удостоверьтесь, что используете IP-адрес ftp-сайта, а не
имя. AutoRPM требует установки пакета libnet Net::FTP для Perl и доступен на
http://www.kaybee.org/~kirk/html/linux.html.
Rhlupdate также соединяется с ftp-сайтом и захватывает любые необходимые
модификации, те же самые проблемы, что и в предыдущем случае, имеются и с
ним. Также требуется, чтобы Вы установили пакет libnet Net::FTP для Perl.
Скачать можно с
ftp://missinglink.darkorb.net/pub/rhlupdate.
RpmWatch простой Perl-скрипт, который установит модификации. Обратите
внимание, что пакеты должны быть доступны локально, хотя бы через NFS или
CODA. RpmWatch лежит на
http://www.iaehv.nl/users/grimaldo/info/scripts.
Менеджер пакетов Debian (dpkg и apt-get) поддерживает автообновление
пакетов и всех их зависимостей с ftp-сервера. Просто создайте скрипт, который
будет ежедневно вызываться из cron:
#!/bin/bash
PATH=/usr/bin
apt-get update
apt-get upgrade
Единственная дополнительная вещь, которую Вы будете должны сделать,
выбрать конфигурацию места загрузки в списке /etc/apt/sources.list и общую
настройку apt в /etc/apt/apt.conf, скачать все это можно с
http://www.debian.org/Packages/stable/admin/apt.html.
Я не знаю никаких утилит, так что если знаете, сообщите мне (утилита
должна хотя бы зеркалировать, автоматически распаковывать и выполнять
./configure; make; make install).
Если программа установлена путем компиляции исходников, а не из пакета,
удалить ее бывает мягко говоря затруднительно.
installwatch контролируют все, что делает программа, и регистрирует любые
изменения, которые она делает в системе, через syslog. Вы выполняете
программу например как installwatch /usr/src/something/make
(опционально можно задать o filename для записи протокола в
специальный файл filename). installwatch доступна на
http://datanord.datanord.it/~pdemauro/installwatch.
instmon запускается до и после установки пакетов tarball/tgz. Он создает
список измененных файлов, который можно потом использовать для отмены
изменений. Доступен на:
http://hal.csd.auth.gr/~vvas/instmon.
Другой способ иметь дело с пакетами: преобразовывать их. Имеется несколько
утилит, чтобы преобразовать rpm-файлы в tarballs, rpm в deb и тому подобное.
alien возможно лучшая утилитав для конвертации файлов. Поддерживает rpm,
deb и tarball. Скачать можно с
http://kitenet.net/programs/alien
.
slurp ведет себя подобно installwatch, но имеет и возможности alien. Он
отслеживает систему при установке пакетов и создает из него rpm-пакет. Вы
можете скачать slurp с
http://students.vassar.edu/~jajohnst/slurp.
Проблема с Linux возникает при поиске софта, не поставляемого в
дистрибутиве. Поиск через Internet особыми прелестями не отличается. Но есть
несколько приятных ресурсов:
Основной проблемой защиты в Linux является то, что программы либо написаны
с дырами, либо опасно поставлены. Большинство дыр (в том числе наиболее
популярная buffer overruns) вызваны именно этим. Проблемы становятся еще
заметней, когда программа выполняется через механизм etuid как root. Есть ряд
приемов, которые позволяют программисту избежать проблем.
Эта энциклопедия описывает много приемов безопасного программирования
вообще, и специфики Linux в частности. Скачать можно с
http://www.dwheeler.com/secure-programs.
Этот документ освещает вопросы безопасного программирования, в том числе
ряд низкоуровневых моментов: inherited trust, sharing credentials и подобное.
Документ доступен на
http://www.whitefang.com/sup и я очень рекомендую почитать его всем, кто
собирается что-то писать для Linux (или UNIX вообще).
Secure Internet Programming (SIP) лаборатория (из-за отсутствия лучшего
слова) которая изучает компьютерную защиту, и более определенно проблемы с
подвижным кодом типа Java и ActiveX. Они имеют ряд интересных проектов и
много интерактивных публикаций, которые дают превосходное чтение. Если Вы
собираетесь программировать на Java, посетите их сайт:
http://www.cs.princeton.edu/sip.
Writing Safe Setuid Programs чрезвычайно всесторонняя работа, которая
охватывает почти все и доступна в формате HTML для простого чтения. Должна
быть изучена любым, кто использует setuid-программы, уже не говоря о тех, кто
их пишет. Доступно на
http://olympus.cs.ucdavis.edu/~bishop/secprog.html.
userv позволяет программам вызывать другие программы более безопасным
способом, чем обычно. Это полезно для программ, которые требуют уровней
доступа выше, чем нормальный пользователь, но Вы не хотите давать им
root-доступ. Доступно на
http://www.chiark.greenend.org.uk/~ian/userv.
Есть ряд типичных программистских ошибок, которые делают программы
уязвимыми. Есть и инструменты для тестирования на эти ошибки.
Написан Ben Woodward, fuzz частично интеллектуальная программа, которая
дает совершенно неожиданные исходные данные и смотрит на реакцию программы
(то есть, не свалится ли она?). fuzz доступен на
http://fuzz.sourceforge.net.
Есть несколько патчей компилятора для повышения безопасности.
Stackguard представляет собой набор патчей для GCC, которые компилируют
программы так, чтобы предотвратить их от записи в те места памяти, куда они
не должны ничего записывать (это простое объяснение, web-сайт Stackguard
имеет кудабольше деталей). Stackguard разрывает некоторые функциональные
возможности: программы подобные gdb и другие отладчики будут терпеть неудачу,
но это не имеет значения для отлаженных программ. Скачать Stackguard можно с
http://www.immunix.org.
Stack Shield альтернативный метод защиты Linux от переполнения буфера, но
я его не пробовал. Скачать можно с
http://www.angelfire.com/sk/stackshield.
Back
|