IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Linux  >

Повышение безопасности с помощью многоэкземплярности директорий

Использование подключаемых модулей аутентификации для защиты конфиденциальных данных

developerWorks
Опции документа
Формат PDF - A4

PDF - A4
37KB (9 страница)

Загрузить Adobe® Reader®

Опции документа, требующие включения JavaScript, не отображаются

Обсудить


Выскажите мнение об этой странице

Помогите нам улучшить содержание


Уровень сложности: простой

Роб Романс, инженер-программист, IBM

14.05.2008

Если вы заинтересованы в защите от несанкционированного доступа к совместно используемым директориям (например, /tmp или /var/tmp), которые доступны на запись "всему миру", вам могут помочь подключаемые модули аутентификации Linux® (PAM). При входе пользователей в систему модуль pam_namespace создаёт отдельное пространство имён. Это разделение выполняется на уровне операционной системы Linux, в результате пользователи оказываются защищены от нескольких типов атак. Эта статья предназначена для системных администраторов Linux. В ней показано, как с помощью PAM подключить механизм пространств имён.

Для повышения безопасности разумно использовать несколько способов защиты ("defense in depth" - глубоко эшелонированная защита). Таким образом, если один из способов защиты взломан, другой останется в рабочем состоянии и предотвратит дальнейшее вторжение. В этой статье описан способ, который позволит вам добавить ещё один уровень в вашу стратегию безопасности: использование PAM для включения механизма многоэкземплярности (polyinstantiation) совместно используемых директорий, доступных на запись "всему миру". Это означает, что для каждого пользователя создаётся новый экземпляр директории (например, /tmp).

В статье Рассела Кокера (Russell Coker) "Polyinstantiation of directories in an SELinux system" (см. раздел Ресурсы) описаны следующие типы атак, выполнению которых препятствует многоэкземплярность:

  • Атаки, использующие состояние гонки (race-condition) и символические ссылки
  • Раскрытие имени файла, который содержит секретную информацию или может быть использован атакующим
  • Атаки одного пользователя на другого пользователя
  • Атаки пользователя на демона
  • Атаки демона без привилегий root на пользователя

В то же время многоэкземплярность НЕ препятствует выполнению следующих типов атак:

  • Атаки демона с привилегиями root на пользователя
  • Атаки root (учётная запись или повышенные привилегии) на любого пользователя

Как работают PAM и многоэкземплярность

Во время входа в систему PAM создаёт (в пределах системного экземпляра директории /tmp) "многоэкземплярную" личную директорию /tmp; эта переадресация прозрачна для пользователя, входящего в систему. Пользователь видит "стандартную" директорию /tmp и имеет право на её чтение и запись как обычно. Пользователь не видит ни пространств /tmp других пользователей (включая пользователя root), ни настоящей файловой системы /tmp.

"Многоэкземплярные" пользовательские директории не могут быть скрыты или защищены от пользователя root. Если вы заинтересованы в таком уровне защиты, вам может помочь SELinux. Примеры конфигураций, приведённые в этой статье, должны работать независимо от того, включили вы SELinux или нет. Дополнительную информацию об использовании SELinux можно найти по ссылкам в разделе Ресурсы.



В начало


Включение механизма многоэкземплярности

В этом разделе показано, как включить многоэкземплярность директории /tmp и /var/tmp для пользователей вашей системы. Также вы найдёте здесь описание дополнительных настроек, необходимых для корректной работы X Windows и графического менеджера экрана. В этой статье я использовал дистрибутив Red Hat Enterprise Linux 5.1 (RHEL 5.1), но вы можете использовать описанные здесь процедуры в любом дистрибутиве Linux, который имеет в своём составе модуль pam_namespace.

Первым делом мы отредактируем файл namespace.conf.

Редактирование файла namespace.conf

Первый файл, который нужно отредактировать - /etc/security/namespace.conf. В нём хранятся настройки модуля pam_namespace. Перечислите в этом файле директории, которые PAM должен сделать "многоэкземплярными" при входе в систему. Несколько закомментированных примеров приведены в файле, входящем в состав PAM. Чтобы посмотреть детальное руководство, выполните команду man namespace.conf. Синтаксис каждой строки в этом файле следующий - polydir instance_prefix method list_of_uids.

Вот что означают вкратце эти переменные:

  • polydir - полное имя директории, которую нужно сделать "многоэкземплярной".
  • instance_prefix - базовая директория для новой "многоэкземплярной" пользовательской директории.
  • method может принимать значения: user, level, или context.
  • list_of_uids - список пользователей, директории которых PAM НЕ будет делать "многоэкземплярными".

В этом примере мы не используем SELinux, таким образом, вы должны указать для переменной method значение user. В пределах конфигурационного файла (при необходимости) вы можете использовать переменные $USER и $HOME.

Листинг 1 создаёт индивидуальные экземпляры пространств имён /tmp и /var/tmp для каждого пользователя в системе, за исключением пользователей root и adm.


Листинг 1. /etc/security/namespace.conf
                
#$HOME $HOME/$USER.inst/ user root,adm 
/tmp /tmp/tmp-inst/ user root,adm 
/var/tmp /var/tmp/tmp-inst/ user root,adm 

Директории /tmp и /var/tmp не обязательно должны располагаться на разных файловых системах; они могут быть расположены на одной файловой системе. Директории /tmp/tmp-inst и /var/tmp/tmp-inst необходимо создать один раз, вручную, с режимом доступа 000. Вы не сможете войти в систему, если эти директории созданы неправильно.

Чтобы создать эти директории, выполните следующие команды как пользователь root:

# mkdir /tmp/tmp-inst 
# mkdir /var/tmp/tmp-inst 
# chown root:root /tmp/tmp-inst /var/tmp/tmp-inst 
# chmod 000 /tmp/tmp-inst /var/tmp/tmp-inst 

Редактирование настроек PAM

Далее, отредактируйте конфигурационные файлы PAM, добавив pam_namespace в список требуемых (required) модулей, которые будут выполнены при входе в систему с консоли или по SSH. Добавьте модуль pam_namespace.so в последнюю строку файлов /etc/pam.d/login и /etc/pam.d/sshd. Куда в файлах /etc/pam.d/login и /etc/pam.d/sshd, нужно добавить модуль, показано в листингах 2 и 3 соответственно:


Листинг 2. Добавление модуля PAM в файл /etc/pam.d/login
                
#%PAM-1.0 
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so 
auth include system-auth 
account required pam_nologin.so 
account include system-auth 
password include system-auth 
# pam_selinux.so close should be the first session rule 
session required pam_selinux.so close 
session include system-auth 
session required pam_loginuid.so 
# 
session optional pam_console.so 
# pam_selinux.so open should only be followed by sessions to be executed in the 
  user context 
session required pam_selinux.so open 
session optional pam_keyinit.so force revoke 
# Polyinstantiation: 
session required pam_namespace.so 
            


Листинг 3. Добавление модуля PAM в файл /etc/pam.d/sshd
                
#%PAM-1.0 
auth include system-auth 
account required pam_nologin.so 
account include system-auth 
password include system-auth 
session optional pam_keyinit.so force revoke 
session include system-auth 
session required pam_loginuid.so 
# Polyinstantiation: 
session required pam_namespace.so 
            

Запуск X Windows

Из-за особенностей использования директорий для временных файлов системой X Windows, у пользователей с "многоэкземплярной" директорией /tmp может не работать графический вход в систему. PAM выполняет содержимое файла /etc/security/namespace.init во время входа в систему, если модуль pam_namespace указан в любом из файлов директории /etc/pam.d. Используйте этот файл для внесения необходимых изменений, которые позволят вам корректно запустить X Windows. Я немного изменил файл namespace.init, входящий по умолчанию в дистрибутив RHEL 5.1, как показано в листинге 4.


Листинг 4. Обеспечение возможности корректного запуска X Windows
                
if [ $1 = /tmp ]; then
        if [ ! -f /.tmp/.X11-unix ]; then
                mkdir -p /.tmp/.X11-unix
        fi
        mount --bind /tmp/.X11-unix /.tmp/.X11-unix
        [ -f /tmp/.X0-lock ] && cp -fp -- /tmp/.X0-lock "$2/.X0-lock"
        mkdir -p -- "$2/.X11-unix"
        ln -fs -- /.tmp/.X11-unix/X0 "$2/.X11-unix/X0"
fi
exit 0

Настройка менеджера экрана Gnome Display Manager

Настройка менеджера экрана Gnome Display Manager (GDM) проста. Добавьте модуль pam_namespace.so в список требуемых (required) модулей в файле /etc/pam.d/gdm. Пример приведён в листинге 5.


Листинг 5. Настройка менеджера экрана GDM
                
#%PAM-1.0 
auth required pam_env.so 
auth include system-auth 
account required pam_nologin.so 
account include system-auth 
password include system-auth 
session optional pam_keyinit.so force revoke 
session include system-auth 
session required pam_loginuid.so 
session optional pam_console.so 
# Polyinstantiation: 
session required pam_namespace.so 
            

Если вместо менеджера экрана GDM вы используете X Display Manager (XDM), таким же образом измените файл /etc/pam.d/xdm. Теперь директории /tmp и /var/tmp будут "многоэкземплярными" как при входе в систему с консоли, так и при графическом входе.



В начало


Окончание: Разрешаем ошибки

Если при работе модуля pam_namespace.so PAM встретит ошибку, попытки пользователя войти в систему потерпят неудачу. Пока вы не убедитесь, что всё работает, так как было запланировано - разрешите вход в систему даже в случае возникновения ошибок. Чтобы включить опцию ignore_config_error, добавьте её в конец каждого файла, содержащего модуль pam_namespace.so, в директории /etc/pam.d.

Например, отредактируйте в файле /etc/pam.d/login строку, содержащую модуль pam_namespace.so, следующим образом:

session required pam_namespace.so ignore_config_error

Полный список опций имеется в руководстве к pam_namespace. Проверьте файл /var/log/secure на наличие записей об ошибках после того, как пользователь войдёт в систему. Как только вы убедитесь, что PAM правильно настроен, удалите опцию ignore_config_error.



В начало


Окончание: Результаты

После того как вы отредактировали и сохранили конфигурационные файлы, выберите учётную запись пользователя без привилегий root для тестирования. Завершите все сеансы работы с системой этого пользователя. Снова войдите в систему. Для этого пользователя будут созданы новые "многоэкземплярные" директории /tmp и /var/tmp. Как выглядит директория /tmp с точки зрения системы и с точки зрения пользователя robb, показано в листингах 6 и 7.


Листинг 6. Консольная сессия с точки зрения пользователя
                
[robb@testbox tmp]$ cd /tmp 
[robb@testbox tmp]$ touch foo 
[robb@testbox tmp]$ ls 
foo 


Листинг 7. Консольная сессия с точки зрения системы (пользователя root)
                
[root@testbox ~]# ls /tmp 
tmp-inst 
[root@testbox ~]# ls /tmp/tmp-inst/ 
robb 
[root@testbox ~]# ls /tmp/tmp-inst/robb/ 
foo 

Благодаря тому, что задействован механизм многоэкземплярности, директория /tmp пользователя robb изолирована в отдельной поддиректории директории /tmp/tmp-inst/; robb не может видеть системную директорию /tmp или файлы внутри неё.



В начало


Заключение

Несмотря на то, что многоэкземплярность не защищает от всех видов атак, это полезное дополнение к вашему набору инструментов, обеспечивающих безопасность, которое к тому же легко настраивается. Вы можете смело экспериментировать с "многоэкземплярностью" других директорий, например, /home. С опцией ignore_config_error ошибки "не смертельны", но не забудьте удалить эту опцию, как только вы закончите тестирование вашей конфигурации.



Ресурсы

Научиться
  • Оригинал статьи "Improve security with polyinstantiation" (EN).

  • "Polyinstantiation of directories in an SE Linux system" (EN) - статья Рассела Кокера (Russell Coker), в которой описаны проблемы, связанные с совместно используемыми директориями, такими как /tmp и /var/tmp, а также проблемы, возникающие при использовании нескольких контекстов безопасности SELinux для доступа к единственной "домашней" директории.

  • "Использование пространств имён команды mount" (developerWorks, сентябрь 2007 г.) рассказывает, как самостоятельно настроить монтирование файловых систем, не ограничиваясь структурой, навязанной системным администратором. В этой статье вы найдёте несколько практических применений расширенных возможностей команды mount.

  • "Secure programmer: Minimizing privileges" (EN) (developerWorks, май 2004 г.) рассказывает о том, как ограничить привилегии путём уменьшения количества привилегированных модулей, предоставленных привилегий и времени, в течение которого привилегии действительны.

  • "What's new in SELinux for Red Hat Enterprise Linux 5?" (EN) (Дэн Уолш (Dan Walsh), журнал Red Hat Magazine, май 2007 г.) - исчерпывающий обзор SELinux дистрибутива RHEL 5.

  • В статье "Shared subtrees" (LWN.net, ноябрь 2005 г.) вы найдёте ответ на вопрос "Процесс хочет клонировать своё пространство имён и по-прежнему иметь доступ к компакт-диску, который был недавно примонтирован" с подробным перечнем особенностей, семантикой, описанием состояний монтирования и проблемами реализации. (EN)

  • "SELinux с нуля" (developerWorks, май 2006 г.) показывает, как собрать систему Gentoo с поддержкой SELinux.

  • "Управление доступом на основе ролей в SELinux" (developerWorks, февраль 2008 г.) расскажет, как работать с RBAC в SELinux, а также как совместная работа политик SELinux, ядра и пространства пользователя реализует RBAC и связывает пользователей с политикой type enforcement.

  • Следующие ресурсы помогут вам понять принципы работы SELinux: История SELinux и часто задаваемые вопросы о проекте (EN), Неофициальный сборник часто задаваемых технических вопросов о SELinux (EN) и Настройка политик SELinux (EN).

  • Узнайте больше о SELinux (Security-Enhanced Linux - Linux с повышенной безопасностью) на сайте NSA. (EN)

  • В разделе Linux сайта developerWorks вы можете найти дополнительные ресурсы по Linux для разработчиков, а также самые популярные статьи и руководства.(EN)

  • Читайте советы и руководства по Linux на сайте developerWorks.

  • Оставайтесь в курсе последних событий, посещая раздел Семинары и обучение.


Получить продукты и технологии

Обсудить


Об авторе

Роб Романс редактор в группе User Technologies корпорации IBM. Он работает с Linux, архитектурой Cell Broadband Engine и программным обеспечением с открытым исходным кодом. До того как Роб перешёл в группу Information Development, он работал в качестве разработчика в таких областях как безопасность Linux, Linux для встраиваемых систем.




Выскажите мнение об этой странице


Пожалуйста, найдите минутку и заполните форму, чтобы повысить уровень сервиса.



 


 


 


Поделиться этой статьей:

забобрить забобрить memori сохранить в memori




В начало


DB2, Lotus, Rational, Tivoli и WebSphere являются торговыми знаками корпорации IBM в США и/или других странах. Linux является товарным знаком, принадлежащим Линусу Торвальдсу (Linus Torvalds) в США и/или других странах. Другая компания, продукт или название услуги могут быть торговыми марками или знаками обслуживания, принадлежащими иным физическим или юридическим лицам.

IBM обладает всеми авторскими правами касательно информации, расположенной на developerWorks. Использование информации приведенной на этом ресурсе без явного письменного разрешения от IBM или первоначального автора запрещены. Если Вы желаете использовать информацию с developerWorks, пожалуйста воспользуйтесь регистрационной формой для того, чтобы связаться с нами запрос на использование материалов developerWorks Россия.

    IBM в России Конфиденциальность Контакты