Дискреционная модель контроля доступа (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 реализуется через сочетание:
- Идентификаторов пользователей (UID) и групп (GID)
- Битов разрешений для владельца, группы и остальных пользователей:
- 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. Преимущества
- Гибкость управления: владелец ресурса может самостоятельно настраивать доступ
- Простота понимания: интуитивно понятная модель для большинства пользователей
- Масштабируемость: легко масштабируется от персональных до корпоративных систем
- Широкая поддержка: встроена практически во все современные ОС и приложения
- Гранулярность: возможность настройки до уровня отдельных файлов и действий
4.2. Недостатки
- Транзитивность доступа: пользователь с доступом к ресурсу может неконтролируемо передать его другим
- Уязвимость к троянским программам: злонамеренный код может действовать от имени пользователя
- Административная нагрузка: управление сложными ACL требует значительных усилий
- Недостаточная безопасность: не подходит для систем с высокими требованиями безопасности
- Сложность аудита: трудно отслеживать общую картину прав доступа в системе
5. Сценарии применения и предпочтения использования
5.1. Оптимальные сценарии применения
- Персональные компьютеры и рабочие станции
- Малые и средние организации
- Системы с низким уровнем требований к безопасности
- Ситуации, требующие гибкого управления доступом
- Учебные среды и лаборатории
5.2. Неподходящие сценарии
- Военные и государственные секретные системы
- Инфраструктура критического значения
- Среды с высокими регуляторными требованиями
- Системы, где нужно строгое разделение доступа
5.3. Сравнение с другими моделями
| Аспект | DAC | MAC (Мандатная) | RBAC (Ролевая) | ABAC (Атрибутивная) |
|---|---|---|---|---|
| Контроль | Владелец ресурса | Система | Администратор | Политики и атрибуты |
| Гибкость | Высокая | Низкая | Средняя | Очень высокая |
| Сложность | Низкая | Высокая | Средняя | Очень высокая |
| Безопасность | Средняя | Высокая | Высокая | Очень высокая |
| Масштабируемость | Средняя | Низкая | Высокая | Высокая |
6. Практические задания
6.1. Лабораторная работа “Настройка DAC в Linux”
Задание:
- Создайте трех пользователей:
researcher,assistantиvisitor - Создайте каталог
/projects/experimentсо следующей структурой:/projects/experiment/ ├── data/ ├── results/ └── config.json - Настройте права доступа так, чтобы:
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 для защиты корпоративной файловой системы. Один из сотрудников случайно сделал конфиденциальный документ доступным всем в компании.
Задание:
- Опишите, как это могло произойти при использовании DAC
- Предложите методы обнаружения таких нарушений
- Разработайте политику безопасности, снижающую риск таких инцидентов
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. Вопросы для самопроверки
- Какое ключевое свойство отличает DAC от других моделей контроля доступа?
- Почему DAC считается недостаточно безопасной для высококритичных систем?
- Как реализуется DAC в UNIX-подобных системах?
- Какие проблемы может вызвать транзитивность доступа в DAC?
- В каких случаях DAC является предпочтительной моделью контроля доступа?
- Как работают списки контроля доступа (ACL) и чем они отличаются от простой UNIX-модели прав?
- Предложите механизмы, которые могли бы дополнить DAC для повышения безопасности.
- Почему в крупных организациях DAC обычно комбинируют с RBAC?
