限制特定应用程序访问特定文件

isu*_*sup 8 opensuse apparmor access-control

通常,使用用户的有效 UID 运行的应用程序可以访问存储在用户主目录中的私有文件。如何限制特定应用程序访问某些私有文件,同时仍然允许其他应用程序在 openSUSE 上使用 AppArmor 访问这些文件。

Tho*_*man 5

AppArmor 是强制访问控制(MAC) Linux 安全模块(LSM),由 Ubuntu 和 SUSE Linux 等使用。AppArmor 访问控制规则在 AppArmor 配置文件中定义/etc/apparmor.d/。配置文件只是文本文件,其中包含有关允许配置文件所属的应用程序访问的资源的信息。

通常,在设计配置文件时,会在 AppArmor 设置为complain模式的情况下运行应用程序,在该模式下允许访问控制违规,但会被记录。使用日志,可以迭代地优化配置文件。配置文件完成后,AppArmor 可以切换到enforce模式,在该模式下,配置文件中定义的访问控制规则被强制执行,并记录任何违规尝试。

AppArmor 配置文件的轮廓如下所示:

#include <tunables/global>
/path/to/application {
   [...]
}
Run Code Online (Sandbox Code Playgroud)

这些#include指令允许将与多个应用程序有关的语句放在一个公共文件中,然后包含在每个相关应用程序的配置文件中。

<tunables/global>对应的文件/etc/apparmor.d/tunables/global依次包含每个配置文件都应该可用的定义。这些附加包含之一是/etc/apparmor/tunables/home,它与@{HOME}/** rw(或类似指令)一起授予应用程序访问用户主目录的权限。

如果是这种情况,为了拒绝访问用户主目录中的某些文件,需要添加配置文件规则以明确拒绝对文件的访问。这可以使用deny指令来完成,例如在以下示例中:

#include <tunables/global>
/path/to/application {
   [...]
   # Allow directory listings (i.e. 'r' on directories).
   @{HOME}/ r

   # This is needed for saving files in the home directory.
   @{HOME}/** rw

   # Revoke access to specific file
   deny /home/user/file rwa
}
Run Code Online (Sandbox Code Playgroud)

将拒绝读取 ( r)、写入 ( w) 和追加 ( a) 访问 /home/user/file

另一种方法是将您想要保护的路径添加到/etc/apparmor.d/abstractions/private-filesor/etc/apparmor.d/abstractions/private-files-strict并确保每个受影响的应用程序的 AppArmor 配置文件包含<abstractions/private-files><abstraction/private-files-strict>。这些文件应该已经包含公共文件的规则,为了隐私或其他安全考虑,这些文件应该受到保护。

有关访问模式详细信息的完整列表以及有关 AppArmor 安全配置文件的更多信息,请参阅apparmor.d 手册页Novell AppArmor 管理指南 (pdf)


jme*_*etz 2

[回应编辑后的更具体的问题。]

要限制 AppArmor 中程序 foo 的访问,请使用以下条目创建一个配置文件

/usr/bin/foo {
    /etc/foo/* r,
}
Run Code Online (Sandbox Code Playgroud)

允许读取 /etc/foo 中的文件

    /etc/** 
Run Code Online (Sandbox Code Playgroud)

将允许读取访问 /etc 中的所有子目录

相反你可以使用

    deny /private/path rwa
Run Code Online (Sandbox Code Playgroud)

限制对私有路径的访问。

参考