|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Ramazan Jah-Far 2:5020/400 19 Jun 2004 04:16:30 To : Victor Wagner Subject : Re: symlinks vs. hardlinks -------------------------------------------------------------------------------- Hi! In fido7.ru.linux, Victor Wagner wrote: RJF>> Hет. Hа мой взгляд, использование графа как семантической RJF>> модели ФС абсолютно бессмысленно. Я ещё могу допустить VW> Hа мой взгляд, разговор о "модели ФС" уже бессмысленен. Есть, во-первых, чисто практический смысл, а, кроме того, хороший повод поупражняться в жонглировании абстракциями, :) т.е. заняться тем, что в политкорректном варианте называется теоретизированием. VW> ФС сама по себе модель - модель отношений между разными кусочками VW> информации (не обязательно документами), хранящимися в компьютере. Hет. ФС просто-напросто предоставляет инструментарий для _управления_ кучкой файлов, принадлежащих пользователям, системе и прикладному ПО. _Управление_, согласно исторически сложившейся практике, проводится по принципам "divide et impera" и потому требует некоей абстрактной модели. Здесть есть динамика (управление) и статика (состояние ФС на некий момент). Если отделить первое от второго, получим бездыханный труп (ФС), которому BTW для _хранения_ информации нафиг не нужны директории, права доступа и прочая "файловая система"-тичность. :) VW> Поэтому разговор идет о том, как бы приблизить эту модель к той модели, VW> которая используется для представления этих отношений в мозгу VW> пользователя. А вот там - заведомо граф. У меня -- не граф. Hе люблю лабиринты. :) RJF>> (1) для любой ФС такого вида существует ориентированный RJF>> ацикличный граф, вершины которого соответствуют "inodes", RJF>> а рёбра -- "dentries" данной ФС. VW> Если он ориентированый, то у него дуги, а не ребра. Однако, да. :) Примем этот термин. RJF>> // Т.е. _рёбра_ поименованы. Ребра с именем '/' нет. :) VW> Вот ацикличность - уже жесткое и ограничение, которое мешает жить. VW> Хотя можно его и пережить, если уметь проходить по дугам в обратном VW> направлении. VW> VW> Второе ограничение - отсутствие некоей классификации дуг. А зачем? // Лучше на примере. RJF>> Логичнее всего считать, что недоступные из корня вершины RJF>> (inodes) нам не нужны, т.е. мы по-прежнему хотим RJF>> "односвязную" ФС. VW> Hе нужны? В том смысле, что вся недоступная из корня требуха считается удалённой и подлежит "сбору мусора". // Hа самом деле, журнал на ext3 чаще всего невидим, но // не "garbage collected", т.к. на его inode ссылается // superblock; так сказать, непоименованной дугой :) Таким образом, для большей корректности можем взять за отправную точку не '/', а superblock, и тогда в графе даже :) будет присутствовать дуга с именем '/'. VW> А зачем люди выдумали chroot и jail? А разве chroot делается не на подграф? т.е. не на некоторую "доступную" в текущем "графе" новую отправную точку? VW> Более того, стартовой вершиной, откуда пользователь начинает свой сеанс VW> работы с данной информационной структурой, никогда не является корень. VW> Это обычно либо ${HOME} , либо какой-нибудь "рабочий стол" Пользователь -- далеко не единственный пользователь ФС, есть ещё ОС и ПО. RJF>> В самом деле, тебе же не интересно, через какие промежуточные RJF>> хосты к тебе приходит файл из Internet? VW> Иногда - интересно. В тех ситуациях, когда оно тормозит и пакеты теряет. VW> Тогда я хочу знать какого админа из промежуточных пинать. Для этого существует спец. API. А _голый_ send/recv тебе не скажет ни про промежуточный хост, ни про его админа. RJF>> Выходит, в действительности выполняемые ФС функции намного RJF>> ближе к каталогизации (классификации). Сравни с библиотекой. ;) RJF>> И "ФС-путь" семантически намного ближе к "классу", нежели к RJF>> "маршруту". VW> Совершенно верно. Hо тут есть такая маленькая тонкость - классифицируем VW> мы объекты не вообще а по отношению к какой-нибудь задаче. Скажем так, ФС предоставляет инструмент, а задачи определяет ОС, ПО и пользователи, в рамках своих полномочий. Для ОС основная задача, грубо говоря, -- полийейский надзор за пользователями и ПО (и их файлами). Управлением ПО обычно занимается package manager (PM), но, если ФС предоставит соответствующий инструментарий, PM значительно упростится, т.к. отпадёт нужда в "побочных" :) БД. Пользователь в своём "домене полномочий" волен классифицировать файлы по съедобности, стеклянности и вообще как угодно соответственно своим задачам или целям, поставленным перед ним его работодателем. VW> Если мы ухитримся представить задачи в виде объектов того же множества, VW> то классификации образуют как раз-таки ациклический граф. Это я не понял. Смотря как вести дуги. Многие объекты будут участвовать в разных задачах, со всеми вытекающими, типа непреодолимого желания наложить классификации друг на друга... VW> Если все классификации одноуровневы, а множества задач и VW> классифицируемых объектов не пересекаются, то граф будет двудольным. Вот это понятно. Hо только одноуровневая классификация -- это нечто навроде "вино/брэнди/виски". :) RJF>> Теперь про само намерение delete. Оно возникает довольно RJF>> часто. К примеру, delete /usr/sbin/sendmail при выполнении RJF>> security update. VW> Hу вот как раз ни в коем случае в этой ситуации нельзя delete. VW> Мало ли каким процессам в данный момент этот бинарник нужен. Дело в том, что я здесь имею в виду "FS-delete", а не "VFS-delete". Счётчик ссылок на файл изнутри ФС -- не одно и то же, что счётчик ссылок на файл в драйвере ФС. Т.е. delete, _конечно же_, откладывается до закрытия всех дескрипторов файла ОСью. // unlink становится delete-ом, когда обнуляется счётчик // ссылок на файл изнутри ФС. RJF>> А теперь представим, что юзеров прищучили жёсткими квотами, RJF>> места на винте мало, а некий /home/someuser содержит RJF>> полную антологию за 15 лет sendmail-ов, apache-й, ssh-ей, RJF>> ssl-ей, ядер и прочей регулярно обновлявшейся требухи, в виде RJF>> hardlinks. ;) VW> Чушь ты какую-то несешь. Сразу видно, что ты не прочитал про баг #какой-то-там. Это security stuff. Смысл в том, что злонамеренный пользователь откладывает (ln) suid-ные бинари впрок для осуществления privilege escalation в будущем. После того, как обнаруживается очередной exploitable баг в том же sendmail, пользователь ищет exploit, но чаще всего администратор успевает обновить sendmail раньше. Однако у пользователя на этот случай есть заблаговременно припасённый _suid root_ sendmail, а всё благодаря hardlinks. // и использованию пакетным менеджером unlink вместо // shred/delete/(chmod gu-s && unlink) Так что намерение delete совершенно правомерно, в данном примере, -- по отношению к дырявым suid root бинарям. -- Bye! Ramazan --- ifmail v.2.15dev5.3 * Origin: UkrNet (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/91402ff671f1.html, оценка из 5, голосов 10
|