Статья не для публикации.
Обновление 2020-0826
Информация | ||
---|---|---|
Клиент ALD: Создание мандатных домашних каталогов пропатченной самбой порождается командой Эта команда вызывается на PAM-этапе session pam_ald.so (в etc/pam.d/common-session), файл src/modules/ald-cfg-smbc/ALDCfgSmbc.cpp, DoMountCIFSUserHome(), где для монтирования просто вызывается system() cо сформированной нужной строкой команды. Выполнение этой команды (от sudo) из командной строки имеет аналогичный эффект. Дефолтные параметры, которые прописаны в ALD, видимо их можно убрать:
Для того, чтобы заработало сочетание параметров sec=krb5i и vers=1.0 необходимо в конфигурацию сервера samba добавить параметр "server signing = required" и перезапустить сервер samba (перезапустить необходимо даже если используется хранение параметров в samba-registry):
Команда не выполняется, так не может найти билет Керберос для ipauser01 (ищет KEYRING:persistent:UID:UID, а полученный от имени sudo билет лежит в KEYRING:persistent:0:0) 2. Монтирование выполняется при условии, что уже существует /home/ipauser01/ (домашний каталог пользователя), backdoor срабатывает, и, если метка ненулевая, то создаёт мандатные пользовательские подкаталоги. При этом подкаталоги создаются только при условии, что вызванная шара самбы - специальная шара homes (в ALD для этого используется каталог /ald_export_home). |
Предупреждение | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Парсек написан для работы на локальной машине, и он работает от имени суперпользователя игнорируя все мандатные ограничения. В том числе - выполяет монтирование мандатных домашних каталогов находясь на нулевом уровне конфиденциальности. При подключении через сеть ему приходится работать от имени пользвателя, и вступают в силу мандатные ограничения, не позволяющие работать с конфиденциальной информацией. В результате Парсек просто не видит разделяемых каталогов с ненулевой конфиденциальностью.
ToDo:
|
Описание стенда
- Сервер FreeIPA + Samba. Порядок установки и настройки см. Samba + FreeIPA аутентификация пользователей Samba в Kerberos.
В промышленной эксплуатации службу samba рекомендуется размещать на отдельном сервере. Порядок настройки отдельной службы на отдельном сервере см. также в статье Samba + FreeIPA аутентификация пользователей Samba в Kerberos. - Параметры сервера FreeIPA + Samba, используемые далее:
- имя сервера ipa0.ipadomain/ru;
- администратор домена admin;
- пользователь домена с возможностью входа с ненулевой меткой конфиденциальности - ipauser;
- Компьютер - клиент FreeIPA. Инструкцию по вводу компьютера в домен см. с статье FreeIPA.
Настройка сервера
Предупреждение | |||||||
---|---|---|---|---|---|---|---|
| |||||||
При работе с конфиденциальными данными в обязательном порядке следует настроить ограничения на файловом сервере: установить в конфигурации samba в секции [global] параметры:
В используемой в данной статье конфигурации (когда конфигурация samba хранится в реестре samba) это можно сделать из командной строки (сервис при этом перезапускать не обязательно, изменения применятся автоматически). Команды:
Если конфигурация хранится в файле, то внести изменения в файл/
|
Информация |
---|
Далее в примерах предполагается, что конфигурация samba находится в реестре samba. Если конфигурация находится в файле необходимо внести указанные изменения в файл конфигурациии перезапустить службу samba. |
Создать конфигурации разделяемых ресурсов импортировать их в конфигурацию samba. Создаваемые ресурсы:
- Ресурс для монтирования домашних каталогов при работе с нулевой меткой конфиденциальности - ресурс homes (стандарный ресурс samba);
- Только для ОС СН. Ресурс для монтирования домашний каталогов при работе с ненулевой меткой конфиденциальности. Имя ресурса может быть произвольным, в примере используется имя pdp_homes. Данный ресурс требуется только для ОС СН.
Конфигурации ресурсов сохраняются в файлах, далее импортируются в конфигурацию samba. Команды:
Command |
---|
cat << EOT > homes.txt cat << EOT > pdp_homes.txt sudo net conf import homes.txt 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 (т.е. действиями со стороны клиентской машины) создать его невозможно, поэтому на момент подключения пользователя пользовательский подкаталог должен быть уже создан. При этом:
- каталог должен принадлежать пользователю;
- только в ОС СН:это должен быть каталог с низким уровнем целостности, иначе запись в него из сетевого подключения будет невозможна.
- каталог должен иметь метку конфиденциальности не ниже максимально допустимой для пользователя;
Для пользователя ipauser:
Command |
---|
sudo mkdir /home/.pdp/ipauser |
Далее возможны два варианта:
Заранее создать в каталоге пользователя все возможные для него варианты домашних каталогов для всех допустимых сочетаний атрибутов конфиденциальности (неудобно, но безопасно). При этом, так как при входе в любую сессию независимо от её метки конфиденциальности Парсек проверяет и создаёт пользовательский каталог с нулевой меткой конфиденциальности, этот каталог также в обязательном порядке должен быть создан заранее:
Command |
---|
sudo mkdir /home/.pdp/ipauser/l0i0c0x0t0x0 |
Настройка клиента
Клиент должен быть введён в домен FreeIPA. Инструкцию по вводу компьютера в домен см. с статье FreeIPA.
Далее, в зависимости от задач, можно выбрать один из вариантов настройки:
- Монтирование с помощью pam_mount (скорее применимо в ОС ОН, так как предоставляет простой и стандартный способ монтирования);
- Монтирование с помощью собственного сценария (скорее применимо в ОС СН, так как позволяет гибко настраивать монтирование каталогов с ненулевыми мандатными метками).
Эти варианты при необходимости могут применяться совместно, дополняя друг друга.
Предупреждение |
---|
При работе с конфиденциальными данными в ОС СН следует в обязательном порядке использовать параметры монтирования sec=krb5i,vers=1.0 Если конфиденциальные данные не используются то в ОС СН и в ОС ОН рекомендуется использовать параметр sec=krb5i без уточнения версии. |
Использование модуля pam_mount
Установка пакетов
Набор пакетов
Настройка клиента
Клиент должен быть введён в домен FreeIPA. Инструкцию по вводу компьютера в домен см. с статье FreeIPA.
Установка пакетов
Набор пакетов, необходимых для монтирования домашних каталогов можно установить командой:
Command |
---|
sudo apt install cifs-utils libpam-mount |
Настройка модуля pam_mount
В конфигурации модуля pam_mount (файл /etc/security/pam_mount.conf.xml) задать параметры подключаемых сетевых ресурсов. Примеры конфигурации (только часть, непосредственно относящаяся к ресурсам):
Блок кода | ||
---|---|---|
| ||
<volume fstype="cifs" server="ipa0.ipadomain.ru" path="%(USER)" mountpoint="/home/%(USER)" options="user=%(USER),cruid=%(USER),nosharesock,sec=krb5krb5i,vers=1.0" /> |
Блок кода | ||
---|---|---|
| ||
<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=krb5krb5i,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:
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 unshare_root_only
session optional pam_mount.so
session required pam_parsec_mac.so
/> |
Настройка 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 |
Использование собственных сценариев монтирования
Вызывать собственные сценарии монтирования можно с помощью модуля pam_exec. Например, для ОС СН сценарий, монтирующий домашний пользовательский каталог, имеющий ненулевую мандатную метку, соответствующую мандатной метке пользовательской сессии непосредственно в локальный домашний каталог пользователя:
Блок кода | ||
---|---|---|
| ||
#!/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 - необязательный параметр вывода на терминал (также может быть полезен для отладки).