如何在不先重新启动的情况下重新标记 SELINUX 文件系统?

如何在不先重新启动的情况下重新标记 SELINUX 文件系统?

我可以触摸文件 /.autorelabel 并重新启动,在重新启动的初始化过程中,它将为我执行 SELINUX 重新标记。但我想在系统刚刚复制到硬盘驱动器映像的不同情况下执行此操作。我可以 chroot 到原始文件树,或 chroot 到刚刚填充的设备映像并运行它。我只是找不到任何说明要运行的内容。

此映像正在 AWS EC2 上制作成 AMI,包含 CentOS 6.3。但重新标记所需的时间太长(6 分钟或更长时间)。我想将重新标记移至映像构建,这样额外的时间就不是问题了(因为它只发生一次,而不是每次启动 AMI 时都发生)。我可以让这个重新标记成为文件系统最后一次卸载之前的最后一件事,直到它成为 AMI 并启动。我只需要知道要调用什么来执行此操作。

我搜索了手册页,但一无所获。我搜索了系统初始化脚本,但检测到 /.autorelabel 的地方,不清楚发生了什么。

类似文件http://www.centos.org/docs/5/html/5.2/Deployment_Guide/sec-sel-fsrelabel.html仅说明如何执行在重启后仍能正常工作的操作。我需要在“重启”之前完成工作(卸载、构建 AMI 并启动准备就绪)。

重点是...是的,将会重新启动...但我希望在此之前完成重新标记工作,这样每次启动 AMI 时就不会再这样做(因为这需要很长时间)。

答案1

如果要将文件从一个文件系统复制到另一个文件系统,则可以:

  • 如果使用cp,请添加-c复制 SELinux 上下文的选项。
  • 如果使用tar,请添加--selinux复制 SELinux 上下文的选项。

通过确保目标文件具有预期的上下文(假设上下文一开始就是正确的),这可以节省您一些时间。

至于fixfiles,它是 的包装器restorecon,我通常使用它。当/.autorelabel存在时,init 脚本将运行restorecon -p -r /,它会打印六分钟的点,然后重新启动。我更喜欢-v详细列出已更改的上下文,而不是-p。无论哪种方式,您都应该chroot在运行此脚本之前进入文件系统。

答案2

该命令fixfiles relabel可用于重新标记文件系统而无需重新启动。大多数人应该阅读 Centos 部署指南底部的警告,其中讨论了重新标记文件系统,但这对于即将重启的情况来说应该不是问题。

相关内容