tcb(5)
| TCB(5) | File Formats Manual | TCB(5) |
Название
tcb - альтернативная схема управления теневыми паролями
Задача
Согласно традиционной схеме управления теневыми паролями, хеши паролей всех пользователей, а также информация о сроке их действия хранится в едином файле - /etc/shadow. Таким образом, процесс, которому предоставляется доступ к информации о пароле одного из пользователей системы, автоматически получает права, достаточные для получения аналогичного доступа к информации о паролях всех остальных пользователей. Этот явный изъян в дизайне легко проследить на примере утилиты passwd(1). Предположим, что политика безопасности позволяет непривилегированным пользователям изменять собственные пароли. Какими бы ни были права доступа к файлу /etc/shadow, программа passwd(1), запущенная непривилегированным пользователям U, должна иметь возможность вносить изменения в этот файл. Если злоумышленник U найдёт способ взять под свой контроль процесс passwd(1) (с помощью ошибки непосредственно в коде программы passwd(1), используемых ею библиотеках, или в ядре), то этот пользователь получит возможность менять пароли всех пользователей и таким образом возьмёт под свой контроль операционную систему.
Решение
Решение проблемы простое - каждому пользователю соответствует отдельный теневой shadow-файл. Поскольку теневой файл пользователя U принадлежит этому пользователю U, то программа passwd(1), запущенная U, уже не требует рутовых прав.
Все теневые файлы пользователей располагаются в каталоге /etc/tcb:
drwx--x--- 2 root shadow 1024 Май 4 01:18 /etc/tcb
Для каждого пользователя создаётся подкаталог в /etc/tcb с соответствующими правами доступа:
# ls -l /etc/tcb всего 2 drwx--s--- 2 root auth 1024 Май 4 01:18 root drwx--s--- 2 user auth 1024 Май 4 01:18 user
и т.д. Каждый такой подкаталог содержит теневой файл, содержащий информацию о пароле соответствующего пользователя:
# ls -l /etc/tcb/user всего 1 -rw-r----- 1 user auth 91 Май 4 01:18 shadow
Эти персональные каталоги используются для хранения временных файлов и блокировочных файлов, создаваемых во время смены пароля либо изменения другой информации, хранящейся в теневом файле.
Преимущества
Описанный выше дизайн обладает следующими преимуществами:
- 1.
- Утилита passwd(1) должна быть установлена с правами SGID-shadow, а не SUID-root. Утилита chage(1) и вспомогательная программа /usr/lib/chkpwd/tcb_chkpwd также должны быть установлены с правами SGID-shadow; это значит, что в соответствии со схемой tcb запущенные процессы будут обладать правами, достаточными для изменения только пользовательской теневой записи. Таким образом, весь вред, который может причинить злоумышленник в случае обнаружения ошибки в реализации этих программ, ограничен возможностью изменения своего собственного теневого файла.
- 2.
- Если процессу необходим доступ по чтению ко всем теневым файлам сразу, достаточно дополнительно включить его в группы "shadow" и "auth".
- 3.
- Схема tcb полностью прозрачна для приложений, которым требуется читать информацию о паролях. Разделяемая библиотека libnss_tcb реализует интерфейс к функции getspnam(3) и другим функциям работы с теневыми записями. Смена паролей обеспечивается PAM-модулем pam_tcb(8).
Информацию о введении в действие схемы tcb можно прочесть в tcb_convert(8), где рассказано, как это сделать наиболее безболезненно.
Недостатки
Честно говоря, их всего несколько, и они крайне незначительные:
- 1.
- Невозможно установить блокировку всей теневой базы данных (см. tcb_unconvert(8)).
- 2.
- Процесс, обладающий доступом по чтению ко всем теневым файлам, как это описано выше, автоматически обладает доступом по изменению своего собственного теневого файла.
- 3.
- Невозможно предоставить процессу права доступа только по чтению к одному конкретному теневому файлу иначе как исполняя этот процесс с правами соответствующего пользователя.
- 4.
- Средства управления доступом пользователей требуют значительной доработки для обеспечения поддержки схемы tcb.
Обход ограничений, накладываемых файловыми системами
Некоторые файловые системы ограничивают возможное число жёстких ссылок для файлов. Например, в файловой системе ext2 никакой файл не может содержать более 32000 жёстких ссылок. Это значит, что каталог /etc/tcb, размещённый на такой файловой системе, может содержать не более 31998 подкаталогов. При использовании схемы размещения файлов, описанной выше, это ограничение файловой системы автоматически приводит к ограничению максимального числа пользователей тем же числом 31988.
Решение: каталог с теневым файлом для пользователя U может быть помещён не только в каталог /etc/tcb, но и в каталог /etc/tcb/:some/path. В случае использования второго варианта должна быть создана символическая ссылка /etc/tcb/U -> /etc/tcb/:some/path/U.
В реализации tcb, начиная с версии 0.9.8, каталоги с именами, удовлетворяющими шаблону /etc/tcb/:*, не рассматриваются как каталоги с теневыми файлами. Эти имена зарезервированы для символических ссылок на каталоги с теневыми файлами.
По умолчанию, средства управления доступом пользователей, работающие непосредственно с каталогами, содержащими теневые файлы, создают эти каталоги непосредственно в /etc/tcb; в ситуации, когда число пользователей в tcb может превысить ограничение файловой системы, администратор системы может перейти на второй вариант размещения каталогов с теневыми файлами, изменив параметр TCB_SYMLINKS в конфигурационном файле login.defs(5).
Историческая справка
Первая
публичная
версия
реализации
альтернативной
схемы
управления
теневыми
паролями tcb
появилась 12
ноября 2001
года в ОС Openwall
GNU/*/Linux.
Дата
появления
tcb в ALT Linux Sisyphus - 20
декабря 2001
года.
Авторы
- Rafal Wojtczuk <nergal@owl.openwall.com>, Solar Designer <solar@owl.openwall.com> -
- реализация схемы tcb для ОС Openwall GNU/*/Linux.
- Dmitry V. Levin <ldv@altlinux.org> -
- аудит кода, адаптация схемы tcb для ОС ALT Linux, перевод документации по tcb на русский язык.
- Реализация PAM-модуля
- pam_tcb призвана обеспечивать обратную совместимость с pam_unix, ввиду чего некоторые решения были заимствованы из pam_unix. Некоторые менее критичные фрагменты кода, а также в некоторой мере композиция кода взяты из реализации модуля pam_unix в Linux-PAM. Имена соавторов pam_unix приведены в каталоге orig_copyright/ исходного кода схемы tcb.
Ссылки
| 16 April 2004 | ALT Linux |
