Описание стенда
- Сервер 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
В используемой в данной статье конфигурации (когда конфигурация samba хранится в реестре samba) это можно сделать из командной строки (сервис при этом перезапускать не обязательно, изменения применятся автоматически). Команды:
sudo net conf setparm global "use socket MAC label" "Yes"
Создать конфигурации разделяемых ресурсов импортировать их в конфигурацию samba. Создаваемые ресурсы:
- Ресурс для монтирования домашних каталогов при работе с нулевой меткой конфиденциальности - ресурс homes (стандарный ресурс samba);
- Ресурс для монтирования домашний каталогов при работе с ненулевой меткой конфиденциальности. Имя ресурса может быть произвольным, в примере используется имя 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
Эти же действия можно выполнить командами не используя файлы для сохранения данных, например:
sudo net conf setparm "homes" "browseable" "No"
sudo net conf setparm "homes" "valid users" "%U"
и т.д.
Ресурс pdp_homes будет предоставлять для монтирования путь /home/.pdp/<имя_пользователя">. При этом с помощью подключения через samba создать такой ресурс невозможно, то есть
При этом:
- каталог должен приндлежать пользователю;
- это должен быть каталог с низким уровнем целостности, иначе запись в него из сетевого подключения будет невозможна.
- каталог должен иметь метку конфиденциальности не ниже максимально допустимой для пользователя;
Для пользователя ipauser:
sudo mkdir /home/.pdp/ipauser
sudo chown ipauser:ipauser /home/.pdp/ipauser
sudo pdpl-file 3:0:-1:CCNRA /home/.pdp/ipauser
Далее возможны два варианта:
- Заранее создать в каталоге пользователя все возможные для него варианты каталогов для всех допустимых сочетаний атрибутов конфиденциальности (безопасно);
- Использовать параметр ядра parsec.ccnr_relax, что позволит пользователю самостоятельно создавать каталоги с нужными метками конфиденциальности (не превышающими метку конфиденциальности каталога пользователя) при сетевом подключении. Это более удобно, но несколько снижает защищённость системы.
Настройка клиента
Монтирование выполняется модулем pam_mount.
:
- Запускаемым от root-а с нулевым уровнем конфиденциальности.
- Для авторизации модуль предявляет билет керберос входящего пользователя.
- Т.е. примонтированный модуль действует от имени пользователя с нулевой меткой конфиденциальности, в результате примонтированный каталог пользователя имеет нулевую метку безопасности, и в нём видно только объекты с нулевой меткой.
- Далее Парсек пытается найти каталог с именем соответсвующим ненулевому уровню, не находит, пытается создать, не может
Предложение:
пропатчить pam_mount, чтобы он работал на уровне конфиденциальности пользователя.
[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