AppArmor配置(二)

AppArmor 是一个实施了基于名称强制存取控制的Linux安全模组。AppArmor 界定了单个程序进入一组文件列表的权限并遵循posix 1003.1e 草稿的能力。

默认情况下AppArmor已安装并载入。它使用每个程序的profiles来确定这个程序需要什么文件和权限。有些包会安装它们自己的profiles,额外的profiles可以在apparmor-profiles包里找到。

要安装apparmor-profiles软件包,在终端输入:

sudo apt-get install apparmor-profiles

AppArmor配置文件有两种执行模式:

投诉/学习: 允许并记录配置文件的冲突。对于测试并开发新的配置文件有用途。

强制/受限:强制配置策略及违规记录。

使用 AppArmor
配置文件
参考资料

使用 AppArmor

apparmor-utils软件包包含一些命令行工具,使用它们您可以更改AppArmor的执行模式、查看配置文件的状态、创建新的配置文件等等。

apparmor_status是用来查看AppArmor配置文件的当前状态的。

sudo apparmor_status

aa-complain将一个配置文件置入complain模式。

sudo aa-complain /path/to/bin

aa-enforce将一个配置文件置入enforce模式。

sudo aa-enforce /path/to/bin

/etc/apparmor.d目录是AppArmor配置文件的所在之处。可用来操作所有配置文件的模式mode。

要将所有配置文件置入complain模式,输入:

sudo aa-complain /etc/apparmor.d/*

要将所有配置文件置入enforce模式:

sudo aa-enforce /etc/apparmor.d/*

apparmor_parser用来将一个配置文件载入内核。它也可以通过使用-r选项来重新载入当前已载入的配置文件。要载入一个配置文件:

cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a

要重新载入一个配置文件:

cat /etc/apparmor.d/profile.name | sudo apparmor_parser -r

service apparmor can be used to reload all profiles:

sudo service apparmor reload

The /etc/apparmor.d/disable目录可以和apparmor_parser -R选项一起使用以禁用一个配置文件。

sudo ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/profile.name

要重新激活 一个已禁用的配置文件,请在 /etc/apparmor.d/disable/里删除到其配置文件的软链接。然后使用选项 -a载入配置文件。

sudo rm /etc/apparmor.d/disable/profile.name
cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a

AppArmor可以被禁用,其内核模块可以通过输入以下命令卸载:

sudo service apparmor stop
sudo update-rc.d -f apparmor remove

要重新启用AppArmor,输入:

sudo service apparmor start
sudo update-rc.d apparmor defaults

List running executables which are currently confined by an AppArmor profile:
$ ps auxZ | grep -v ‘^unconfined’

List of processes with tcp or udp ports that do not have AppArmor profiles loaded:
$ sudo aa-unconfined
$ sudo aa-unconfined --paranoid

用你操作的profile名称来替代profile.name。再有,用实际的执行文件的路径来代替/path/to/bin/。例如,使用/bin/ping来替代ping
配置文件

AppArmor profiles are simple text files located in /etc/apparmor.d/. The files are named after the full path to the executable they profile replacing the “/” with “.”. For example /etc/apparmor.d/bin.ping is the AppArmor profile for the /bin/ping command.

在配置文件中,主要有两种类型的规则

路径 项: 指定文件系统中哪些文件是一个应用程序可以访问的。

Capability entries: determine what privileges a confined process is allowed to use. 

作为一个例子来看看/etc/apparmor.d/bin.ping:

#include <tunables/global>
/bin/ping flags=(complain) {
#include <abstractions/base>
#include <abstractions/consoles>
#include <abstractions/nameservice>

capability net_raw,
capability setuid,
network inet raw,

/bin/ping mixr,
/etc/modules.conf r,
}

#include <tunables/global>:包含了来自另外文件的声明。这样做使得来自不同应用程序的相关声明都被放置在同一个文件中。

/bin/ping flags=(complain): path to the profiled program, also setting the mode to complain.

capability net_raw,: 允许程序拥有连接 CAP_NET_RAW Posix.1e 的能力。

/bin/ping mixr,: 允许应用程序读取和执行该文件。

编辑配置文件后必须重新载入配置文件。参看使用 AppArmor 获取详情
创建配置文件

设计测试计划: 试着思考应用程序会怎样运行。测试计划可以分解为小的测试用例。对每个测试用例,应该有个简短的描述,并列出应该执行的步骤。

一些标准的测试情况是:

    启动程序。

    停止程序。

    重新载入程序。

    测试所有init脚本支持的命令。

生成新配置文件: 使用 aa-genprof 生成新的配置文件。在终端输入:

sudo aa-genprof executable

例如:

sudo aa-genprof slapd

要想让你的配置文件被包含于 apparmor-profiles 包内,在Launchpad上向AppArmor发一个bug报告:

    包含您的测试计划和测试用例。

    在bug报告里附上你的新配置文件。

更新配置文件

When the program is misbehaving, audit messages are sent to the log files. The program aa-logprof can be used to scan log files for AppArmor audit messages, review them and update the profiles. From a terminal:

sudo aa-logprof

参考资料

你可以在AppArmor 管理指南找到高级配置选项。

关于AppArmor在其他Ubuntu发行版的详细用法请看 AppArmor Community Wiki

The OpenSUSE AppArmor page is another introduction to AppArmor. 

在 freenode 上的 #ubuntu-server IRC 聊天频道是一个寻求AppArmor帮助和参与Ubuntu Server社区的一个好地方。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Nginx在Ubuntu20.04中的AppArmor配置文件 在Ubuntu 20.04中,Nginx的AppArmor配置文件位于/etc/apparmor.d/usr.sbin.nginx。该文件定义了Nginx进程可以访问的文件和目录,以及可以执行的操作。例如,以下是默认的/usr/sbin/nginx AppArmor配置文件的部分内容: ``` /usr/sbin/nginx { ... # Allow read access to all file systems. # This allows Nginx to read static files and logs. / r, /sys/devices/system/cpu/ r, /sys/devices/system/cpu/** r, /proc/stat r, /proc/meminfo r, /proc/loadavg r, /etc/nginx/ r, /etc/nginx/** r, /etc/nginx/sites-enabled/ r, /etc/nginx/sites-enabled/* r, /usr/share/nginx/html/ r, /var/log/nginx/access.log w, /var/log/nginx/error.log w, /run/nginx.pid rw, ... } ``` 该配置文件允许Nginx访问一些必要的系统文件和目录,例如/proc和/sys目录,以及Nginx的配置文件和日志文件。 2. Ubuntu20.04中Docker启用AppArmor下的配置文件 在Ubuntu 20.04中,Docker默认启用AppArmor来限制容器的权限。Docker的AppArmor配置文件位于/etc/apparmor.d/docker-DEFAULT。该文件定义了Docker容器可以访问的文件和目录,以及可以执行的操作。例如,以下是默认的docker-DEFAULT AppArmor配置文件的部分内容: ``` ... # Allow read access to containers image and registry files. # Use subdirectories to make sure rslave is applied on existing directories /var/lib/docker/ r, /var/lib/docker/** rwk, /var/lib/containerd/ r, /var/lib/containerd/** rwk, /etc/docker/ r, /etc/docker/** r, # Allow rslave on container directories in case the user wants to bind mount them /var/lib/docker/*/ rslave, /var/lib/docker/*/*/ rslave, /var/lib/docker/*/*/*/ rslave, /var/lib/docker/*/*/*/*/ rslave, /var/lib/docker/*/*/*/*/*/ rslave, # Allow containerd to manage its own state /run/containerd/ r, /run/containerd/** rwk, ... ``` 该配置文件允许Docker容器访问一些必要的系统文件和目录,例如/var/lib/docker目录和/etc/docker目录,以及容器需要读取或写入的文件。 3. 优缺点比较 Nginx在Ubuntu20.04中的AppArmor配置文件和Ubuntu20.04中Docker启用AppArmor下的配置文件有以下优缺点: 优点: Nginx AppArmor配置文件: - 可以更加精细地控制Nginx进程的访问权限; - 不会影响其他进程的权限。 Docker AppArmor配置文件: - 可以更好地保护主机系统免受恶意容器的攻击; - 可以更容易地管理多个容器的权限; - 可以更容易地移植Docker容器到其他系统。 缺点: Nginx AppArmor配置文件: - 需要手动编辑,可能需要一些技术知识; - 可能无法完全保护主机系统免受Nginx进程的攻击。 Docker AppArmor配置文件: - 可能会限制容器的功能,例如无法访问某些文件或目录; - 可能会增加管理的复杂性,需要更多的配置和管理工作。 总的来说,Nginx在Ubuntu20.04中的AppArmor配置文件更适合单独控制Nginx进程的权限,而Docker启用AppArmor下的配置文件更适合保护主机系统免受Docker容器的攻击。具体使用哪种方式取决于实际需求和应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值