Спецсеминар "Разработка свободного ПО": http://uucode.com/oss2004/. 3-я лекция.
Крупнейшие репозитории:
Надо проверять подпись или md5. (тема для доклада: прикладная криптография)
Всё под управлением rpm. В Debian -- deb. Во FreeBSD -- ports. В других системах тоже что-то есть. Без пакетов -- никак. Нельзя превращать систему в свалку.
# rpm -i foo-0.2-alt1.rpm // установить пакет из файла # rpm -qa // список всех установленных пакетов # rpm -ql foo // список файлов в пакете # rpm -qi foo // информация о пакете # rpm -qpl foo-0.2-alt1.rpm // список файлов в файле пакета # rpm -qf /bin/bash // какому пакету принадлежит /bin/bash # rpm -qf `which xpdf` // какому пакету принадлежит xpdf
Следующий упровень -- apt. В ALT -- надстройка над rpm.
# apt-cache search bar // поиск 'bar' по базе пакетов # apt-get install gcc // установка 'gcc' из репозитория
Сборка из srpm (source rpm). В ALT с этим тонкости, т.к. root не должен собирать пакеты.
Остаётся качать tarball или из cvs. Последнее не рассматриваем.
tarball -- это обычно .tar.gz или .tar.bz2. Раскрывается с помощью Total Commander (плохо, права теряются) или mc. А ещё проще:
$ tar zxf foobar-2.5.2.tar.gz $ tar jxf foobar-2.5.2.tar.bz2
В архиве -- README, INSTALL, configure, ChangeLog, license. INSTALL обычно сводится к:
$ ./configure $ make $ make test $ make install
Нельзя собирать под root'ом. Для сборки должен быть специальный пользователь. Он создаёт rpm, и уже rpm можно устанавливать. Нечего превращать систему в свалку. Это часто сложно.
Непривилегированный пользователь обычно говорит:
./configure --prefix=/home/luser/opt
А также, возможно, что-нибудь, связанное с shared libraries.
У configure бывает много ключей.
$ ./configure --help | less $ ./configure --help | gvim -
Имеет смысл сделать файл "forconf", в котором прописать вызов configure в нужными ключами. И запустить:
$ sh forconf
Файл "forconf" пригождается через несколько месяцев.
Какие ещё make targets бывают
* clean * distclean
Обычно не сразу си->исполняемая программа, а набор си-файлов-> набор объектных файлов->исполняемая программа.
* инкременальная сборка * стандартные библиотеки
Проблема: в каждой из 100 программ одна и та же библиотека размером 1 Мб. Потеря 100 Мб. Решение: shared library (.so, unix) или dynamic link library (.dll, win32).
Также польза: если в библиотеке ошибка, то можно просто заменить so-файл, а не перекомнилировать всё.
Посмотреть зависимости от .so:
$ ldd /usr/bin/cat libc.so.6 => /lib/libc.so.6 (0x00129000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
Часто зависимости относительные. И тогда система должна как-то найти, где лежат .so.
"man ld.so" для подробностей.
Линкер имеет флаги для управления so. Например, "-static".
Обычно configure и Makefile позволяет передавать параметры.
$ CFLAGS='-O3' LDFLAGS='-static' ./configure --prefix=/home/xxx/opt/
Благодаря LD_LIBRARY_PATH можно подставить свой код. Так можно вклиниться в нормальный процесс работы и создать "обёртку". Например, составить список файлов, переданных open().
Планировал рассказать, но не успел:
Примерная схема логина:
Примерная схема логина по сети:
Когда-то давно была ошибка: вначале устанавливалось окружение, а затем выполнялось нечто типа /bin/login. Пользователи стали делать так:
Ещё возможная проблема (к счастью, её нет). Рассмотрим suid-программу:
# ldd /usr/sbin/passwd libc.so.6 => /lib/libc.so.6 (0x00129000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
Кто нам мешает подставить свой "libc.so.6"? (домашнее задание)
Не работает также: chroot чтобы подставить свой /lib.
Вывод: при написании программ, связанных с безопасностью, надо не забывать про атаку с помощью shared libs.
Попробовать собрать из исходников и локально установить какую-нибудь программу. Например, xbill: http://www.xbill.org/
Посмотреть на so-зависимости, пересобрать без них.
Кто нам мешает подставить свой "libc.so.6" при запуске passwd?
Разобраться, подвержен ли so-атаке suexec.
170 iPod Mini от IBM http://sourceforge.net/ppc_contest.php Для лучших портов на LinuxPPC. Deadline прошёл.
Google Code Jam 2004 http://www.google.com/codejam/ Deadline прошёл.
Яндекс учреждает научные стипендии http://company.yandex.ru/news/2004/0922/