TCB
Updated: 02 March 2002
Index Return to Main Contents
Название
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) и вспомогательная программа /sbin/tcb_chkpwd также должны быть установлены с правами SGID-shadow; это значит, что в соответствии со схемой TCB запущенные процессы будут обладать правами, достаточными для изменения только пользовательской теневой записи. Таким образом, весь вред, который может причинить злоумышленник в случае обнаружения ошибки в реализации этих программ, ограничен возможностью изменения своего собственного теневого файла.
- 2. Если процессу необходим доступ по чтению ко всем теневым файлам сразу,
- достаточно дополнительно включить его в группы "shadow" и "auth".
- 3. Схема TCB полностью прозрачна для приложений, которым требуется читать
- информацию о паролях. Разделяемая библиотека libnss_tcb реализует интерфейс к функции getspnam(3) и другим функциям работы с теневыми записями. Смена паролей обеспечивается PAM-модулем pam_tcb(5).
Информацию о введении в действие схемы TCB можно прочесть в tcb_convert(8), где рассказано, как это сделать наиболее безболезненно.
Недостатки
Честно говоря, их всего несколько, и они крайне незначительные:- 1.
- Невозможно установить блокировку всей теневой базы данных (см. tcb_unconvert(8)).
- 2.
- Процесс, обладающий доступом по чтению ко всем теневым файлам, как это описано выше, автоматически обладает доступом по изменению своего собственного теневого файла.
- 3.
- Невозможно предоставить процессу права доступа по чтению к одному конкретному теневому файлу иначе как исполняя этот процесс с правами соответствующего пользователя.
- 4.
- Средства управления доступом пользователей требуют значительной доработки для обеспечения поддержки схемы TCB.
Авторы
Rafal Wojtczuk <nergal@owl.openwall.com>, Solar Designer <solar@owl.openwall.com> - реализация схемы TCB для ОС Openwall GNU/*/Linux.- Dmitry V. Levin <ldv@alt-linux.org> - аудит кода,
- адаптация схемы TCB для ОС ALT Linux, перевод документации по TCB на русский язык.
- Реализация PAM-модуля
- pam_tcb призвана обеспечивать обратную совместимость с pam_unix, ввиду чего некоторые решения были заимствованы из pam_unix. Некоторые менее критичные фрагменты кода, а также в некоторой мере композиция кода взяты из реализации модуля pam_unix в Linux-PAM. Имена соавторов pam_unix приведены в каталоге orig_copyright/ исходного кода схемы TCB.
Ссылки
login.defs(5), pam_tcb(5), tcb_convert(8)
Index
- Название
- Задача
- Решение
- Преимущества
- Недостатки
- Авторы
- Ссылки