Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.14. 文件名称转换

文件名转换 功能允许策略作者在编写策略转换规则时指定文件名。可以编写一条声明为以下条件的规则:如果标有 A_t 的进程在标有 B_t 的目录中创建指定对象类,并且指定的对象类名为 objectname,它会获取标签 C_t。这种机制可以更加精细地控制系统上的进程。
如果不进行文件名转换,可以通过三种方式来标记对象:
  • 默认情况下,对象从父目录继承标签。例如,如果用户在标有 etc_t 的目录中创建文件,则该文件也会被标记 etc_t。但是,当需要在具有不同标签的目录中有多个文件时,此方法没有用处。
  • 策略写入器可以在策略中编写一个规则,声明如下:如果类型为 A_t 的进程在标有 B_t 的目录中创建指定对象类,则对象会获得新的 C_t 标签。如果单个程序在同一目录中创建多个对象,每个对象需要单独的标签,则这种方法存在问题。此外,这些规则仅提供部分控制,因为未指定创建的对象的名称。
  • 某些应用程序具有 SELinux 感知,允许此类应用程序询问系统特定路径的标签是什么。这些应用程序随后请求内核使用所需标签创建对象。识别 SELinux 的应用程序示例有 rpm 软件包管理器、restorecon 实用程序或 udev 设备管理器。但是,不能指示创建 SELinux 感知文件或目录的每个应用程序。通常需要在创建后使用正确的标签重新标记对象。否则,当受限域尝试使用该对象时,将返回 AVC 消息。
文件名转换功能减少了与不正确的标记相关的问题,提高了系统的安全性。策略作者可以正确声明,特定应用程序只能在指定目录中创建具有指定名称的文件。规则会考虑文件名,而不是文件路径。这是文件路径的基名。请注意,文件名转换使用 strcmp() 功能完成的完全匹配。不考虑使用正则表达式或通配符字符。
注意
文件路径在内核中可能有所不同,文件名转换不使用路径来确定标签。因此,此功能只影响初始文件创建,且不会修复已创建对象的不正确的标签。

例 4.2. 使用文件名转换的策略规则编写示例

以下示例显示了带有文件名转换的策略规则:
filetrans_pattern(unconfined_t, admin_home_t, ssh_home_t, dir, ".ssh")
此规则规定,如果具有 unconfined_t 类型的进程在标有 admin_home_t 的目录中创建 ~/.ssh/ 目录,则 ~/.ssh/ 目录会获得标签 ssh_home_t
以下是使用文件名转换编写策略规则的类似示例:
filetrans_pattern(staff_t, user_home_dir_t, httpd_user_content_t, dir, "public_html")
filetrans_pattern(thumb_t, user_home_dir_t, thumb_home_t, file, "missfont.log")
filetrans_pattern(kernel_t, device_t, xserver_misc_device_t, chr_file, "nvidia0")
filetrans_pattern(puppet_t, etc_t, krb5_conf_t, file, "krb5.conf")
注意
文件名转换功能主要影响策略编写器,但用户可以注意到,几乎始终使用包含目录的默认标签创建文件对象,某些文件对象具有与策略中指定的不同标签。