mount -o context= 为不支持xattr的文件系统(如vfat、ntfs)一次性设置挂载点默认SELinux上下文,形成基于类型的访问围栏,是沙箱隔离的关键前提;需文件系统支持、SELinux启用且策略允许对应域访问。

在挂载物理分区(如 /dev/sdb1)时,用 mount -o context= 并不能直接实现“沙箱隔离”,但它能为该挂载点建立**统一、可控的安全上下文边界**——这是 SELinux 沙箱隔离的关键前提。它不改变进程行为本身,而是让内核在策略决策时,把整个挂载内容“视为”指定类型,从而限制哪些进程可以访问、以何种方式访问。
context= 是如何支撑沙箱边界的
SELinux 的沙箱本质是“按类型隔离”。context= 机制让一个不支持扩展属性(xattr)的文件系统(比如 vfat、ntfs、ext4 临时挂载等)也能拥有明确的类型标签,从而被策略识别:
- 它不是修改文件本身的 SELinux 标签(底层没 xattr 就存不了),而是告诉内核:该挂载点下所有路径,在做访问检查时,都动态映射为指定 type(如
httpd_sys_content_t或sandbox_file_t) - 只要你的服务域(如
httpd_t、mysqld_t或自定义的sandbox_t)有对应 allow 规则(例如allow sandbox_t sandbox_file_t:dir { read search open }),它就能访问;其他无权限的域(如unconfined_t)则被拒绝 - 这就形成了一个“基于挂载点的访问围栏”,即最小可行沙箱:数据进得来、出不去,只对特定进程可见
适用场景与前提确认
不是所有挂载都能用 context=,必须满足以下条件:
-
文件系统类型支持:vfat、ntfs-3g、nfs(v4 + sec=krb5p)、cifs(内核 ≥ 4.11 且显式启用)、tmpfs、sysfs 等;ext4/xfs 等本地日志型文件系统不推荐,应改用
semanage fcontext+restorecon -
SELinux 处于 enforcing 或 permissive 模式:运行
getenforce确认,禁用状态(disabled)下该选项无效 - 内核已编译并启用 CONFIG_SECURITY_SELINUX_MOUNT_OPTION:主流 RHEL/CentOS/Fedora/AlmaLinux 默认开启
具体操作步骤(以挂载 U 盘为沙箱数据区为例)
假设你有一块 FAT32 U 盘 /dev/sdb1,希望仅允许 sandbox_t 域进程读写其中内容,其他进程一律禁止:
- 创建专用挂载点:
mkdir -p /mnt/sandbox-data - 挂载并指定上下文:
mount -t vfat -o context="system_u:object_r:sandbox_file_t:s0" /dev/sdb1 /mnt/sandbox-data - 验证效果:
ls -Z /mnt/sandbox-data应显示所有条目类型均为sandbox_file_t(即使 FAT 本身无标签) - 确保策略允许访问:需提前加载含
allow sandbox_t sandbox_file_t:dir_file_perms;的自定义模块(可用audit2allow从 avc 日志生成)
持久化与注意事项
该设置默认只在当前挂载周期生效,重启后失效:
- 写入
/etc/fstab实现开机挂载:/dev/sdb1 /mnt/sandbox-data vfat defaults,context="system_u:object_r:sandbox_file_t:s0" 0 0 -
context=不影响已有进程,只约束新发起的访问请求;若需立即限制正在运行的服务,请配合kill -SIGUSR1(对支持重载的守护进程)或重启服务 - 不要混淆
context=和fscontext=:fscontext设置的是文件系统超级块的上下文(极少用),而context才是挂载点默认路径上下文


















