Skip to main content

Дискреционная модель контроля доступа (DAC)

1. Введение в DAC

Дискреционная модель контроля доступа (Discretionary Access Control, DAC) — одна из фундаментальных моделей безопасности, которая регулирует доступ к объектам на основе идентификатора субъекта и правил доступа, определенных владельцем ресурса.

Ключевая особенность: DAC позволяет владельцу ресурса самостоятельно определять политику доступа к принадлежащим ему объектам.

В мире информационной безопасности, DAC является исторически первой и наиболее распространенной моделью контроля доступа. Она встречается в большинстве современных операционных систем, включая Windows, macOS и Linux.

2. Техническая реализация

2.1. Матрица доступа

Математически DAC часто представляется в виде матрицы доступа - двумерной таблицы, где:

  • Строки соответствуют субъектам (пользователям)
  • Столбцы соответствуют объектам (файлам, папкам, процессам)
  • На пересечении указываются права (чтение, запись, выполнение и т.д.)
           | Файл A | Файл B | Процесс C |
-----------|--------|--------|-----------|
Алиса      | r,w,x  | r      | r,w       |
Борис      | r      | r,w,x  | -         |
Виктория   | -      | r      | r         |

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

На практике DAC часто реализуется через Access Control Lists (ACL) — списки, ассоциированные с каждым объектом, которые определяют, какие пользователи и группы имеют доступ к объекту и какие операции они могут выполнять.

Пример ACL для файла report.pdf:

owner: Алиса (rwx)
group: Исследователи (r--)
user: Борис (r--)
user: Виктория (---)
others: (---)

2.3. Техническая реализация в UNIX-системах

В UNIX/Linux системах DAC реализуется через сочетание:

  1. Идентификаторов пользователей (UID) и групп (GID)
  2. Битов разрешений для владельца, группы и остальных пользователей:
    • r (чтение) = 4
    • w (запись) = 2
    • x (выполнение) = 1

Примеры прав доступа:

  • chmod 755 file.txt → rwxr-xr-x (владелец: полные права; группа и остальные: чтение и выполнение)
  • chmod 640 file.txt → rw-r—– (владелец: чтение и запись; группа: чтение; остальные: нет прав)

3. Практическое применение DAC

3.1. Операционные системы

Windows:

  • Реализация через списки ACL в GUI и командной строке
  • Наследование прав от родительских каталогов
  • Управление через Security Descriptor Definition Language (SDDL)

Linux/Unix:

  • Классические права rwx для владельца/группы/остальных
  • Расширенные ACL через команды getfacl и setfacl
  • Sudo-механизмы для временного повышения привилегий

3.2. Файловые системы

  • NTFS: развитая система ACL, наследование прав
  • ext4: базовая UNIX-модель прав + расширенные атрибуты
  • Сетевые файловые системы: SMB/CIFS, NFS с поддержкой ACL

3.3. Базы данных

Большинство СУБД реализуют DAC через:

  • Роли и пользователей
  • Привилегии на уровне таблиц, колонок, представлений
  • GRANT/REVOKE команды для управления доступом
-- Пример настройки прав в SQL
GRANT SELECT, UPDATE ON students TO teacher;
GRANT SELECT ON students TO student;
REVOKE ALL PRIVILEGES ON grades FROM student;

4. Преимущества и недостатки DAC

4.1. Преимущества

  1. Гибкость управления: владелец ресурса может самостоятельно настраивать доступ
  2. Простота понимания: интуитивно понятная модель для большинства пользователей
  3. Масштабируемость: легко масштабируется от персональных до корпоративных систем
  4. Широкая поддержка: встроена практически во все современные ОС и приложения
  5. Гранулярность: возможность настройки до уровня отдельных файлов и действий

4.2. Недостатки

  1. Транзитивность доступа: пользователь с доступом к ресурсу может неконтролируемо передать его другим
  2. Уязвимость к троянским программам: злонамеренный код может действовать от имени пользователя
  3. Административная нагрузка: управление сложными ACL требует значительных усилий
  4. Недостаточная безопасность: не подходит для систем с высокими требованиями безопасности
  5. Сложность аудита: трудно отслеживать общую картину прав доступа в системе

5. Сценарии применения и предпочтения использования

5.1. Оптимальные сценарии применения

  • Персональные компьютеры и рабочие станции
  • Малые и средние организации
  • Системы с низким уровнем требований к безопасности
  • Ситуации, требующие гибкого управления доступом
  • Учебные среды и лаборатории

5.2. Неподходящие сценарии

  • Военные и государственные секретные системы
  • Инфраструктура критического значения
  • Среды с высокими регуляторными требованиями
  • Системы, где нужно строгое разделение доступа

5.3. Сравнение с другими моделями

АспектDACMAC (Мандатная)RBAC (Ролевая)ABAC (Атрибутивная)
КонтрольВладелец ресурсаСистемаАдминистраторПолитики и атрибуты
ГибкостьВысокаяНизкаяСредняяОчень высокая
СложностьНизкаяВысокаяСредняяОчень высокая
БезопасностьСредняяВысокаяВысокаяОчень высокая
МасштабируемостьСредняяНизкаяВысокаяВысокая

6. Практические задания

6.1. Лабораторная работа “Настройка DAC в Linux”

Задание:

  1. Создайте трех пользователей: researcher, assistant и visitor
  2. Создайте каталог /projects/experiment со следующей структурой:
    /projects/experiment/
    ├── data/
    ├── results/
    └── config.json
    
  3. Настройте права доступа так, чтобы:
    • researcher имел полный доступ ко всему
    • assistant мог читать все файлы и записывать только в results/
    • visitor мог только читать config.json

Решение:

# Создание пользователей
sudo useradd researcher
sudo useradd assistant
sudo useradd visitor

# Создание структуры каталогов
mkdir -p /projects/experiment/data
mkdir -p /projects/experiment/results
touch /projects/experiment/config.json

# Настройка владельца и группы
sudo chown -R researcher:researcher /projects/experiment

# Настройка базовых прав
sudo chmod -R 700 /projects/experiment  # По умолчанию только владелец

# Добавление assistant в группу researcher
sudo usermod -a -G researcher assistant

# Настройка прав для отдельных папок
sudo chmod 750 /projects/experiment
sudo chmod 770 /projects/experiment/results
sudo chmod 744 /projects/experiment/config.json

6.2. Задача “Анализ уязвимостей DAC”

Сценарий: Компания использует DAC для защиты корпоративной файловой системы. Один из сотрудников случайно сделал конфиденциальный документ доступным всем в компании.

Задание:

  1. Опишите, как это могло произойти при использовании DAC
  2. Предложите методы обнаружения таких нарушений
  3. Разработайте политику безопасности, снижающую риск таких инцидентов

7. Исторический контекст и развитие

DAC появилась в 1960-70-х годах с первыми многопользовательскими операционными системами. Модель эволюционировала от простых битовых масок до сложных ACL, интегрированных с другими механизмами безопасности.

В современных системах наблюдается тенденция к комбинированию различных моделей доступа:

  • DAC как базовый уровень
  • RBAC для упрощения администрирования
  • MAC для критически важных компонентов
  • ABAC для сложных политик безопасности

8. Дополнительные материалы

8.1. Код для демонстрации работы DAC в Python

import os

# Создание файла с определенными правами
def create_protected_file(filename, content):
    with open(filename, 'w') as f:
        f.write(content)
    # Установка прав "только владелец может читать и писать"
    os.chmod(filename, 0o600)
    print(f"Создан защищенный файл {filename}")

# Симуляция DAC-проверки
def access_file(username, filename, operation):
    # Проверяем существование файла
    if not os.path.exists(filename):
        return False, "Файл не существует"
    
    # Получаем информацию о файле
    file_stat = os.stat(filename)
    file_mode = file_stat.st_mode
    
    # Симуляция проверки пользователя
    is_owner = (username == "owner")
    is_group = (username in ["group_member1", "group_member2"])
    
    # Проверка прав в зависимости от операции и роли пользователя
    if operation == "read":
        if is_owner and (file_mode & 0o400):  # Владелец имеет право на чтение
            return True, "Доступ разрешен (чтение)"
        elif is_group and (file_mode & 0o040):  # Группа имеет право на чтение
            return True, "Доступ разрешен (чтение)"
        elif file_mode & 0o004:  # Остальные имеют право на чтение
            return True, "Доступ разрешен (чтение)"
    elif operation == "write":
        if is_owner and (file_mode & 0o200):  # Владелец имеет право на запись
            return True, "Доступ разрешен (запись)"
        elif is_group and (file_mode & 0o020):  # Группа имеет право на запись
            return True, "Доступ разрешен (запись)"
        elif file_mode & 0o002:  # Остальные имеют право на запись
            return True, "Доступ разрешен (запись)"
    
    return False, "Доступ запрещен"

# Пример использования
if __name__ == "__main__":
    create_protected_file("secret.txt", "Это секретные данные")
    
    users = ["owner", "group_member1", "anonymous"]
    operations = ["read", "write"]
    
    for user in users:
        for op in operations:
            result, message = access_file(user, "secret.txt", op)
            print(f"Пользователь {user}, операция {op}: {message}")

9. Вопросы для самопроверки

  1. Какое ключевое свойство отличает DAC от других моделей контроля доступа?
  2. Почему DAC считается недостаточно безопасной для высококритичных систем?
  3. Как реализуется DAC в UNIX-подобных системах?
  4. Какие проблемы может вызвать транзитивность доступа в DAC?
  5. В каких случаях DAC является предпочтительной моделью контроля доступа?
  6. Как работают списки контроля доступа (ACL) и чем они отличаются от простой UNIX-модели прав?
  7. Предложите механизмы, которые могли бы дополнить DAC для повышения безопасности.
  8. Почему в крупных организациях DAC обычно комбинируют с RBAC?