Дерево страниц

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 24 Следующий »

Статья не для публикации.


Как работает ALD:

  • ald-parsec проверяет параметры пользователя, и, если у него задан удалённый  домашний каталог, выставляет переменную окружения PDP_HOME
  • pam_ald монтирует "нулевой" домашний каталог действуя на нулевом мандатном уровне (вероятно, делая это одинаково в ОС ОН и ОС СН);
  • В ОС СН:
    • pam_parsec_mac:
      • обнаружив переменную окружения PDP_HOME выполняет проверку доступа к указанному в этой переменной каталогу, при которой вызывается backdoor в sаmba, от имени рута создающий эти каталоги
      • монтирует локальные каталоги обычным образом, ничего не зная про монтирование сетевых каталогов
      • оставляет после себя пользовательскую мандатную метку на процессе
    • вызываемый после pam_parsec_mac модуль pam_parsec_ald наследует пользовательскую мандатную метку, и перемонтирует каталоги на сетевые

Для того чтобы сработал механизм создания мандатных домашних каталогов необходимо:

  1. подключение выполнять с параметрам sec=krb5i,vers=1.0;
  2. подключение выполнять к специальному ресурсу homes, c другими ресурсами не сработает;

Подключение, корреткно работающее с конфиденциальной информацией, работает только с устаревшей версией протокола (vers=1) (см. BT-8434)


Выполняя действия, описанные в этой статье, следует помнить, что предоставление доступа к серверу через сетевые подключения неизбежно снижает защищённость этого сервера.


При работе с конфиденциальными данными в обязательном порядке следует настроить ограничения на файловом сервере: установить в конфигурации samba в секции [global] параметры:

server max protocol = NT1
use socket MAC label = YES
server signing = required

Стандарт передачи данных по сети не поддерживает передачу меток целостности, поэтому работа с примонтированными каталогами возможна только на нулевом уровне целостности. Домашние каталоги при этом должны иметь нулевой уровень целостности.

Монтирование домашнего каталога с ненулевым уровнем целостности пользователем с ненулевым уровнем целостности ведёт к краху системы.

Во избежание аварийных ситуаций следует запретить использовать ненулевые уровни целостности тем пользователям, которым позволено удалённо монтировать свои домашние каталоги.

Данная статья применима к:

  • ОС ОН Орёл 2.12
  • ОС СН Смоленск 1.6
  • ОС СН Ленинград 8.1

Описание стенда

  • Сервер FreeIPA + Samba. Порядок установки и настройки см. Samba + FreeIPA аутентификация пользователей Samba в Kerberos.
    В промышленной эксплуатации службу samba рекомендуется размещать на отдельном сервере. Порядок настройки отдельной службы на отдельном сервере см. также в статье Samba + FreeIPA аутентификация пользователей Samba в Kerberos.

  • Параметры сервера FreeIPA + Samba, используемые далее:
    • имя сервера ipa0.ipadomain/ru;
    • администратор домена admin;
    • пользователь домена с возможностью входа с ненулевой меткой конфиденциальности - ipauser;
  • Компьютер - клиент FreeIPA. Инструкцию по вводу компьютера в домен см. с статье FreeIPA.

Настройка сервера

Только для ОС СН

При работе с конфиденциальными данными в обязательном порядке следует настроить ограничения на файловом сервере: установить в конфигурации samba в секции [global] параметры:

client max protocol = NT1
use socket MAC label = YES
server signing = required

В используемой в данной статье конфигурации (когда конфигурация samba хранится в реестре samba) это можно сделать из командной строки (сервис при этом перезапускать не обязательно, изменения применятся автоматически). Команды:

sudo net conf setparm global "server max protocol" "NT1"
sudo net conf setparm global "use socket MAC label" "Yes"
sudo net conf setparm global "server signing" "required"
Если конфигурация хранится в файле, то внести изменения в файл/

Назависимо от того, где хранится конфигурация (в файле или в реестре) - после изменения указанных параметров перезапустить сервис.
Далее в примерах предполагается, что конфигурация samba находится в реестре samba. Если конфигурация находится в файле необходимо внести указанные изменения в файл конфигурациии перезапустить службу samba.

Создать конфигурации разделяемых ресурсов импортировать их в конфигурацию samba. Создаваемые ресурсы:

  1. Ресурс для монтирования домашних каталогов при работе с нулевой меткой конфиденциальности - ресурс homes (стандарный ресурс samba);
  2. Только для ОС СН. Ресурс для монтирования домашний каталогов при работе с ненулевой меткой конфиденциальности. Имя ресурса может быть произвольным, в примере используется имя pdp_homes. Данный ресурс требуется только для ОС СН.

Конфигурации ресурсов сохраняются в файлах, далее импортируются в конфигурацию samba. Команды:

cat << EOT > homes.txt
[homes]
comment = Home Directories
create mask = 0600
directory mask = 0700
read only = No
valid users = %S
browseable = No
EOT

cat << EOT > pdp_homes.txt
[pdp_homes]
comment = pdp homes share
create mask = 0600
directory mask = 0700
path = /home/.pdp/%U
read only = No
browseable = No
valid users = %U
EOT

sudo net conf import homes.txt homes
sudo net conf import pdp_homes.txt pdp_homes

Эти же действия можно выполнить командами не используя файлы для сохранения данных, например, для создания разделяемого ресурса homes:
sudo net conf addshare "homes" "/home/%U" "writeable=y" "guest_ok=N" "Home Directories"
sudo net conf setparm "homes" "browseable" "No"
sudo net conf setparm "homes" "valid users" "%U"
и т.д.

Настройки пользовательских каталогов для ОС СН

Ресурс pdp_homes будет предоставлять для монтирования путь /home/.pdp/<имя_пользователя"> (параметр path = /home/.pdp/%U в конфигурации). Если такого каталога нет, то с помощью подключения через samba (т.е. действиями со стороны клиентской машины) создать его невозможно, поэтому на момент подключения пользователя пользовательский подкаталог должен быть уже создан. При этом:

  1. каталог должен принадлежать пользователю;
  2. это должен быть каталог с низким уровнем целостности, иначе запись в него из сетевого подключения будет невозможна.
  3. каталог должен иметь метку конфиденциальности не ниже максимально допустимой для пользователя;

Для пользователя ipauser:

sudo mkdir /home/.pdp/ipauser
sudo chown ipauser:ipauser /home/.pdp/ipauser
sudo pdpl-file 3:0:-1:CCNRA /home/.pdp/ipauser

Настройка клиента

Клиент должен быть введён в домен FreeIPA. Инструкцию по вводу компьютера в домен см. с статье FreeIPA.

Далее, в зависимости от задач, можно выбрать один из вариантов настройки автоматического монтирования домашних каталогов:

  1. Монтирование с помощью pam_mount (скорее применимо в ОС ОН, так как предоставляет простой стандартный способ монтирования);
  2. Монтирование с помощью собственного сценария (скорее применимо в ОС СН, так как позволяет гибко настраивать монтирование каталогов с ненулевыми мандатными метками).

Эти варианты при необходимости могут применяться совместно, дополняя друг друга.

При работе с конфиденциальными данными в ОС СН следует в обязательном порядке использовать параметры монтирования sec=krb5i,vers=1.0
Если конфиденциальные данные не используются то и в ОС СН и в ОС ОН рекомендуется использовать параметр sec=krb5i без уточнения версии.

Использование модуля pam_mount

Установка пакетов

Набор пакетов, необходимых для монтирования домашних каталогов можно установить командой:

sudo apt install cifs-utils libpam-mount
Настройка модуля pam_mount

В конфигурации модуля pam_mount (файл /etc/security/pam_mount.conf.xml) задать параметры подключаемых сетевых ресурсов. Примеры конфигурации (только часть, непосредственно относящаяся к ресурсам):

Ресурс homes - монтирование домашних каталогов
<volume 
fstype="cifs"
server="ipa0.ipadomain.ru"
path="%(USER)"
mountpoint="/home/%(USER)"
options="user=%(USER),cruid=%(USER),nosharesock,sec=krb5i,vers=1.0"
/>
Для ОС СН - ресурс pdp_homes для монтирования домашних каталогов с ненулевой меткой конфиденциальности
<volume 
fstype="cifs"
server="ipa0.ipadomain.ru"
path="pdp_homes"
mountpoint="/home/.pdp/%(USER)"
options="user=%(USER),cruid=%(USER),uid=%(USERUID),gid=%(USERGID),nosharesock,sec=krb5i,vers=1.0"
/>

Дополнительно разрешить использование применяемых параметров, например:

<mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other,uid,gid,nosharesock,vers" />

Если не срабатывает автоматическое размонтирование каталогов при выходе из сессии, то использовать задержку размонтирования (wait, миллисекунды) или параметры hup="yes", term="yes" или  kill="yes" для передачи сигналов завершения "зависшим" процессам:

<logout wait="0" hup="no" term="no" kill="yes" />

Настройка pam-стека в ОС ОН

В ОС ОН можно использовать стандартную настройку. 
Опционально перед вызовом pam_mount в файле /etc/pam.d/common-session можно  добавить запрет вызова pam_mount для локальных пользователей:

session [success=1 default=ignore] pam_localuser.so
session optional pam_mount.so

Настройка pam-стека в ОС СН

Удалить (закомментировать) вызов модуля pam_mount в файле /etc/pam.d/common-session:

sudo sed -i "s/\(session[[:space:]]\+optional[[:space:]]\+pam_mount.so\)/#\1/" /etc/pam.d/common-session
В файлах /etc/pam.d/login и /etc/pam.d/fly-dm вызов модуля session required pam_parsec_mac заменить на:
session required pam_parsec_mac.so
session [success=1 default=ignore] pam_localuser.so
session optional pam_mount.so

Использование собственных сценариев монтирования

Установка пакетов

При использовании этго варианта достаточно установить пакет cifs-utils:

sudo apt install cifs-utils
Настройка

Вызывать собственные сценарии монтирования можно с помощью модуля pam_exec.

Чтобы пример ниже работал корректно на сервере ресурс homes должен ипользовать путь /home/.pdp/%U:

path = /home/.pdp/%U

Например, для ОС СН сценарий монтирующий домашний пользовательский каталог, имеющий ненулевую мандатную метку, соответствующую мандатной метке пользовательской сессии непосредственно в локальный домашний каталог пользователя:

/etc/pam.d/pdp_home.sh
#!/bin/bash
pdp_home=/home/.pdp/$PAM_USER
label="l`pdp-id -l`i`pdp-id -i`c`pdp-id -c`t0x0"
echo "Begin mounting PDP_HOME for user \"$PAM_USER\" with label \"$label\""
mount //ipa0.ipadomain0.ru/$PAM_USER $pdp_home -o user=$PAM_USER,sec=krb5i,rw,setuids,perm,soft,iocharset=utf8,nosharesock,cruid=$PAM_USER,vers=1.0
mount --bind $pdp_home/$label /home/$PAM_USER

Так же, как вызов pam_mount в примерах выше, сценарий должен вызываться после вызова pam-модуля session pam_parsec_mac. Приняв, что сценарий размещён в исполняемом файле /etc/pam.d/pdp_home.sh, его вызов в pam-стеке может выглядеть так:

session required pam_parsec_mac.so
session [success=1 default=ignore] pam_localuser.so
session optional pam_exec.so debug log=/dev/tty /etc/pam.d/pdp_home.sh

Где debug - необязательный параметр включения отладки, а log=/dev/tty - необязательный параметр вывода на терминал (также может быть полезен для отладки).

Типичные ошибки монтирования и расширенная диагностика

Неизвестная ошибка 524

Возникает при одновременном использовании параметров монтирования sec=krb5i и vers=1.0 если на сервере samba не включен параметр server signing = required.
Для устранения ошибки - добавить параметр в конфигурацию и перезапустить сервер.

Ошибка mount error(126): Required key not available

Не найден билет Kerberos. Для диагностики проверить сообщения cifs.upcall в системном журнале:

grep cifs.upcall /var/log/syslog

Для устранения ошибки указать верный идентификатор пользователя в параметре cruid=UID (числовой ID пользователя или просто имя пользователя).

Включение расширенной диагностики на сервере

Уровень диагностики на сервере задаётся конфигурационным параметром log level, например:

log level = 3

Диагностические сообщения выводятся в файлы в каталоге /var/log/samba/ (см. параметр конфигурации log file).

Включение расширенной диагностики на клиенте

Расширенная диагностика операций монтирования на клиенте может быть включена командами:

sudo -s
modprobe cifs
echo 'module cifs +p' > /sys/kernel/debug/dynamic_debug/control
echo 'file fs/cifs/* +p' > /sys/kernel/debug/dynamic_debug/control
echo 7 > /proc/fs/cifs/cifsFYI
exit
Диагностические сообщения выводятся в журнал ядра, посмотреть их можно командой:
sudo dmesg
Выключение расширенной диагностики выполняется командами:

sudo -s
echo 0 > /proc/fs/cifs/cifsFYI
exit

  • Нет меток