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

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

Ключ

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

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

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

Парсек написан для работы на локальной машине, и он работает от имени суперпользователя игнорируя все мандатные ограничения. В том числе - выполяет монтирование мандатных домашних каталогов находясь на нулевом уровне конфиденциальности. При подключении через сеть ему приходится работать от имени пользвателя, и вступают в силу мандатные ограничения, не позволяющие работать с конфиденциальной информацией. В результате Парсек просто не видит разделяемых каталогов с ненулевой конфиденциальностью. Для того, чтобы изложенное в статье работало - нужен патч Парсека, чтобы монтирование каталога выполнялось на мандатном уровне сессии:

Блок кода
collapsetrue
/* bind cuurent session's dir to home*/
+ PDPL_T *bind_mac_save = pdp_get_current();
+ if( !bind_mac_save)
+     T("Can not save mac");
+ else {
+     PDPL_T *bind_mac_set=pdpl_dup(md->label);
+    if( !bind_mac_set)
+        T("Session label is NULL");
+    else {
+        pdpl_set_ilev(bind_mac_set,pdp_get_max_ilev()); 
+        if( pdp_set_current( bind_mac_set))
+            T("Can not set mac");
+        pdpl_put(bind_mac_set);
+    }
+ }
if( !(session_home=pdplugm_make_session_dir(homes_root,md->user,MACDIR,md->label,md->uid,md->gid,HOME_MODE)) )
{
+    if( bind_mac_save) {
+    pdp_set_current( bind_mac_save);
+    pdpl_put( bind_mac_save);
+    }
     L(pamh,LOG_ERR,"Error making home dir %m");
     return PAM_SYSTEM_ERR;
}

! T("Home dir is %s. Export environment variable MACDIR", session_home);
if( set_env(pamh,ENV_MACDIR,session_home) ) return PAM_SYSTEM_ERR;

if( bind_dir(session_home,md->home,0,md) )
{
+    if( bind_mac_save) {
+        pdp_set_current( bind_mac_save);
+        pdpl_put( bind_mac_save);
+    }
    L(pamh,LOG_CRIT, "Cannot bind %s on %s: %m",session_home,md->home);
    free(session_home);
    return PAM_SYSTEM_ERR;
}
+ if( bind_mac_save) {
+    pdp_set_current( bind_mac_save);
+    pdpl_put( bind_mac_save);
+ }
+ 
// free(session_home);


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

Подключение работает только с устаревшей версией протокола (vers=1) (см. BT-8434). При этом возможно использование только протокола без подписи пакетов (sec=krb5), более защищённый вариант с подписью пакетов (sec=krb5i) несовместим с vers=1.


Предупреждение
 Почему pam_mount после pam_parsec_mac работает на нужном уровне - тоже непонятно, но, похоже, это сделано, чтобы мог работать pam_ald. Нужно разобраться.


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

Не работает размонтирование при выходе из сессии. Возможная причина - опять не тот мандатный уровень. Нужно разбираться.




Оглавление

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

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


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

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

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



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

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

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

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




Информация
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

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

Command
sudo net conf setparm global "server max protocol" "NT1"
sudo net conf setparm global "use socket MAC label" "Yes"

Если конфигурация хранится в файле, то внести изменения в файл, после чего перезапустить сервис.


Информация
Далее в примерах предполагается, что конфигурация 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


Эти же действия можно выполнить командами не используя файлы для сохранения данных, например:

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/<имя_пользователя">. При этом с С помощью подключения через samba (т.е. действиями со стороны клиентской машины) создать такой ресурс невозможно, то есть

Информация

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

 При этом:

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

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

Command

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

Далее возможны два варианта:

  1. Заранее создать в каталоге пользователя все возможные для него варианты каталогов для всех допустимых сочетаний атрибутов конфиденциальности (безопасно)

    ;

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

    Command

    sudo mkdir /home/.pdp/ipauser/l0i0c0x0t0x0
    sudo chown ipauser:ipauser /home/.pdp/ipauser/l0i0c0x0t0x0
    sudo pdpl-file 0:0:0 /home/.pdp/ipauser/l0i0c0x0t0x0



  2. Изменить настройки ОС, принятые по умолчанию, и спользовать Использовать параметр ядра parsec.ccnr_relax, что позволит пользователю Парсеку пользователя самостоятельно создавать каталоги с нужными метками конфиденциальности (не превышающими метку конфиденциальности каталога пользователя) при сетевом подключении. Это более удобно, но несколько снижает защищённость системы.

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

Монтирование выполняется модулем pam_mount.

:

  1. Запускаемым от root-а с нулевым уровнем конфиденциальности.
  2. Для авторизации модуль предявляет билет керберос входящего пользователя.
  3. Т.е. примонтированный модуль действует от имени пользователя с нулевой меткой конфиденциальности, в результате примонтированный каталог пользователя имеет нулевую метку безопасности, и в нём видно только объекты с нулевой меткой.
  4. Далее Парсек пытается найти каталог с именем соответсвующим ненулевому уровню, не находит, пытается создать, не может

Предложение:

пропатчить pam_mount, чтобы он работал на уровне конфиденциальности пользователя.

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

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

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

Command
sudo apt install cifs-utils libpam-mount


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

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

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

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

Блок кода
<mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other,nosharesock,gid,uid,vers,user_xattr" />

Настройка 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 вызов модуля pam_parsec_mac заменить на:

Command
session [success=2 default=ignore] pam_localuser.so
session required pam_parsec_mac.so unshare_root_only
session optional pam_mount.so
session required pam_parsec_mac.so
Информация

[global]
create krb5 conf = No
dedicated keytab file = /etc/samba/samba.keytab
disable spoolss = Yes
domain logons = Yes
domain master = Yes
kerberos method = dedicated keytab
ldap group suffix = cn=groups,cn=accounts
ldap machine suffix = cn=computers,cn=accounts
ldap ssl = no
ldap suffix = dc=ipadomain0,dc=ru
ldap user suffix = cn=users,cn=accounts
log file = /var/log/samba/log.%m
max log size = 100000
passdb backend = ipasam:ldapi://%2fvar%2frun%2fslapd-IPADOMAIN0-RU.socket
realm = IPADOMAIN0.RU
registry shares = Yes
security = USER
server max protocol = NT1
use socket MAC label = Yes
workgroup = IPADOMAIN0
rpc_daemon:lsasd = fork
rpc_daemon:epmd = fork
rpc_server:tcpip = yes
rpc_server:netlogon = external
rpc_server:samr = external
rpc_server:lsasd = external
rpc_server:lsass = external
rpc_server:lsarpc = external
rpc_server:epmapper = external
ldapsam:trusted = yes
idmap config * : backend = tdb

[homes]
comment = Home Directories
create mask = 0600
directory mask = 0700
read only = No
valid users = %S[pdp_homes]
comment = pdp homes share
create mask = 0666
directory mask = 0777
path = /home/.pdp/%U
read only = No[share0]
comment = users share
create mask = 0666
directory mask = 0777
path = /share0/%U
read only = No