• История UNIX / Как это было…
  • Отец демона и пингвина / Особенности архитектуры UNIX
  • ОС для Кремля / Ищем самую защищенную систему
  • Теория

    История UNIX / Как это было…

    Roman aka Docent

    (d0cent@rambler.ru)

    История *nix-систем насчитывает более 30 лет. Давай совершим небольшое путешествие во времени к самым истокам этой оси, в то время, когда компы были большие, а собственную ОС не писал разве что ленивый программер. Конечно, большая часть таких осей не дожила до нашего времени, а о многих из них не сохранилось даже малейших сведений.

    Начало начал: от BESYS до MULTICS

    UNIX был разработан американской лабораторией Bell Labs, входившей в состав конторы Bell Systems. История этой компании в области информационных технологий началась в 1957 году, когда ее сотрудникам потребовалась операционная система для собственного вычислительного центра, в котором использовалась ЭВМ второго поколения. От такой системы требовалось автоматизировать запуск некоторых программ и управление вычислительными ресурсами. Новоиспеченную систему назвали BESYS. Разумеется, она была совершенно не похожа на современные операционные системы, и применять ее могли разве что сами разработчики для собственных целей. А в те времена больше ничего и не требовалось – компьютеров было мало, и работали с ними лишь программисты и ученые, а уж о необходимости компьютера дома или в офисе никто не задумывался. В 1964 году контора приобрела более мощную машину третьего поколения, и тут же возник вопрос о новой оси, так как старая годилась лишь для той машины, для которой ее делали. Никаких общих стандартов совместимости тогда не существовало. Для участия в разработке операционной системы были приглашены специалисты из Массачусетского института и корпорации General Electric. И закипела работа над новой осью, названной впоследствии Multics (Multiplexed Information and Computing System), – многозадачной, многопользовательской ОС с разделением времени и пользовательским интерфейсом. С помощью нее несколько пользователей одновременно могли получать доступ к вычислительным ресурсам. При создании были использованы наработки Массачусетского института, реализованные ранее в другой экспериментальной оси – CTSS. В итоге, получилась достаточно сложная в использовании, громоздкая и дорогая операционка, в которой, к тому же, существовал ряд ошибок, связанных, в основном, с неудачно выбранным языком программирования PL/I. Кроме этого, среди разработчиков возникли некоторые организационные разногласия. Короче говоря, проект загнулся. Но оставил после себя различные идеи, в частности, идеи по файловой системе, которые были использованы в дальнейших разработках.

    К чему приводит геймерство, или Начало «эры UNIX»

    После закрытия проекта сотрудники Bell Labs на некоторое время пересели на созданную компанией General Electrics систему GECOS. Узкие возможности этой системы никого из работников лаборатории не устраивали. И в это время, как гласит легенда создания UNIX, один из разработчиков, принимавших активное участие в проекте Multics, Кеннет Томпсон, создал простенькую по тем временам игрушку – Space Travel, которая, к сожалению, не могла нормально работать на тех машинах, что имелись в лаборатории. Компьютеры ведь применялись лишь для научных задач, и никто не думал тогда об их использовании в качестве игровых автоматов. По официальной версии, Томпсон и его коллега Денис Ритчи написали начальству заявку на приобретение более мощной машины для разработки новой операционной системы. Если верить легенде, им всего лишь хотелось нормально поиграть в свое творение :). Заявку, разумеется, отклонили, и пришлось новоявленным геймерам довольствоваться небольшим (по тогдашним меркам) компьютером PDP-7, хотя он вполне подходил по объему оперативной памяти, да к тому же обладал графическим дисплеем. Тут-то и пришла им в головы мысль использовать эту машину для написания собственной универсальной операционки (а может, чтобы просто оправдаться перед начальством в потребности более мощной машины :)). Томпсон решил воплотить в невиданной доселе операционке все самые удачные идеи, которые появились при разработке Multics, а именно: иерархическая древовидная структура файловой системы, концепции файла и процесса, командный интерпретатор для пользователя, многопользовательский режим работы (могли работать два пользователя одновременно) и много чего еще. Работа шла таким образом: на имевшемся до этого компьютере General Electric 635 писали ассемблерный код и потом с помощью перфоленты переносили на PDP-7, на которой впоследствии отлаживали. Так было получено простенькое ядро будущей системы, текстовый редактор, несколько утилит и собственный Ассемблер.

    При этом оси требовалось всего 12 килобайт оперативной памяти (столько весило ядро системы), 8 килобайт занимали программы и утилиты, а максимально допустимый размер файла составлял 64 килобайта. После этого можно было полностью продолжать работу уже на самой PDP-7 в создаваемой операционке. Первоначальное название, которое было придумано для новоиспеченного продукта, – UNICS (Uniplexed Information and Computing System). И немного позднее было сокращено до привычного нам UNIX (какому программисту захочется писать лишнюю букву в слове :)). Вот так, созвучно с безвременно сгинувшей Multics, Кен и Денис назвали свое творение, даже и не подозревая тогда, что такое же созвучие в название будут приобретать практически все будущие клоны этой легендарной операционки. Произошло это в 1969 году, а официальной датой рождения UNIX и началом так называемой «эры UNIX» стало 1 января 1970 года.

    В 1971 году лаборатории Bell Labs потребовалась система обработки текстов, и в качестве платформы для нее был выбран полюбившийся всей конторе UNIX. Да и к тому времени удалось разжиться более мощной машиной – PDP-11. В это время Томпсон работал над компилятором языка Fortran, но то, что в итоге у него получилось, было названо языком B, который немного позднее превратился во всем нам хорошо известный C. В 1973 году UNIX был переписан на язык C, что сделало систему полностью переносимой. А в 1974 исходники UNIX стали распространяться в университетах за символическую плату, что обеспечило дальнейшую популярность этой оси, а также начало вовлекать в разработку все новых и новых разработчиков. Небольшая цена, понятный и доступный для изучения код на C, гибкость и переносимость, возможность настроить ось под любую конфигурацию сделали ее привлекательной для большого количества не только профессионалов, но и любителей. Таким образом, были разработаны великий текстовый редактор vi (Билл Джой), возможность работы с виртуальной памятью (Поркер и Бабаоглу) и множество других примочек.

    Немного поздней AT&T решила внести некоторый порядок в столь бурный выход новых версий, и в 1982 году несколько последних версий были объединены в одну, что получило название UNIX System III. В 1983 году вышла первая коммерческая версия UNIX, которая называлась System V. В ней появились такие понятия, как механизм взаимодействия процессов, замещение страниц и семафоры. К 1989 году вышла новая версия System V Release 4, вновь объединившая достоинства последних версий. Самыми значительными фишками этой версии стали сокеты, сетевая файловая система (NFS) и новые интерпретаторы ksh и csh. В 1993 году права на UNIX были проданы компании Novell, которая потом передала их конторам X/Open и Santa Cruz Operation (SCO).

    Но что это мы все о UNIX да о UNIX? Ведь эта ось, обретя популярность, получила множество параллельных веток развития, которые до сих пор развивают как многочисленные компании, так и народные умельцы.

    BSD, Solaris и другие

    Одной из значительных ветвей развития UNIX стала знаменитая ось BSD (Berkley Software Distribution). В 1976 году Томпсон поехал в Калифорнийский университет, где шестой редакцией UNIX очень заинтересовались аборигены. Среди них оказался Билл Джой. Он-то и разработал свою версию UNIX, запихнув в нее кучу собственных примочек, в том числе компилятор Паскаля, и назвав ее BSD. В дальнейшем при вмешательстве министерства обороны США (DARPA) в 1980 году был разработан протокол TCP/IP, что дало возможность работы операционки в локальной сетке. Также в BSD добавился редактор vi и командный интерпретатор C-Shell. Ось распространялась практически бесплатно, а ближе к нашему времени мутировала в FreeBSD, OpenBSD и NetBSD. Была выпущена и коммерческая версия BSD/OS для IBM-совместимых машин.

    Также Билл Джой основал фирму Sun Microsystems и занялся разработкой SunOS, позднее ставшей известной как Solaris, для станции SPARC, а также Intel, Pentium Pro и Power PC. Эта ось позаимствовала многое от UNIX System V Release 4. А Solaris являлся, по сути, тем же SunOS, но обросшим дополнительными примочками, и, самое главное, графическим интерфейсом.

    Кроме BSD и SunOS, появились на свет другие подвиды UNIX, выпускаемые различными фирмами. Среди них стоит упомянуть такие оси, как AIX, выпущенная IBM для тачек RS/6000, HP-UX, выпущенная Hewlett Packard для мультипроцессорных тачек с поддержкой больших файловых систем, IRIX, разработанная Silicon Graphics для графических станций и суперкомпьютеров; Digital UNIX (он же Tru64 UNIX) фирмы DEC, предназначенная для мощных серверов, с поддержкой практически всех сетевых интерфейсов и улучшенными драйверами для работы с винчестерами, и многие другие.

    От Minix к Linux, или Как разводили пингвинов

    И вот, наконец, добрались мы и до всеми нами любимой Linux. История этой операционки, надо сказать, не менее навороченная и интересная, чем история UNIX. За гораздо меньшее время, чем прошло для UNIX, эта ось успела обрасти не меньшим количеством всевозможных клонов. Сама ОС Linux появилась в начале 90-х прошлого века, но история ее берет начало еще в 1987 году. В то время некий датский профессор Эндрю Танненбаум написал книгу «Операционные системы», в качестве учебного пособия к которой прилагался исходник маленькой операционки размером всего 12 000 строк кода – Minix. Это было нечто похожее на UNIX. Ось предназначалась для работы на компьютерах с процессором 8086. Книжка приобрела большую популярность и попала в 1991 году в руки никому еще не известному студенту второго курса и хакеру-любителю Линусу Торвальдсу из Хельсинки. Испробовав Minix, он решил, что система вполне даже интересная, но требует доработки, и приступил к разработке собственной операционки. А в это время некий Ричард Столлмен занимался своим проектом GNU, создавая бесплатное программное обеспечение. Он даже разработал собственный вариант компилятора языка С. Но тогда не было подходящей ОС для его работы. То, что сделал на тот момент Торвальдс, привлекло внимание Столлмена, и они решили объединить усилия. С этого момента началась славная эпопея Linux.

    В сентябре 1991 появилась Linux 0.01. В нее были портированы gcc и bash (Born Again Shell). А к октябрю появилась и версия 0.02. Уже тогда все это распространялось бесплатно, вместе с исходниками и документацией, так же, как и в наши дни. Но пока что Linux все же оставался любительской осью.

    Почти каждый месяц появлялись более доработанные версии Linux, но до 0.10 версии все они поддерживали только AT-винчестеры, загружались сразу в bash и не имели функции логина пользователей. В 0.11 версии появилась поддержка мультиязычных клавиатур, флоппи-дисководов, VGA– и EGA-дисплеев.

    Совсем скоро начали появляться различные варианты Linux, собранные энтузиастами и профессионалами по всему миру. Появились всем известные Red Hat, Debian, Caldera, а также различный софт и утилиты. Еще больше внимания к этой оси привлекло появление в ней графического интерфейса X-Window и KDE.

    Позднее Linux был портирован на карманные устройства Palm и PocketPC, а также на Mac (MacOS X). Кроме этого, были добавлены утилиты и эмуляторы для запуска приложений от других операционок. Например, в наше время в Linux с помощью таких утилит можно запускать такие программы, как 1C-Бухгалтерия, и некоторые компьютерные игрушки. В современные дистрибутивы уже входит огромный набор софта и утилит на все случаи жизни: от web-серверов и средств разработки до аналогов клиента ICQ и проигрывателя WinAmp, остается только выбрать при установке, что тебе нужно поставить прямо сейчас. Но главное – это, конечно, как и у всех UNIX-подобных, открытый код и возможность настроить систему под свое железо и свои требования или изменить ее до неузнаваемости – были бы необходимость, желание и умение программировать. Не менее важна, так как Linux развивается быстро и постоянно выходят новые дистрибутивы, возможность обновления и изменения ядра системы, безо всяких переустановок системы или программ (не то что Винда!).

    В наше время Linux продолжает успешно развиваться и привлекает к себе внимание все новых и новых пользователей. Именно эта ось, а также FreeBSD, стали основным выбором администраторов web-серверов и корпоративных систем. Понятие «UNIX» давно уже не означает какую-то конкретную стандартную ось, а объединяет все операционки этого семейства, отвечающие определенным требованиям. В сетке всегда можно найти кучу софта и драйверов под всевозможные устройства, а в многочисленных форумах и конференциях – задать любой вопрос, на который обязательно ответят. Добро пожаловать в мир Open Source! :)

    История операционных систем

    1957 – первая операционная система для собственного вычислительного центра Bell Labs – BESYS.

    1960 – первые версии DOS от IBM, а также системы GECOS и CTSS.

    1965 – разработка операционной системы Multics компаниями Bell Labs и General Electric.

    1969 – появление UNICS (позднее – UNIX).

    1970 – официальное начало «эры UNIX», появление отечественных осей – ИПМ и Дубна.

    1971 – появление отечественного аналога DOS – ДОС ЕС, выпуск второй редакции UNIX, переписанной с Ассемблера на B.

    1972 – третья редакция UNIX, появление языка С, появление VM (VM/370).

    1973 – четвертая редакция UNIX, полностью переписанная на С.

    1974 – пятая редакция UNIX, бесплатное распространение исходников и то самое время, когда UNIX пошел в массы.

    1975 – шестая редакция UNIX (UNIX V6), начало коммерческого распространения.

    1976 – появление BSD.

    1977 – UNIX V/32, появление третьей редакции BSD, в основу которой лег UNIX V/32.

    1978 – очередная отечественная операционка – ВК 1010.

    1980 – начало бесплатного распространения BSD (позднее – FreeBSD), появление операционки QDOS.

    1981 – появление первой версии PC-DOS.

    1982 – появление SunOS (позднее – Solaris), выход UNIX System III, появление MS-DOS, появление отечественной операционки – СВМ.

    1983 – появление SuperDOS, а поздней, операционной системы Novell NetWare.

    1984 – выпуск второго релиза UNIX System V, появление Xenix, появление MacOS.

    1985 – появление MS Windows 1.0.

    1986 – появление операционки Apple Desctop (по некоторым возможностям сравнима с Windows 95!).

    1987 – третий релиз UNIX System V, выход OS/2, выход MS Windows 2.0, появление отечественной оси с графическим интерфейсом – ГРИС, появление простой UNIX-подобной оси Minix как учебного пособия с открытым кодом.

    1988 – появление GeOS (клон MacOS, и предок BeOS!).

    1990 – появление Windows 3.0.

    1991 – выпуск первой официальной версии Linux.

    1993 – появление 32-разрядной OS/2 (2.1), появление очередного клона MacOS – оси GsOS.

    1994 – появление OS/2 Warp 3.

    1995 – появление MS Windows 95 и NT 4.0.

    1996 – появление BeOS.

    1998 – выход MS Windows 98.

    2000 – выход MS Windows 2000.

    2001 – выход первого отечественного дистрибутива Linux – ALT-Linux, выход MS Windows XP.

    Основные особенности UNIX-систем:

    – эффективная реализация многозадачности (вытесняющая многозадачность);

    – многопользовательский режим;

    – наличие встроенных средств защиты информации;

    – виртуальная память и свопинг;

    – единая иерархическая файловая система, имеющая древовидную структуру независимо от количества и типа физических носителей информации, установленных в системе (каждый носитель является каталогом); в Linux даже другие файловые системы, имеющиеся на машине, являются отдельными каталогами;

    – унификация операций ввода/вывода;

    – переносимость системы благодаря использованию языка С;

    – кэширование физического диска для увеличения скорости доступа к данным;

    – разнообразные средства взаимодействия процессов;

    – мощный и гибкий пользовательский интерфейс;

    – мощный командный язык;

    – открытый код как самой системы, так и большинства программ для нее;

    – бесплатное распространение большинства UNIX-систем;

    – большое количество бесплатного и качественного софта.

    В 1996 году в лаборатории Лос Аламос был произведен эксперимент по расчетам ядерного взрыва, в ходе которого соединили 68 компов с Linux в одну систему, чтобы они работали как один большой многопроцессорный суперкомпьютер. Скорость вычислений этой системы достигла 19 миллиардов действий в секунду.

    От Multics UNIX унаследовал иерархическую древовидную структуру файловой системы, концепцию файла и процесса, командный интерпретатор для пользователя, многопользовательский режим работы…

    Новые редакции UNIX рождались очень часто. Всего за период с 1971 года по 1979 год появилось 11 редакций!

    Даже мелкомягкие оставили свой след в развитии UNIX! XENIX – совместный продукт SCO и Microsoft!

    Меньше чем через полгода после своего появления, к версии 0.96, Linux распространился уже далеко за пределами Финляндии.

    Отец демона и пингвина / Особенности архитектуры UNIX

    Vint (vint@vpost.ru)

    «Linux в массы!», «FreeBSD на рабочий стол!» – эти лозунги все чаще можно увидеть в интернете. Народ захотел Open Source на свои домашние машины. Но что же объединяет Linux и BSD? Этого многие не понимают. По сути, Linux и все возможные клоны BSD происходят от одной системы – UNIX. Давай рассмотрим архитектуру этой ОС более подробно.

    Когда мы были молодые, а компьютеры – большие

    На дворе 1969 год. К компьютерам имеют доступ лишь избранные профессора крупнейших университетов. Время работы у терминала строго ограничено, и за каждой минутой загрузки машины ведется строгий учет. Стоимость одного вычислительного центра приближается к бюджету небольшой страны. Именно на такой машине, называвшейся PDP-7, программисты Денис Ритчи (Dennis Ritchie), Радд Кенедей (Rudd Canaday), Дуг Макилрой (Doug McIlroy) и Кен Томпсон (Ken Thompson) в течение месяца написали ОС, оболочку, ассемблер и редактор.

    Следующей вехой развития UNIX считается его первое портирование на машину с другой архитектурой. На более производительном PDP-11/20 UNIX был полностью переписан с ассемблера на язык Би («B»). С 1970 до 1972 UNIX развивался компанией AT&T Bell Lab. В 1973 году Ритчи и Томпсон перевели операционную систему на язык С. К этому моменту UNIX был установлен на 25 машинах – немного, но если ты вспомнишь, сколько всего компьютеров было тогда в мире, то поймешь, что означали эти инсталлы новой системы. ОС обретала новое звучание в компьютерном мире, о ней начали говорить как о серьезном проекте. Пятая редакция проекта внесла огромный вклад в развитие системы в целом – исходные коды UNIX стали доступны студентам университетов. Началась эра массового увлечения *nix и его клонами. В университете г. Беркли собирается группа разработчиков и начинается выпуск клонов UNIX – BSD-систем. После этого происходит непрерывное совершенствование исходных кодов системы, но концепция операционной системы сложилась именно в 70-е годы двадцатого столетия. Последующие версии и клоны устраняли слабые места и увеличивали функциональность программной модели, но фундаментальных изменений не вносили.

    Основные плюсы системы

    Многопользовательская ОС

    Уже в 70-е годы ОС UNIX была многопользовательской системой, то есть за одним компьютером могло работать несколько пользователей одновременно. При этом система заботится о том, чтобы всем хватало ресурсов, чтобы пользователи не могли оказать никакого влияния друг на друга.

    Многозадачность

    В UNIX используется вытесняющая многозадачность, которая базируется на понятии приоритетов и квантования процессорного времени. Все процессы разбиваются по нескольким группам в зависимости от того, кто их запускает. Кроме этого, процессы-дети получают права родителей, изменение приоритета возможно только системным вызовом, инициируемым ядром или пользователем root. Основными считаются три класса: приоритет реального времени, системных процессов, класс процессов разделения времени. Но не только отношение к определенному типу приоритетов регулирует процессорное время для данного приложения, еще существует понятие кванта времени. Грубо говоря, эта переменная регламентирует, через сколько тиков системных часов следует передать управление следующему процессу.

    Переносимость кода

    Одним из самых существенных достоинств всех клонов UNIX является возможность переноса ОС практически под любые платформы. Если раньше ядро и некоторые драйвера были написаны на ассемблере, дающем заметный прирост производительности, но, вместе с тем, практически полную несовместимость с архитектурами, отличными от данной, то сейчас вся система написана на языке высокого уровня C. Это означает, что для запуска UNIX на любой новой архитектуре достаточно портировать компилятор языка С и пересобрать систему из исходных кодов. Таким образом, мы получаем практически универсальную ОС со множеством приложений.

    Свободное распространение

    Это один из основных плюсов UNIX-клонов наших дней. Изначально UNIX была платной и закрытой системой, но с течением времени все изменилось в лучшую сторону, и сейчас активно развиваются две основных лицензии для *nix: BSD (под ней выпускается FreeBSD) и GPL. Основное отличие BSD от GPL в том, что, в принципе, по инициативе разработчиков, возможно превращение продукта из свободного в закрытый, коммерческий. Самая демократичная и популярная на сегодняшний день – это GPL, под ней выпускается Linux и его клоны. Существуют также разного вида коммерческие лицензии, основанные на продаже ОС.

    Нетребовательность к ресурсам PC

    На сегодняшний день для х86 *nix-системы – самые малотребовательные относительно аппаратной стороны машины. Для работы роутера на *BSD достаточно 386-го процессора и 4 мегабайт памяти. Обеспечить данные функции на других распространенных системах при такой конфигурации PC просто невозможно. Причем даже на такой слабой машине, по нынешним меркам, UNIX показывает все свои лучшие стороны. Объяснить такое поведение можно, рассмотрев архитектуру ОС более подробно.

    Аксиомы UNIX-like ОС

    Собственная файловая система

    Основными понятиями файловых систем *nix являются следующие:

    Каталог (аналогия в Windows – папка, директория) – это, прежде всего, файл, содержащий системную информацию о файлах, входящих в данный каталог. В директории могут быть каталоги более низкого уровня, обычные файлы, специальные файлы. Каталоги создает пользователь или система при выполнении определенных действий.

    Обычный файл (аналогия в Windows – все файлы системы). Вся информация, хранимая на компьютере, содержится в обычных файлах. Создавать, удалять, изменять файлы может любой пользователь, имеющий права на запись в каталог и изменение файла. Именно в файлах содержатся все системные программы, настройки и данные.

    Специальный файл – особый тип файлов, присущий *nix-системам. Представляет собой служебную запись на диске, символизирующую сокет, участок памяти, процесс и некоторые другие вещи. Чаще всего эти файлы имеют нулевую или очень маленькую длину и после перезагрузки удаляются. Специальные файлы создает ядро системы или прикладные программы по мере необходимости. Обычный пользователь создавать такие записи не может. Главная особенность этого типа – файлы создаются и удаляются системой автоматически, юзер чаще всего не может прочитать их содержимое – они не содержат данных, доступных для обработки.

    Вся необходимая для работы с файлом информация хранится в особой системной таблице, которая является индексным дескриптором (inode) данного объекта. Индексные дескрипторы всех файлов равны по размеру – 64 байта. В них хранятся данные о типе файла, физическом расположении файла на диске, размере в байтах, дата создания, время последней модификации, последнего обращения к файлу, информация о привилегиях доступа. Все inode пронумерованы и содержатся в особом отделе файловой системы. Для ОС порядковый номер файла есть уникальное имя файла. Полное имя объекта по его номеру устанавливается с помощью таблицы иерархии каталогов.

    Существует один главный администратор – root, и он бог данного хоста

    Эта особенность полностью соответствует духу UNIX: если ты – админ, то это подразумевает твои обширные знания в данной области. Власти root’a хватит на любое действие в системе: от прочтения домашних каталогов пользователей до удаления всех файловых систем на жестком диске, причем он даже не получит ни одного предупреждения от системы. Концепция UNIX подразумевает грамотного админа-root’a, в отличие от творения Б.Г.

    Юзеры могут делать только то, что явно разрешено

    Одна из самых сильных сторон пользовательской модели *nix-систем. Администратор при создании учетной записи нового юзера дает ему определенные права и возможности для работы с системой. Разделение прав на файлы происходит с помощью атрибутов. Достаточно запретить чтение файла, установив соответствующий бит, и никто, кроме root’a, не сможет узнать содержимое. Кроме очень гибкой модели атрибутов, админ делит пользователей на реальных, то есть тех, которые могут заходить с терминала или удаленно по сети, и на специальных – тех, у кого есть права для выполнения какой-либо из определенных задач. Например, обычный пользователь Vasya, имея аккаунт на машине, может подключаться к ней с помощью клавы-монитора (как обычный юзер локального ПК), через ssh из любой точки планеты (если нет ограничений на место подключения), используя модем и терминальную программу (minicom, telemax, стандартный терминал Виндов). При любом способе подключения юзер будет находиться в системе, как будто он работает с физического локального терминала. Специальные пользователи (виртуальные), такие, как, nobody, ftp, anonymous, присутствуют в системе только как аккаунты, и вход с этих учетных записей через терминалы невозможен. Они используются для общесистемных сервисов с целью ограничения их прав: так демон ftp запускается от пользователя ftp, Apache – от nobody; это необходимо для повышения безопасности и стабильности системы.

    У демонов минимально необходимые привилегии

    В первоначальных редакциях UNIX этого не было, но с приходом сетей и хакеров разработчики задумались и доработали концепцию системы. На практике это выглядит так: у каждого крупного сервиса есть «свой» специальный пользователь, от его учетной записи запускаются все процессы данного сервера. Так, например, для web-сервера Apache практически всегда создается специальный пользователь nobody, на все рабочие каталоги ставится владельцем этот юзер и раздаются соответствующие права, после чего в init-скрипте прописывается логин «nobody». В результате – резкое повышение безопасности всего хоста: даже если будет найдена уязвимость в демоне, то взломщик получит права непривилегированного пользователя apache.

    Наличие средств для выполнения простых действий

    *nix-системы отличаются от множества других ОС тем, что любое самое сложное действие можно легко разбить на несколько более простых, реализуемых с помощью встроенных средств. То есть если пользователь хорошо знает возможности UNIX-архитектуры и четко представляет себе результат своих трудов, то добиться его будет очень легко. Примерами средств, заметно упрощающих реализацию любой задачи, могут служить такие общеизвестные приложения, как cron (периодический запуск задач), перенаправления выводов и вводов с терминала, syslog (логирование всех действий в системе), различные комбинации действий на ФС и многое другое.

    Свопинг позволяет работать эффективней

    Механизм виртуальной памяти поддерживается всеми клонами UNIX на уровне ядра. Есть два основных способа организации swap-пространства: раздел на жестком диске (или отдельный винчестер, только под swap) или файл на существующем разделе. Использование раздела или отдельного винчестера предпочтительно из соображений скорости обмена данных.

    В UNIX введен принцип перемещения виртуальных страниц процесса из swap-раздела в оперативную память по запросу. При запуске любого приложения ядро UNIX загружает лишь минимально необходимый для запуска кусок кода, после чего передает ему управление. После этого работа, как с физической памятью, так и со swap, будет регулироваться запросами программы. Если в ходе выполнения софтины обнаружится, что запрашиваемый виртуальный адрес данного дескриптора процесса отсутствует, то менеджер виртуальной памяти обратится к диску и загрузит необходимый кусок дампа в оперативку. Когда будет использована вся доступная физическая область, менеджеру виртуальной памяти придется выгрузить какую-то часть данных на диск, о чем будет сделана соответствующая запись. Для выбора вымещаемых страниц необходимо провести анализ, чтобы не сбросить сегмент, необходимый для работы, через несколько тактов. Эту функцию выполняет специальный процесс pageout.

    Главное – загрузиться!

    «Loading UNIX» – фраза, говорящая о многом. Рассмотрим два основных способа загрузки ядра системы. Почему ядра, а не всей ОС? Потому что будет отличаться только загрузка ядра, после того как оно будет в памяти, все остальное загружается стандартной и отлаженной процедурой. Самый простой вариант – это Boot-дискета. Ход загрузки системы при таком способе выглядит очень просто: после начального теста BIOS передает управление загрузочной области дискеты, где содержится код, распаковывающий ядро UNIX в оперативную память. После распаковки начинается стандартное монтирование корневого раздела. Но такой простой вариант применяется только для дискет без файловых систем. Для винчестеров используют несколько усложненный вариант загрузки. Причина этого достаточно простая: ядро не может быть записано в первые сектора, так как там находится таблица разметки жесткого диска и описания всех ФС, при порче этих данных использовать хард просто невозможно. Поэтому разработчики применили усложненный алгоритм инициализации ядра. После POST-теста управление, как обычно, передается загрузочной области жесткого диска, где хранится миниатюрная программа, вся работа которой сводится к запуску главного загрузчика ОС, обладающего достаточной функциональностью и гибкостью для запуска ядра. Таким «большим» загрузчиком может быть LILO, GRUB или стандартный BSD-loader. А уже этот загрузчик копирует ядро в память, передав ему необходимые параметры. Как видишь, при загрузке с винчестера используются двухуровневые программы.

    Я хочу продолжить рассказ о схеме загрузки UNIX-систем, так как загрузка является еще одним архитектурным решением сообщества разработчиков ОС. Существует две основные схемы загрузки UNIX и его клонов: BSD и System V. BSD-тип применяется во многих BSD-системах и в некоторых дистрибутивах Linux (Gentoo, Slackware). Схема BSD проще System V, но и возможностей у нее меньше. Рассмотрим более прогрессивную System V. Сначала загружается ядро ОС, будь то UNIX, BSD-клон или Linux-клон, после этого ядро монтирует корневую файловую систему, ссылка на которую ему передана параметром загрузчика. При удачном завершении операции начинается поиск служебного каталога /sbin; если он не обнаруживается, то система выдает «Kernel panic». Затем происходит запуск главного процесса Init: отдается команда /sbin/init. После чего уже Init обращается к каталогу /etc и ищет там файл inittab, где указан необходимый уровень запуска. Осталось не так уж много: init читает и анализирует содержимое своего конфигурационного файла, а затем запускает необходимые сервисы, монтирует локальные файловые системы, поднимает сетевые интерфейсы, монтирует уваленные файловые системы и запускает оставшиеся сервисы. На завершение процесса загрузки укажет (если система загрузится не в multiuser mode) появившееся приглашение ввести логин и пароль пользователя.

    Ядро – всему голова!

    Главным, определяющим архитектуру системы звеном является ядро. Все ядра *nix-систем должны выполнять следующие функции:

    – управление работой процессов: создание, завершение и организация взаимодействия между ними.

    – планирование очередности работы процессов, переключение выполняемых задач. Сюда входит и расстановка приоритетов для задачи управления мультипроцессорными системами.

    – выделение процессу необходимой оперативной памяти. При ее недостатке – включение механизма swap. Также ядро следит за обращением приложения к запрещенным участкам, к соседним сегментам и в случае генерации процессорного исключения снимает сбойный процесс, записывает сообщение в системный журнал.

    – предоставление высокоуровневого доступа к винчестеру и другим носителям информации. Ядро подключает файловые системы и дает простой интерфейс по взаимодействию с ними. Все это делается с учетом прав на файлы и квот для пользователя.

    – Управление периферией. Предоставление процессам доступа к внешним устройствам. Обеспечение работы всей периферии – задача ядра и его окружения. Драйвера устройств могут как включаться в ядро, так и быть подгружаемыми модулями. Использование модулей невозможно в некоторых старых представителях семейства UNIX.

    init 6

    *nix-система имеет достаточно простую и логически правильную архитектуру. ОС UNIX устойчива и дружелюбна, вот только друзей для себя она выбирает очень и очень тщательно.

    Книги о UNIX

    http://ois.mesi.ru/html_docs/BACH/ – подробная книга, которую можно скачать в 1 zip-архиве.

    http://linuxdoc.chat.ru/obsh/rukadmina/index.html – книга 95-го года, но своей актуальности она не потеряла.

    NO WARRANTLY ABSOLUTED – девиз модели Open Source наших дней.

    При анализе первого варианта UNIX, написанного на языке C, Ритчи указал на заметно возросший объем (20-40%) и на ухудшение производительности ОС в целом по сравнению с ассемблерным вариантом кода.

    В системе UNIX используется вытесняющая многозадачность, базирующаяся на понятиях приоритета и квантования.

    ОС для Кремля / Ищем самую защищенную систему

    Dr.Vint (vint@vpost.ru)

    Стабильная, безопасная, неуязвимая, отказоустойчивая – вот какие характеристики являются основополагающими при выборе операционной системы для ответственной работы. Эта статья поможет с выбором именно базовой операционной системы, максимально защищенной и удобной.

    Самыми надежными считаются *nix. У них очень много плюсов – от простой логики работы с пользователем до высокой отказоустойчивости. Но не йогурты одинаково полезны, а *nix одинаково стабильны – некоторые из них просто не рассчитаны на создание безопасных хостов. Определимся с требованиями к системе, при выполнении которых ее смело можно будет ставить на сервера и другие критически важные системы. Итак, ОС должна иметь жесткую политику разграничения доступа, должны быть встроенные или подключаемые средства для создания комплексов firewall, необходимо ПО для отражения атак, наличие регулярных обновлений, возможность быстрого обнаружения взломов.

    Взглянем на рынок ОС сегодняшнего дня. Мой выбор пал на следующие дистрибутивы: Mandrake 10 Official, Gentoo Linux 2004.2, FreeBSD 5.1, OpenBSD 3.5, QNX 6.2.1.

    InTrO

    Нам нужен максимально безопасный и стабильный дистрибутив. Самые популярные дистрибутивы Linux базируются на RPM-пакетах. Представителем мира RPM-base стал последний релиз Mandrake. Я выбрал его по нескольким причинам: все компоненты дистрибутива проходят тщательное тестирование на совместимость, используется собственная модель взаимодействия с пользователями, высокая стабильность, проверенная годами. Можно было использовать канонический Red Hat, но политика, направленная на зарабатывание денег, отходит от классической UNIX-модели, что явно не в пользу всей Федоры. В обзоре есть еще один вариант Linux-систем – Gentoo 2004.2. Это классический source-base дистрибутив. При установке такой системы ты полностью сам закладываешь всю безопасность хоста. Кроме этого, в Gentoo очень хорошо продумана схема обновления ПО через интернет, что позволяет всегда использовать самые безопасные и защищенные версии софта.

    Самым ярким и известным представителем линейки BSD является FreeBSD. Очень многие сервера крупных организаций используют именно этот клон UNIX. Из основных плюсов можно выделить проверяемую годами архитектуру, отлаженную схему взаимодействия компонентов, минимальное наличие известных уязвимостей. Еще очень сильно привлекает развитая система портов, которая позволяет обновлять всю систему, используя всего одну команду. Второй перспективной реализацией BSD-модели стала OpenBSD. Мой выбор пал именно на эту систему, потому что ее создатели изначально готовят свое детище к работе в сложнейших сетевых условиях: «Вот уже несколько лет, как не было зарегистрировано ни одного удаленного взлома машин, работающих под управлением OpenBSD в конфигурации по умолчанию». И последняя система, о которой пойдет речь в нашем обзоре, – QNX. Это даже не UNIX в том понимании, которое близко нам. QNX – коммерческая ОС жесткого реального времени, совместимая со стандартом POSIX. То есть она может работать с очень многим ПО, написанным для UNIX. Основное отличие QNX от всех остальных операционок в том, что это система реального времени, взломов которой зарегистрировано не было вообще. После небольшого знакомства с нашими кандидатами предлагаю перейти к исследованию безопасности данных систем.

    LINUX Mandrake

    http://www.mandrakelinux.com

    Популярный дистрибутив Linux на рабочем столе. О дружественности продуктов этой компании говорит весь интернет. А что же с безопасностью? Уже в начале установки можно сделать выбор: тип expert или обычный. Следует отдать предпочтение первому варианту: чуть больше возможностей для тонкой настройки ОС при инсталляции. Пожалуй, самым главным этапом во всей установке для нас станет выбор уровня безопасности. Именно так MandrakeSoft подготовила свой дистрибутив к серверному рынку. Первый и самый простой уровень – стандартный. Этот вариант практически не предусматривает никакого контроля над безопасностью системы. Так, любой пользователь сможет читать произвольные каталоги, кроме домашних директорий других юзеров. Кроме этого, некоторые пользователи смогут просмотреть содержимое конфигурационных файлов /etc. Полностью отсутствуют проверки на новые/изменившиеся файлы в системе: разработчики считают, что за день столько софта наставишь/наудаляешь, что читать мегабайтные логи своих действий не возникнет никакого желания. Также возможен непосредственный вход пользователя root прямо по SSH или с терминала, что кому-то удобно, но на самом деле очень опасно. Как видишь, первый уровень ориентирован на домашнее использование и на звание секьюрного варианта даже не претендует. Следующий уровень – высокий – также рассчитан на домашнее использование и поэтому нас тоже не интересует. Пожалуй, единственным приемлемым вариантом станет параноидальный уровень. Для серверов следует использовать только его. Вот что он дает: невозможен непосредственный вход пользователем root, никто не может читать корневую файловую систему – у всех файлов и каталогов выставлены права на чтение только для root. Кроме этого, производители значительно проработали механизм демонов – на этом уровне полностью реализована модель безопасности каждому демону «по потребностям», то есть любой сервис будет запускаться от своей учетной записи. Еще каждую ночь будут проводиться автоматические проверки на бэкдоры и руткиты – при любых изменениях файловой системы составляется протокол, который отправляется администратору. Защита от внешних атак реализуется с помощью обязательной установки пакета iptables – системы Firewall. Mandrake постарается автоматически выбрать необходимые правила и применить их для данного хоста. Причем у фаервола будет активирована опция, отвечающая за отражения попыток сканирования портов – практически ни один порт-сканер не сможет определить наличие работающих сервисов. Таким образом, параноидальный уровень старается создать действительно защищенную крепость как для атак извне, так и для локальных взломов ;).

    LINUX Gentoo

    http://www.gentoo.org

    Это, ИМХО, один из лучших дистрибутивов Linux по всем параметрам. Достать систему очень просто: ее можно скачать из интернета (www.gentoo.org) либо заказать 2 CD в Linux-центре (www.linuxcenter.ru). Установка Дженту радикально отличается от аналогичной процедуры в Mandrake-like-дистрибутивах. В этой сборке тебе придется все делать руками и консолью. Именно поэтому не имеет смысла говорить о заранее предустановленных уровнях безопасности – их просто нет. Весь процесс инсталляции ты проводишь сам, и если твои знания Linux ограничиваются уровнем KDE, то ни о какой безопасной системе даже не мечтай. Это я не к тому, что установить Gentoo трудно, а к тому, что создать защищенный хост на его базе новичку сложнее. Но, если ты владеешь секретами Linux в достаточной степени, то Дженту – для тебя. Вот почему я выбираю его: после установки на моем сервере есть только то, что я сам выбрал из исходников. То есть никаких левых и бажных сервисов не будет. Например, если это почтовый сервер, то на нем и будет установлен самый свежий postfix, собранный из сорцов, с оптимизацией и повышенной защитой. Всяких апачей и джабберов не будет даже в проекте. Такой подход к безопасности ОС позволяет держать на сервере минимальный набор самых необходимых демонов. Но создать Linux исключительно под свои нужды – это только часть возможностей Gentoo. Однажды установив и настроив систему, можно надолго забыть о поддержании сервера в боеспособном состоянии. У нашего пингвина есть встроенные средства обновления и установки ПО прямо из интернета, без участия администратора! Именно поэтому я считаю Gentoo самым секьюрным дистрибутивом Linux на сегодняшний день. Докажу тебе это, раскрыв сущность процесса обновления ОС. Установка нового ПО на машину с Gentoo происходит с помощью утилиты emerge. Принцип работы этой программы очень прост: когда root (или сrond) отдает команду «emerge Имя_Программы», система идет в интернет, скачивает сорцы этой программы с сайта поддержки Gentoo, компилирует и устанавливает бинарники. Все происходит в полностью автоматическом режиме. А если учесть, что софт для Дженту обновляется практически каждый день, то ты поймешь, что грамотный админ и Gentoo Linux создадут суперсекьюрный сервер. Достаточно один раз разобраться во всем и настроить, к примеру, тот же Apache, а потом записать в Crontab команду «emerge Apache» на ежедневное выполнение, и все! Взломать систему через уязвимость в Apache станет практически невозможно (на каждый неуязкимый Апач найдется свой приватный эксплоит :) – прим. AvaLANche'а)!

    FreeBSD

    http://www.freebsd.org

    Вот добрались и до прямых потомков UNIX. Пожалуй, FreeBSD – это самый известный клон UNIX на сегодня. Разработчики этой системы стараются выпускать только стабильные и хорошо отлаженные продукты. Именно поэтому, хотя вся система доступна в исходных кодах, добавлять патчи и новые возможности в ядро могут только разработчики, входящие в официальную группу поддержки проекта. Это отличает FreeBSD от всех остальных систем Open Source. Создатели нацеливают свой продукт на серверный рынок: во время установки у тебя будут спрошены не только сетевые параметры, но и то, какие сервисы тебе необходимы, и даже будет предложено организовать FTP-доступ сразу после инсталла. При первом запуске необходимо начать обустраивать защиту сервера. Система позволит провести кое-какие настройки и с помощью утилиты /stand/sysinstall. Но там представлен очень и очень скудный набор инструментов. Всю настройку ОС нужно проводить ручной правкой конфигов. И хотя разработчики постарались снабдить FreeBSD подробной документацией на английском языке, они не учли того, что для создания защищенного хоста необходимо затратить огромное количество времени на перелопачивание конфигурационных файлов. А если ты не профессионал, то и на чтение огромной кучи документации. Использование ее на сервере оправданно только в том случае, если твои знания именно этой системы тебе это позволяют. Стабильность хоста под FreeBSD будет определяться не безглючностью софта, а грамотностью админа. Практически все взломы этой ОС имели в своей основе не ошибки в демонах, а неправильное администрирование. Я бы не рекомендовал ставить Фряху админам средней руки – может не хватить времени на реализацию мечты о защищенном сервере. Злые негодники поломают систему, прежде чем админ успеет разобраться со всеми тонкостями настройки.

    OpenBSD

    http://www.openbsd.org

    OpenBSD – общепризнанный лидер по безопасности. Текущая версия – 3.5. Установка этой системы протекает аналогично установке всех остальных BSD с тем лишь отличием, что все пронизано духом безопасности. После инсталла остается не так уж много: скачать и установить необходимые демоны. Просто в OpenBSD ставится только самое необходимое для запуска. Все дополнительные демоны и сервисы администратор добавляет и настраивает сам, и это, по-моему, лучший подход к безопасности. Кроме того, в основе OpenBSD лежат хорошо проверенные и отлаженные исходные коды, ежедневный аудит программного обеспечения приносит свои плоды: за несколько последних лет не было зарегистрировано ни одного взлома (в дефолтовой конфигурации – важное прим. ред.). Сущность аудита OpenBSD достаточно проста: существует небольшая группа высококвалифицированных IT-специалистов, которые постоянно анализируют исходные коды всей системы. И если учитывать, что они предлагают только базовую конфигурацию, то можно верить, что проверка будет проведена очень качественно. Предельно сильная внутренняя защита подкрепляется переработанным и усложненным комплексом Firewall. И дополняет общую картину укрепленности собственный сайт, на котором ежедневно выставляются все обновления для текущей версии системы. Неприхотливая к квалификации админа как IT-специалиста, OpenBSD завоевывает рынок за счет своей подготовленной грамотной настройки. Таким образом, лучшим секьюрным дистрибутивом линейки BSD является OpenBSD: для мастеров она покажет мощь и стабильность UNIX с возможностью гибкой настройки, а для новичков – защищенность и отказоустойчивость прямо из «коробки».

    QNX

    http://www.qnx.com

    Я не случайно поставил эту ОС последней в обзоре – она не клон UNIX. Это самостоятельная ОС, но очень занятная. Разработки этой системы ведутся уже более двадцати лет. Проект полностью закрытый, коммерческий. Лицензия на QNX для разработчика стоит 6000$. Я не ошибся – именно долларов, цена же полной версии переваливает за 15 килобаксов. Но существует некоммерческая версия, доступная бесплатно. В свободной версии есть практически все необходимое для работы данной ОС на сервере, включая средства для сборки GNU-программ. Самое главное в этой системе – то, что она полностью отвечает требованиям ОС реального времени, то есть ядро в принципе не может зависнуть ни при каких обстоятельствах ;). И, кроме этого, данная ОС гарантирует ответ сервера через очень малый промежуток времени. За всю историю QNX не было найдено ни одной уязвимости в коде системы. Сразу виден серьезный подход программистов QSSL. Как видишь, пока все просто идеально. Но это все относится к самой системе. Своего же ПО, необходимого для создания полноценного сервера, у нее нет. QNX используется в основном во встраиваемом оборудовании, для узкоспециализированных задач на производстве. Но отсутствие софта именно для QNX никого не остановило: я все чаще встречаю на просторах рунета админов-энтузиастов, запускающих сервера на ее базе. Да и сам, чего скрывать, перевел свой web-сервер на эту систему и пока нисколько не жалею. Итак, что нужно для создания суперзащищенного сервера реального времени на базе QNX? Самое главное – это дистрибутив системы. Для нашей задачи вполне достаточно NE (Non-Commercial) версии, которая поставляется на 1 CD. Существует несколько способов получения этого диска. Первый – скачать с официального сайта www.qnx.com образ диска и записать его самому. В этом варианте есть неприятные моменты: сливать надо около 300 мегов, причем выкачать надо за один раз все – докачка не поддерживается. Кроме того, скорость скачки должна быть не меньше 10 Кб в секунду, иначе их сервер будет закрывать сессию и придется начинать все с начала. Другой вариант – попробовать получить по почте бесплатно полную версию QNX для вузов (напряги декана – и будет тебе счастье!) (вся информация на сайте www.swd.ru). И, наконец, самый простой и доступный путь – заказать книгу «Операционная система реального времени QNX: от теории к практике»., которая продается во многих интернет-магазинах, причем обойдется тебе она вместе с диском не дороже 250 руб. После простой инсталляции ты попадешь в самую быструю и стабильную ОС. Все современные версии поддерживают TCP/IP-протокол в полной мере, поэтому тебе останется только установить и отконфигурировать серверное ПО. Кстати, получить весь необходимый софт можно либо на страничке одного из участников проекта www.qnx.org.ru , либо собрав его самостоятельно из исходников, ведь система POSIX-совместима. Эта ось, пожалуй, лучший выбор, но только для профессионалов и тех людей, которые готовы бороться с трудностями.

    Хеппи энд

    Вот и все, что я хотел рассказать о дистрибутивах сегодняшних дней. Подведем итоги. Среди Linux-сборок самый лучший выбор для защищенного хоста – это Gentoo Linux. Если нужно поставить быстро и более-менее качественно сервер и нет знаний или желания самому создавать защиту – Mandrake 10 Official с максимальным уровнем безопасности очень даже неплох. Если ты поклонник демона, твой выбор исключительно OpenBSD – разработчики очень хорошо позаботились о создании секьюрной системы. Для любителей сложных путей – QNX. Ее использование характеризуется отсутствием зависаний сервера, и микроядерная система реального времени гарантирует тебе это.

    Мнение эксперта

    Антон Карпов, специалист по сетевой безопасности, системный администратор:

    Разница между BSD и Linux должна быть понятна каждому: первое есть полноценная ОС, второе – лишь ядро операционной системы. Из-за этого фундаментального различия вариации дистрибуций BSD можно сосчитать по пальцам, тогда как дистрибутивов Linux как собак нерезаных. Что же лучше с точки зрения безопасности? Наверное, имея полное окружение (ядро, userland, демоны, системные утилиты), построить защищенную систему легче, так как проще работать с гармоничным набором исходников, располагающимся в едином дереве (/usr/src) и подгоняемым друг к другу годами. Все же, что можно добавить к ядру Linux, – это патчи, усиливающие его иммунитет. Но помимо этого нужно как минимум озаботиться аудитом многочисленных утилит, необходимых для работы сервера и написанных разными людьми, с разным стилем программирования, подчас с разной идеологией. Поэтому, наверное, security-патчей для ядра Linux огромное количество, однако заслуживающих внимание security-oriented дистрибутивов – много меньше. Максимум, что делают их вендоры, – проводят анализ кода да собирают пакеты компилятором с защитой от переполнения стека. Такие проекты, как privilege separation, system calls enforcement, jail, рождаются либо доводятся до ума именно в BSD-системах (OpenBSD, FreeBSD).

    Однако если отойти от классической модели безопасности UNIX в мандатные модели и требовать реализацию MAC, DTE, RBAC, то консервативная BSD здесь безропотно отдает инициативу Linux, в мире которого помимо тех же патчей (SeLinux, RSBAC) существуют целые проекты (Gentoo SeLinux), направленные на построение законченной системы, удовлетворяющей совершенно новому по качеству классу безопасности.

    На текущий момент последняя версия QNX – 6.3.

    http://www.freebsd.org/ru/index.html – русская версия официального сайта FreeBSD.

    OpenBSD представляет собой минимально необходимые компоненты системы, но они предельно стабильны.

    Главный плюс Mandrake – простота и доступность.

    25 мая 2004 года стал доступен для скачивания десятый релиз Mandrake Linux.

    Gentoo Linux взял все лучшее и от BSD – скрипты инициализации и систему портов, и от Linux – простоту и удобство.

    Первым стабильным релизом FreeBSD пятой ветки станет FreeBSD 5.3. Дата выхода – 3 октября 2004 года.

    Linux потенциально нарушает 283 патента. Линейка BSD пока гораздо спокойней.

    Решающую роль в создании безопасного хоста всегда играют знания администратора, а не ОС, используемая на сервере.







     


    Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх