Спецсеминар "Разработка свободного ПО": http://uucode.com/oss2004/. 5-я лекция, 9 октября.
Иногда надо изменять права программы:
Процессы имеют атрибуты. Среди них -- UID (user ID), GID (group ID), EUID (effective UID), EGID.
Права процесса определяются по EUID/EGID. Процесс иногда может поменять его.
Первая возможность: SUID-программы. Например, passwd. Они пишутся очень аккуратно ибо представляют серьёзную опасность.
Домашнее задание: "ldd /usr/bin/passwd" показывает, что passwd зависит от so-объектов. Путей нет. Кто нам мешает использовать LD_LIBRARY_PATH и подставить свой "libc.so.6" при запуске passwd?
Не всякая программа может быть SUID, а иногда пользователю надо дать на что-то права. Тогда используется программа "sudo". Системный администратор расписывает кто, какие программы и с какими ключами может запускать, а пользователь этим пользуется.
Домашнее задание: разобраться, можно ли с помощью LD_LIBRARY_PATH повлиять на программу, запущенную с помощью sudo.
Вторая возможность изменения привилегий. Работает сервер справами root, к нему коннектиться нечто, идентифицируется и просит что-то сделать. Сервер форкается, скидывает права и делает задачу от имени пользователя. Иногда она сводится к настройке окружения и запуску внешней команды (telnetd, sshd).
Если есть возможность установить окружение, то есть опасность. Известно, что была ошибка в telnetd и можно было получить root. Возможно, что есть проблемы в некоторых ftp-серверах из-за запуска gunzip.
Домашнее задание: crond устанавливает переменные окружения и посылает почту от root'а, запуская sendmail. sendmail -- не SUID. Есть ли проблемы с crond?
Николай Вяххи. Доклад "Виртуальная машина Parrot".
Предполагалось, что все языки программирования будут иметь компилятор в Parrot, и тогда любая программа будет работать везде. До этого так хотели с guile. А сейчас с .net. Ни у кого не получилось. Для .net подошёл только C# и Active Oberon.
Фраза "виртуальная машина" -- ребрендинг слова "интерпретатор".
Дизайн архитектуры виртуальной машины -- не столько наука, сколько искусство. Есть как минимум две книги на Амазоне, одна есть у меня. Есть полезные ссылки, могу прислать.
Ещё VM:
Немного про компиляторы.
Есть frontend, backend и то, что посередине.
frontend: парсер.
Посередине: внутреннее представление. Их обычно несколько: высокоуровневое, среднеур., низкоур. Различные форматы представления для разных оптимизаций. Оптимизаций много (оптимизация циклов, распредеение регистор и т.д.), некоторые полагаются на
Если компиляторы интересны, то можно смотреть в сторону:
Семинар: по пятницам на 2-ой паре (11:15) в ауд. 2505.
Исключительно OCaml, работа под Linux, кроссплатформенно
Про (4) подробнее. Многое можно сделать и понять если есть хорошая картинка. Хорошо показать граф с тысячами вершин сложно. Разные алгоритмы (диффуры, генетические и прочие).
Одна из программ: Graphviz - open source graph drawing software. http://www.research.att.com/sw/tools/graphviz/
Рассказать об открытии "Учебно-исследовательской лаборатории системного программирования СПбГУ" http://iti.spbu.ru/ru/news/20041112.asp
По субботам -- базы данных, Новиков.
Мои предложения: ALT Linux в cooperative mode (см. cooperative linux). Помимо разных польз, может быть также поддержано IBM.
IBM Linux Scholars Challenge http://www.ibm.com/ru/software/info/students/contests/linux/ 31 октября 2004 года - Окончание регистрации
Ещё проет: "xpath & xquery parser in Scheme" (Scheme -- диалект Лиспа.)