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

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
  • Astra Linux Special Edition РУСБ.10015-01 и РУСБ.10015-10 (очередное обновление 1.7)

  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)

См. также Автоматическое монтирование разделяемых ресурсов CIFS (samba и DFS)

При работе в операционных Astra Linux Special Edition с конфиденциальными данными, предоставляемыми с помощью Samba, в обязательном порядке:

  1. Установить параметр сервера Samba:

    use socket MAC label = YES

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

    sudo net conf setparm global "use socket MAC label" "Yes"

  2. В очередных обновлениях Astra Linux Special Edition выпущенных до очередного обновления x.7 установить корректную версию протокола передачи данных (SMB/CIFS)

    Для Astra Linux Special Edition очередное обновление x.7 применение указанных ниже настроек параметров подключения не требуется.

    Подключение выполнять с параметрам sec=krb5i,vers=1.0, дополнительно установив параметр сервера server signing = required и подключение выполнять к специальному ресурсу homes. Для настройки:

    1. Установить на файловом сервере все доступные оперативные обновления;

    2. Включить на файловом сервере нужную версию протокола, для чего установить в конфигурации samba в секции [global] параметры:

      server max protocol = NT1
      server signing = required

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

      sudo net conf setparm global "server max protocol" "NT1"
      sudo net conf setparm global "server signing" "required"
      Если конфигурация хранится в файле /etc/samba/smb.conf, то внести изменения в файл;

  3. Независимо от используемой ОС и от того, где хранится конфигурация (в файле или в реестре),  после изменения параметров перезагрузить конфигурацию:

    sudo smbcontrol all reload-config


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


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

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

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

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

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

  • Компьютер - клиент FreeIPA. Инструкцию по вводу компьютера в домен см. в статье FreeIPA;

    После ввода компьютера в домен компьютер следует перезагрузить.

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

Далее в примерах предполагается, что конфигурация samba находится в реестре samba.

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

  1. Ресурс для монтирования домашних каталогов при работе с нулевой классификационной меткой;
  2. Только для Astra Linux Special Edition. Ресурс для монтирования домашний каталогов при работе с ненулевой классификационной меткой.

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

  1. Сохранение конфигурации в файле homes.txt:

    1. Для Astra Linux Common Edition, Astra Linux Special Edition с выключенным МРД, Astra Linux Special Edition без использования конфиденциальных данных:

      cat << EOT > homes.txt
      [homes]
         comment = Home Directories
         read only = No
         valid users = %S
      EOT

    2. Для Astra Linux Special Edition с включенным МРД для работы с конфиденциальными данными следует:

      1. Для домашних каталогов с нулевой классификационной меткой создать отдельный ресурс (имя ресурса может быть произвольным, в примере используется имя nomac). Этот ресурс фактически эмулирует работу специального ресурса home для "нулевых" домашних каталогов, что позволяет использовать специальный ресурс home для домашних каталогов с ненулевой классификационной меткой:

        cat << EOT > nomac.txt
        [nomac]
            comment = NOMAC Home Dirs
            read only = No
            valid users = %U
            browseable = No
            create mask = 0600
            directory mask = 0700
            follow symlinks = yes
            path = %H
        EOT

      2. В качестве пути (path) специального разделяемого ресурса home (имя ресурса в обязательном порядке должно быть home) использовать каталог /home/.pdp/<имя_пользователя>:

        cat << EOT > homes.txt
        [homes]
           comment = Home Directories
           read only = No
           valid users = %S
           browseable = No
           create mask = 0600
           directory mask = 0700
           follow symlinks = yes
           path = /home/.pdp/%U
        EOT

  2. Импорт в конфигурацию samba созданные на предыдущем шаге файлы homes.txt и nomac.txt:

    sudo net conf import homes.txt homes
    sudo net conf import nomac.txt nomac

Эти же действия можно выполнить командами без использования файлов для сохранения данных, например, для создания разделяемого ресурса 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"
и т.д.
Дополнительно:

  1. При использовании в параметрах разделяемого ресурса домашних каталогов значения follow symlinks = yes установить глобальный параметр:

    sudo net conf setparm global "allow insecure wide links" yes
    Подробнее см. man samba.conf;

  2. При совместном использовании параметров sec=krb5i и vers=1.0 (актуально для очередных обновлений, выпущенных ранее очередного обновления x.7) установить в секции [global] параметр server signing=required:

    sudo net conf setparm global "server signing" required

Настройки пользовательских каталогов на сервере для Astra Linux Special Edition

Созданный в примере выше специальный ресурс homes  будет предоставлять для монтирования:

  • в варианте настройки без использования конфиденциальных данных — каталог /home/<имя_пользователя> (конфигурация специального ресурса homes, принятая по умолчанию);
  • в варианте настройки для работы с конфиденциальными данными:
    • при подключении с нулевой классификационной меткой - каталог /home/.pdp/<имя_пользователя> (применение параметра path = /home/.pdp/%U в конфигурации ресурса для сессий с нулевой классификационной меткой);
    • при подключении с ненулевой классификационной меткой - каталог /home/.pdp/<имя_пользователя>/<классификационная_метка> (применение параметра path = /home/.pdp/%U в конфигурации ресурса для сессий с ненулевой классификационной меткой);

Каталоги, предоставляемые как ресурсы, должны быть расположены на сервере, и, если их нет, то нужно создать корневые пользовательские каталоги (включая каталог для работы с "нулевой" меткой) и назначить им корректные атрибуты. Пример создания каталогов для пользователя ipauser:

sudo mkdir -p /home/.pdp/ipauser/l0i0c0x0t0x0
sudo chown ipauser:ipauser /home/.pdp/ipauser
sudo pdpl-file 3:0:-1:CCNR /home/.pdp/ipauser

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

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

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

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

  1. Монтирование с помощью pam_mount (более применимо в Astra Linux Common Edition, так как предоставляет простой стандартный способ монтирования);
  2. Монтирование с помощью собственного сценария (более применимо в Astra Linux Special Edition, так как позволяет гибко настраивать монтирование каталогов с ненулевыми классификационными метками).

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


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

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

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

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

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

  1. Для Astra Linux Common Edition, Astra Linux Special Edition с выключенным МРД, Astra Linux Special Edition без использования конфиденциальных данных монтирование можно осуществлять непосредственно в домашний каталог пользователя (каталог /home/<имя_пользователя>):

    Ресурс homes - монтирование домашних каталогов
    <volume 
      fstype="cifs"
      server="ipa0.ipadomain.ru"
      path="%(USER)"
      mountpoint="/home/%(USER)"
      options="user=%(USER),cruid=%(USER),nosharesock,sec=krb5i"
    />
    
  2. Для Astra Linux Special Edition с включенным МРД и с использованием конфиденциальных данных:

    1. монтирование домашних каталогов с нулевой классификационной меткой осуществлять в специальный каталог /home/.<имя_пользователя>:

      <volume 
        fstype="cifs"
        server="ipa0.ipadomain0.ru"
        path="nomac"
        mountpoint="/home/%(USER)"
        options="user=%(USER),cruid=%(USER),uid=%(USERUID),gid=%(USERGID),nosharesock,sec=krb5i"
      />

      для примера монтироваться будет ресурс nomac;

    2. монтирование домашних каталогов с ненулевой классификационной меткой осуществлять в специальный каталог /home/.pdp/<имя_пользователя>:

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

      при этом, как указано выше, в каталог /home/.pdp/<имя_пользователя> будет монтироваться:

      1. при подключении с нулевой классификационной меткой - каталог /home/.pdp/<имя_пользователя> (применение параметра path = /home/.pdp/%U в конфигурации разделяемого ресурса для сессий с нулевой классификационной меткой);
      2. при подключении с ненулевой классификационной меткой - каталог /home/.pdp/<имя_пользователя>/<классификационная_метка> (применение параметра path = /home/.pdp/%U в конфигурации разделяемого ресурса для сессий с ненулевой классификационной меткой);

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

<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-стека в Astra Linux с выключенным МРД

В Astra Linux Common Edition или Astra Linux Special Edition с выключенным МРД можно без изменений использовать стандартную настройку PAM-стека. Опционально перед вызовом session pam_mount в файле /etc/pam.d/common-session можно  добавить запрет вызова pam_mount для локальных пользователей:

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

Настройка pam-стека в Astra Linux Special Edition с включенным МРД

Удалить (закомментировать) вызов модуля 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 добавить две строки: проверку, является ли пользователь локальным (pam_localuser.so), и вызов модуля монтирования (pam_mount.so):

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

В итоге структура монтирования при входе пользователя с нулевой классификационной меткой будет выглядеть так:

TARGET                                SOURCE...├─/home/ipauser01                     //ipa0.ipadomain.ru/nomac 
└─/home/.pdp/ipauser01                //ipa0.ipadomain.ru/ipauser01

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

TARGET                                SOURCE                                        
├─/home/ipauser01                     //ipa0.ipadomain0.ru/nomac                    
├─/home/.pdp/ipauser01                //ipa0.ipadomain0.ru/ipauser01                
│ └─/home/.pdp/ipauser01/l0i0c0x0t0x0 //ipa0.ipadomain0.ru/nomac                    
├─/var/private/tmp/l0i0c0x0t0x0       /dev/vda1[/tmp]                               
├─/tmp                                /dev/vda1[/var/private/tmp/l1i0c0x0t0x0]      
├─/var/private/vartmp/l0i0c0x0t0x0    /dev/vda1[/var/tmp]                           
└─/var/tmp                            /dev/vda1[/var/private/vartmp/l1i0c0x0t0x0]   

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

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

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

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

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

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

path = /home/.pdp/%U

Например:

Для Astra Linux Special Edition с включенным МРД сценарий, монтирующий домашний пользовательский каталог, имеющий ненулевую классификационную метку, соответствующую классификационной метке пользовательской сессии непосредственно в локальный домашний каталог пользователя:

/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
mount --bind $pdp_home/$label /home/$PAM_USER

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

/etc/pam.d/pdp_home.sh
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 в системном журнале:

sudo grep cifs.upcall /var/log/syslog

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

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

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

log level = 5

Диагностические сообщения выводятся в файлы в каталоге /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