Библиотека сайта rus-linux.net
Software
Автообновление и tarballs / tgz
Преобразование форматов файлов
- Secure Linux Programming FAQ
- Secure UNIX Programming FAQ
- Secure Internet Programming
- Writing Safe Setuid Programs
- userv
RPM
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 и списков рассылки с информацией об ошибках и обновленниях пакетов доступны дальше в этом документе.
dpkg
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 удобнее.
tarballs / tgz
Наиболее современные дистрибутивы 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 integrity
RPM-пакеты могут иметь (и обычно имеют) PGP-подпись автора. Она может быть проверена, и в случае несовпадения, пакет, скорее всего, троянский. Это подробно описано в главе 7 в ⌠Maximum RPM■ (online-версия на http://www.rpm.org), проверка состоит из добавления ключей разработчиков к общему PGP-брелку, и затем использования опции -K, которая захватит соответствующий ключ и проверит сигнатуру.
dpkg integrity
dpkg поддерживает MD5. MD5 входит во многие дистрибутивы.
Файлы PGP-signed
Многие tarballs распространяются с PGP-сигнатурами в отдельных ASCII-файлах, для их проверки добавьте ключ разработчиков к Вашему брелку и используйте PGP с опцией -o. PGP для Linux доступен на ftp://ftp.zedz.net.
Файлы GnuPG-signed
Также используется GnuPG, полностью открытая исходная версия PGP, которая не использует никаких патентованных алгоритмов. Вы можете скачать ее с http://www.gnupg.org.
Файлы MD5-signed
Другой путь проверки пакета состоит в том, чтобы создать MD5 контрольную сумму. Проблема в том, что как-то надо получить надежные данные о контрольной сумме. Обычно это делается по email после анонсирования павкета.
Автоматическое обновление
NSBD
NSBD (not-so-bad-distribution) метод автоматического безопасного распространения и обновления пакетов по сети. Скачать можно с http://www.bell-labs.com/project/nsbd.
Автообновление и RPM
AutoRPM
AutoRPM вероятно самый лучший инструмент для обновления rpm. Вам надо просто указать каталог ftp, после чего будут скачаны и установлены пакеты, которые являются более новыми чем те, которые Вы имеете. Пожалуйста имейте в виду что если кто-то отравляет Ваш кэш DNS, Вы легко попадете в неприятную историю, так что удостоверьтесь, что используете IP-адрес ftp-сайта, а не имя. AutoRPM требует установки пакета libnet Net::FTP для Perl и доступен на http://www.kaybee.org/~kirk/html/linux.html.
Rhlupdate
Rhlupdate также соединяется с ftp-сайтом и захватывает любые необходимые модификации, те же самые проблемы, что и в предыдущем случае, имеются и с ним. Также требуется, чтобы Вы установили пакет libnet Net::FTP для Perl. Скачать можно с ftp://missinglink.darkorb.net/pub/rhlupdate.
RpmWatch
RpmWatch простой Perl-скрипт, который установит модификации. Обратите внимание, что пакеты должны быть доступны локально, хотя бы через NFS или CODA. RpmWatch лежит на http://www.iaehv.nl/users/grimaldo/info/scripts.
Автообновление и dpkg
Менеджер пакетов 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.
Автообновление и tarballs/tgz
Я не знаю никаких утилит, так что если знаете, сообщите мне (утилита должна хотя бы зеркалировать, автоматически распаковывать и выполнять ⌠./configure; make; make install■).
Отслеживание установки софта
Если программа установлена путем компиляции исходников, а не из пакета, удалить ее бывает мягко говоря затруднительно.
installwatch
installwatch контролируют все, что делает программа, и регистрирует любые изменения, которые она делает в системе, через syslog. Вы выполняете программу например как ⌠installwatch /usr/src/something/make■ (опционально можно задать ⌠-o filename■ для записи протокола в специальный файл filename). installwatch доступна на http://datanord.datanord.it/~pdemauro/installwatch.
instmon
instmon запускается до и после установки пакетов tarball/tgz. Он создает список измененных файлов, который можно потом использовать для отмены изменений. Доступен на: http://hal.csd.auth.gr/~vvas/instmon.
Преобразование форматов файлов
Другой способ иметь дело с пакетами: преобразовывать их. Имеется несколько утилит, чтобы преобразовать rpm-файлы в tarballs, rpm в deb и тому подобное.
alien
alien возможно лучшая утилитав для конвертации файлов. Поддерживает rpm, deb и tarball. Скачать можно с http://kitenet.net/programs/alien .
slurp
slurp ведет себя подобно installwatch, но имеет и возможности alien. Он отслеживает систему при установке пакетов и создает из него rpm-пакет. Вы можете скачать slurp с http://students.vassar.edu/~jajohnst/slurp.
Поиск софта
Проблема с Linux возникает при поиске софта, не поставляемого в дистрибутиве. Поиск через Internet особыми прелестями не отличается. Но есть несколько приятных ресурсов:
Безопасное программирование
Основной проблемой защиты в Linux является то, что программы либо написаны с дырами, либо опасно поставлены. Большинство дыр (в том числе наиболее популярная buffer overruns) вызваны именно этим. Проблемы становятся еще заметней, когда программа выполняется через механизм etuid как root. Есть ряд приемов, которые позволяют программисту избежать проблем.
Secure Linux Programming FAQ
Эта энциклопедия описывает много приемов безопасного программирования вообще, и специфики Linux в частности. Скачать можно с http://www.dwheeler.com/secure-programs.
Secure UNIX Programming FAQ
Этот документ освещает вопросы безопасного программирования, в том числе ряд низкоуровневых моментов: inherited trust, sharing credentials и подобное. Документ доступен на http://www.whitefang.com/sup и я очень рекомендую почитать его всем, кто собирается что-то писать для Linux (или UNIX вообще).
Secure Internet Programming
Secure Internet Programming (SIP) лаборатория (из-за отсутствия лучшего слова) которая изучает компьютерную защиту, и более определенно проблемы с подвижным кодом типа Java и ActiveX. Они имеют ряд интересных проектов и много интерактивных публикаций, которые дают превосходное чтение. Если Вы собираетесь программировать на Java, посетите их сайт: http://www.cs.princeton.edu/sip.
Writing Safe Setuid Programs
Writing Safe Setuid Programs чрезвычайно всесторонняя работа, которая охватывает почти все и доступна в формате HTML для простого чтения. Должна быть изучена любым, кто использует setuid-программы, уже не говоря о тех, кто их пишет. Доступно на http://olympus.cs.ucdavis.edu/~bishop/secprog.html.
userv
userv позволяет программам вызывать другие программы более безопасным способом, чем обычно. Это полезно для программ, которые требуют уровней доступа выше, чем нормальный пользователь, но Вы не хотите давать им root-доступ. Доступно на http://www.chiark.greenend.org.uk/~ian/userv.
Тестирование программ
Есть ряд типичных программистских ошибок, которые делают программы уязвимыми. Есть и инструменты для тестирования на эти ошибки.
fuzz
Написан Ben Woodward, fuzz частично интеллектуальная программа, которая дает совершенно неожиданные исходные данные и смотрит на реакцию программы (то есть, не свалится ли она?). fuzz доступен на http://fuzz.sourceforge.net.
Патчи компилятора
Есть несколько патчей компилятора для повышения безопасности.
Stackguard
Stackguard представляет собой набор патчей для GCC, которые компилируют программы так, чтобы предотвратить их от записи в те места памяти, куда они не должны ничего записывать (это простое объяснение, web-сайт Stackguard имеет кудабольше деталей). Stackguard разрывает некоторые функциональные возможности: программы подобные gdb и другие отладчики будут терпеть неудачу, но это не имеет значения для отлаженных программ. Скачать Stackguard можно с http://www.immunix.org.
Stack Shield
Stack Shield альтернативный метод защиты Linux от переполнения буфера, но я его не пробовал. Скачать можно с http://www.angelfire.com/sk/stackshield.
Written by Kurt Seifried