Открыть сервис

POSIX.1e

POSIX.1e — это проект стандарта интерфейса переносимой операционной системы (POSIX), разрабатывавшийся комитетом IEEE 1003.1e для расширения базового стандарта POSIX.1 механизмами безопасности, в первую очередь — списками контроля доступа (ACL) и возможностями (capabilities). Проект был официально отозван в 1997 году, однако его спецификации и идеи легли в основу реализаций в большинстве современных Unix-подобных операционных систем, включая Linux, FreeBSD и Solaris.

История

Предпосылки создания

К началу 1990-х годов базовый стандарт POSIX.1 (IEEE 1003.1) определял минимальный набор системных вызовов и утилит для обеспечения переносимости приложений между Unix-системами. Однако модель безопасности в этом стандарте оставалась примитивной: она основывалась исключительно на классической дискреционной модели (DAC — Discretionary Access Control), где каждый файл имеет владельца, группу и три набора прав (чтение, запись, выполнение) для владельца, группы и всех остальных. Эта модель не позволяла гибко настраивать доступ для нескольких пользователей или групп, что стало критичным для многопользовательских систем и корпоративных сред.

Разработка проекта

В 1992 году рабочая группа IEEE P1003.1e начала разработку расширений безопасности. Параллельно велась работа над проектом POSIX.1f (дополнительные функции для работы с файловыми системами) и POSIX.1g (сетевые протоколы). К 1997 году проект POSIX.1e достиг стадии черновика (Draft 17), но так и не был принят как окончательный стандарт. Причинами отзыва стали:

  • Сложность и противоречивость спецификаций;
  • Отсутствие консенсуса среди производителей Unix (в частности, Sun Microsystems и IBM продвигали собственные реализации);
  • Появление альтернативных моделей безопасности (например, SELinux от NSA).

Наследие

Несмотря на отзыв, спецификации POSIX.1e были опубликованы как «неофициальный стандарт» и широко цитировались. В 2000-х годах большинство Unix-систем внедрили подмножества этих расширений. В Linux ACL и capabilities были добавлены в ядро версии 2.6 (2003 год), а полная поддержка POSIX.1e-совместимых возможностей появилась в glibc 2.3.

Основные компоненты POSIX.1e

Списки контроля доступа (ACL)

ACL позволяют задавать права доступа для произвольного числа пользователей и групп, а не только для одного владельца и одной группы. В POSIX.1e определены два класса ACL:

  • Минимальные ACL — содержат три записи: владелец, группа, остальные (аналог классических прав);
  • Расширенные ACL — могут включать записи для конкретных пользователей (user), конкретных групп (group), маску (mask) для ограничения прав, а также записи для всех остальных (other).

Каждая запись ACL имеет формат: [тип]:[идентификатор]:[права], где тип — user, group, mask или other. Идентификатор — имя пользователя или группы (или пустое поле для other). Права — трёхсимвольная комбинация rwx.

Пример ACL для файла: `` user::rw- user:alice:r-- group::r-- group:developers:rw- mask::rw- other::--- `` В этом примере владелец имеет чтение и запись, пользователь alice — только чтение, группа developers — чтение и запись, остальные — нет доступа. Маска ограничивает максимальные права для именованных пользователей и групп.

Возможности (Capabilities)

Возможности — это механизм разграничения привилегий, позволяющий предоставить процессу отдельные права суперпользователя (root) без передачи всех полномочий. В POSIX.1e определены три набора возможностей:

  • Allowed — максимальный набор возможностей, который может получить процесс;
  • Effective — реально активные возможности в данный момент;
  • Inheritable — возможности, передаваемые дочерним процессам.

Стандарт включает около 30 возможностей, таких как:

  • CAP_CHOWN — изменение владельца файла;
  • CAP_NET_BIND_SERVICE — привязка к привилегированным портам (ниже 1024);
  • CAP_SYS_ADMIN — широкий набор административных операций.

Дополнительные механизмы

  • Trusted I/O (TIO) — механизм для безопасного ввода-вывода, позволяющий приложениям гарантировать, что данные не были подменены;
  • Security Labels — метки безопасности для файлов и процессов (предшественник мандатного контроля доступа, MAC);
  • Audit — система аудита событий безопасности.

Реализации

Linux

В Linux поддержка ACL на основе POSIX.1e появилась в ядре 2.6 (2003). Для работы с ACL используются утилиты getfacl и setfacl из пакета acl. Возможности реализованы через системные вызовы capget/capset и утилиты getcap/setcap. Однако реализация в Linux не полностью соответствует проекту POSIX.1e: например, отсутствует механизм Trusted I/O, а возможности имеют несколько иной набор (расширенный).

FreeBSD

FreeBSD реализовала ACL на основе POSIX.1e начиная с версии 5.0 (2003). Поддержка возможностей (Capsicum) в FreeBSD отличается от стандарта и ориентирована на изоляцию процессов.

Solaris

Solaris (ныне illumos) реализовал ACL и возможности в полном объёме, близком к проекту POSIX.1e. Система Solaris стала эталонной для многих разработчиков.

Критика и ограничения

  • Незавершённость стандарта — проект был отозван, поэтому реализации в разных системах несовместимы;
  • Сложность управления — ACL и возможности требуют дополнительных инструментов и обучения администраторов;
  • Противоречивость — некоторые спецификации были неоднозначными, что привело к разным интерпретациям;
  • Устаревание — в современных системах (например, с SELinux или AppArmor) используются более мощные модели мандатного контроля доступа, которые частично вытесняют дискреционные ACL.

Влияние

POSIX.1e оказал значительное влияние на развитие безопасности в Unix-подобных системах. Его идеи были заимствованы в стандарте NFSv4 ACL, а также в механизмах Windows NTFS. Несмотря на формальную отмену, проект остаётся важным историческим документом, описывающим первую попытку унифицировать расширенные модели доступа в открытых операционных системах.

Источники

  • IEEE Std 1003.1e — Draft 17 (1997). «POSIX.1e: Protection, Audit, and Control».
  • «POSIX.1e: A Standard for Security Extensions» — статья в журнале ;login:, 1998.
  • Документация ядра Linux: Documentation/filesystems/acl.txt.
  • FreeBSD Handbook: Chapter 12 — Security.
  • «Understanding and Using ACLs in Linux» — IBM DeveloperWorks, 2003.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →