SUID-программы. Виртуальные машины, компиляторы, наука.

Спецсеминар "Разработка свободного ПО": 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, кроссплатформенно

  1. разработка внутреннего языка
  2. анализ потоков управления PROMISE
  3. анализ потоков данных PROMISE
  4. визуализация
  5. не помню

Про (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 -- диалект Лиспа.)