我正在尝试在使用 SELinux 的系统(例如 Cent-OS)上挂载 ecryptfs,并且我想保留所有单个底层文件的安全标签。使用mount -o
命令我可以设置所有文件的安全标签,例如
mount -t ecryptfs /var/lib/mysql /var/lib/mysql -o context="system_u:object_r:mysqld_db_t:s0"
这不是我想要的。据我所知,ecryptfs支持扩展属性,并且诸如ecryptfs_setxattr
和 等函数都定义在ecryptfs内核模块的ecryptfs_getxattr
文件中。inode.c
此外,从man mount
选项fscontext
看来,这正是我想要的:
fscontext= 选项适用于所有文件系统,无论其 xattr 支持如何。 fscontext 选项将总体文件系统标签设置为特定的安全上下文。该文件系统标签与文件上的各个标签是分开的。它代表整个文件系统进行某些类型的权限检查,例如在安装或文件创建期间。单个文件标签仍然从文件本身的 xattr 中获取。除了为各个文件提供相同的标签之外, context 选项实际上还设置 fscontext 提供的聚合上下文。
还是下面的命令
mount -t ecryptfs /var/lib/mysql /var/lib/mysql -o fscontext="system_u:object_r:mysqld_db_t:s0"
将所有文件的 SELinux 标签更改为,即使是具有原始标签的 system_u:object_r:mysqld_db_t:s0
文件。/var/lib/mysql/mysql.sock
system_u:object_r:mysqld_var_run_t:so
我的问题:
1) 如何将 ecryptfs 挂载到目录并保留每个文件的安全标签(即 SELinux 标签)?
mount -o fscontext
2)为什么ecryptfs不能像它想象的那样工作?
笔记:我使用 mysql 目录作为示例,我能够向 SELinux 添加策略模块,并在 ecryptfs 安装在顶部时使 mysqld 工作。在这里,我要求一个通用的解决方案,使 ecryptfs 对 SELinux 透明。