如何将 samba_share_t 应用于文件夹下的所有内容

如何将 samba_share_t 应用于文件夹下的所有内容

我将 5tb 的数据安装/data到我的新 Linux RHEL 7.7 服务器上。

我有selinux作为强制执行;我/data共享了桑巴舞,它大部分工作正常。但是当我深入几个文件夹时,/data/我的访问被拒绝。如果我在该特定子文件夹上执行操作,chcon -t samba_share_t那么 samba 就会进入该子文件夹。再深入一点,同样的问题。

我如何正确地使我的/data/文件夹下的所有内容都具有samba_share_t并仅与 samba 一起使用?

厌倦了 selinux

答案1

如果/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_rosamba_export_all_rw 布尔值它启用非常广泛的只读或读写访问(假设 samba 可以首先读取文件,SELinux 规则在标准权限检查后应用)。请注意,启用任一布尔值都会使安全策略更加宽松。

  • 使用如上所述的挂载选项并生成自定义策略,允许其他进程访问带有samba_share_t.设置其他运行的进程宽容模式(需要重新启动进程/服务)以生成日志条目。然后使用audit2allow制定必要的政策。插入策略并将另一个设置回执行模式。如果您收到更多 AVC 错误,您可以重复此过程以附加自定义策略。

    这也可以以其他方式应用(允许 samba 访问具有不同上下文的文件,但随后您可能会遇到相同的问题,即文件/data具有错误的上下文)。

  • 编写自定义策略,定义新的文件上下文以及其他域所需的访问权限。

答案2

所以这就是我所做的,我认为我的主要问题是错误地输入语法,这就是我遇到问题的原因。

  • 我在服务器中通过 LSI raid 卡有一个 8 磁盘 raid-5 卷;它已被格式化为XFS并在过去约 10 年中安装在 SLES 11.4 下。
  • 更换了一张操作系统磁盘并现在运行 RHEL 7.8 并强制执行 selinux
  • 我在 RHEL 7 下挂载我的 XFS 文件系统。/data以下语法是必需的,特别是对于语义

-

 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=强制执行并且对特定子文件夹的访问被拒绝;做一个chcon -t samba_share_t然后将允许立即访问所述子文件夹。使用时解决方案似乎是正确的语法语义上下文以及"随后的恢复con-vR

对于 5TB 的数据,semanage完成大约需要 30 秒,大约需要 2 分钟。restorecon

如果好奇:

/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

相关内容