我将 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_ro
或samba_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