как применить samba_share_t ко всему в папке

Вы не можете. Самое близкое, что вы можете получить, это:

inotifywait -m /home/flag03/script

Это не покажет выполнение, но покажет, когда scriptоткрывается или к нему обращаются.

1
05.05.2020, 16:25
2 ответа

Если /dataиспользуется только samba, вы можете использовать опцию монтирования контекста, чтобы установить контекст файла на samba_share_tдля всех файлов на /data, например. context="system_u:object_r:samba_share_t:s0"в fstab. Параметр контекста времени монтирования переопределяет существующие метки файлов, но не изменяет содержимое диска. Метки файлов нельзя изменить при контекстном монтировании, все файлы имеют одинаковую метку.

Если опция монтирования не указана, обычный способ настройки контекста файла — semanage fcontext. Используйте semanage fcontext -a -t samba_share_t '/data(/.*)?'для добавления контекста в базу данных и применения новых файловых контекстов (рекурсивно )с помощью restorecon -r /data.

Если у вас есть другие пользователи/серверы, обращающиеся к данным (помимо samba ), у вас есть несколько вариантов.

  • Вы можете включить samba_export_all_roилиsamba_export_all_rwлогическое значение , которое включает только очень широкое чтение -или чтение -доступ для записи (при условии, что samba может читать файлы в первую очередь, применяются правила SELinux после стандартных проверок разрешений ). Обратите внимание, что включение любого логического значения делает политику безопасности более разрешительной.

  • Используйте параметр монтирования, как описано выше, и создайте пользовательскую политику, позволяющую другим процессам получать доступ к файлам с помощью samba_share_t. Установите другой процесс для работы вразрешающем режиме(требует перезапуска процесса/службы )для создания записей журнала. Затем используйтеaudit2allowдля создания необходимой политики. Вставьте политику, а другую установите обратно в , принудительно применяя режим . Если вы получаете больше ошибок AVC, вы можете повторить процесс, чтобы добавить пользовательскую политику.

    Это можно применить и другим способом (, позволяя samba обращаться к файлам с другим контекстом, но тогда у вас, вероятно, будет та же проблема, что файлы в /dataимеют неправильный контекст ).

  • Напишите пользовательскую политику, определяющую новый контекст файла с желаемым доступом для других доменов.

2
28.04.2021, 23:16

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

  • У меня есть 8-дисковый рейд -5 томов через карту рейда LSI на сервере; он был отформатирован как XFS и монтировался под SLES 11.4 в течение последних ~10 лет.
  • заменили один диск с операционной системой и теперь работает RHEL 7.8 с применением selinux .
  • Я монтирую свою файловую систему XFS как /dataпод RHEL 7. Следующий синтаксис обязателен, особенно для semanage

-

 semanage fcontext -a -t samba_share_t "/data(/.*)?"

 restorecon -vR /data


# to samba share out home directories, if in your smb.conf

setsebool -P samba_enable_home_dirs on

Теперь можно сделатьchcon -t samba_share_t /data/folder1/folder2/folder3

но это быстро перестает быть решением, когда у вас есть данные за 10 лет и миллионы файлов/папок. Это была быстрая диагностика, когда selinux=enforcing и доступ к определенной подпапке был запрещен; выполнение chcon -t samba _общего доступа _t позволит получить немедленный доступ к указанной подпапке. Решение, похоже, было правильным синтаксисом при использовании semanage fcontext с ", за которым следует restorecon -vR

На выполнение semanageушло около 30 секунд, а на restorecon— около 2 минут, объем данных — 5 ТБ.

Если интересно:

/etc/fstab` is this in RHEL 7.8

/dev/disk/by-uuid/e16528d8-ec26-4441-828a-d399b46e4a21 /data auto nosuid,nodev,nofail 0 0

# ------------------------------------------------------------------------

/etc/samba/smb.conf

[global]
    workgroup = SAMBA
    security = user

    passdb backend = tdbsam

    printing = bsd
    printcap name = /dev/null
    load printers = no
    disable spoolss = yes
#   cups options = raw

[homes]
    comment = Home Directories
    valid users = %S, %D%w%S 
    browseable = No
    read only = No
    inherit acls = Yes

[data]
    comment = data
    inherit acls = Yes
    read only = No
    path = /data
    directory mask = 770
    create mask = 660

# ------------------------------------------------------------------------
/etc/selinux/config

# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.

SELINUX=enforcing
SELINUXTYPE=targeted
0
28.04.2021, 23:16

Теги

Похожие вопросы