Назад | Перейти на главную страницу

SELinux создает настраиваемую роль

У меня есть папка, доступная через Samba, и контейнер Docker, которому я хотел бы предоставить доступ к указанной папке, добавив ее как том в контейнер Docker (да, я знаю, что это не переносимо).

SELinux блокирует доступ контейнера к папке, поскольку папка и ее содержимое помечены как samba_share_tне svirt_sandbox_file_t

Я знаю, что домен smbd_t имеет доступ к ряду меток SELinux (например, httpd_sys_content_t, хотя sesearch -s smbd_t --allow предоставляет полный список), но svirt_sandbox_file_t не один из них.

Я вижу несколько способов обойти эту проблему:

Другой вариант, который я могу придумать, - это создать свою собственную роль SELinux с собственным ярлыком, который дает доступ только к Samba и svirt (чего я раньше не делал, но хочу попробовать).

Я что-то упустил? Есть ли более простой способ сделать это?

Я бы пошел по пути добавления правила, разрешающего samba писать в svirt_sandbox_file_t. Поскольку вы хотите, чтобы самбе было разрешено загружать контент в контейнер. Is samba нужно только прочитать контент, а затем просто добавить разрешающие правила, чтобы это произошло.

Вы должны иметь возможность установить соответствующее логическое значение SELinux, virt_sandbox_use_samba.

setsebool -P virt_sandbox_use_samba 1

Если кто-то столкнется с той же проблемой, я выбрал альтернативное решение, т.е. smbd_t для доступа к материалам с пометкой svirt_sandbox_file_t. Это копия 1: 1 с samba_share_t в системе CentOS 7.

# cat >samba_docker_policy.te<<EOF
module samba_docker_policy 1.0;
require {
    type smbd_t;
        type svirt_sandbox_file_t;
        class dir { ioctl read write create getattr setattr lock unlink link rename add_name remove_name reparent search rmdir open };
        class lnk_file { ioctl read write create getattr setattr lock append unlink link rename };
        class file { ioctl read write create getattr setattr lock append unlink link rename open };
        class filesystem { getattr quotaget };
        class fifo_file { ioctl read write create getattr setattr lock append unlink link rename open };
        class sock_file { ioctl read write create getattr setattr lock append unlink link rename open };
}

#============= svirt_sandbox_file_t ==============

allow smbd_t svirt_sandbox_file_t : dir { ioctl read write create getattr setattr lock unlink link rename add_name remove_name reparent search rmdir open } ;
allow smbd_t svirt_sandbox_file_t : lnk_file { ioctl read write create getattr setattr lock append unlink link rename } ;
allow smbd_t svirt_sandbox_file_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ;
allow smbd_t svirt_sandbox_file_t : filesystem { getattr quotaget } ;
allow smbd_t svirt_sandbox_file_t : fifo_file { ioctl read write create getattr setattr lock append unlink link rename open } ;
allow smbd_t svirt_sandbox_file_t : sock_file { ioctl read write create getattr setattr lock append unlink link rename open } ;
EOF
# checkmodule -M -m -o samba_docker_policy.mod samba_docker_policy.te
# semodule_package -o samba_docker_policy.pp -m samba_docker_policy.mod
# semodule -i samba_docker_policy.pp