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

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

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

Примечание


Информация

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

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


Предупреждение

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




Оглавление

Предупреждение

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


Предупреждение

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

Блок кода
server max protocol = NT1
use socket MAC label = YES
server signing = required



Предупреждение

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

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

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



Информация
titleДанная статья применима к:
  • ОС ОН Орёл 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.

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

Предупреждение
titleТолько для ОС СН

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

Блок кода
client max protocol = NT1
use socket MAC label = YES
server signing = required

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

Command
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. Команды:

Command

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:

Command
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:

Command

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

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

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

Command
sudo apt install cifs-utils libpam-mount

Настройка модуля pam_mount

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

Блок кода
titleРесурс homes - монтирование домашних каталогов
<volume 
fstype="cifs"
server="ipa0.ipadomain.ru"
path="%(USER)"
mountpoint="/home/%(USER)"
options="user=%(USER),cruid=%(USER),nosharesock,sec=krb5i,vers=1.0"
/>


Блок кода
titleДля ОС СН - ресурс 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 для локальных пользователей:

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

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

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

Command
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:

Command
sudo apt install cifs-utils

Настройка

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

Блок кода
title/etc/pam.d/pdp_home.sh
#!/bin/bash
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/pdp_homes $home -o user=$PAM_USER,sec=krb5i,rw,setuids,perm,soft,iocharset=utf8,nosharesock,cruid=$PAM_USER,vers=1.0
mount --bind $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 в системном журнале:

Command
grep cifs.upcall /var/log/syslog

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

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

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

Блок кода
log level = 3

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

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

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

Command
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

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

Command
sudo dmesg

Выключена командами:


Command

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