首页
社区
课程
招聘
[转帖] AppArmor入门
发表于: 2021-6-24 16:49 13184

[转帖] AppArmor入门

2021-6-24 16:49
13184

简介

AppArmor是一款与SeLinux类似的安全工具,其主要作用是控制应用程序的各种权限。AppArmor根据一组配置文件profile限制为程序行为。

AppArmor is a Linux Security Module implementation of name-based access controls. AppArmor confines individual programs to a set of listed files and posix 1003.1e draft capabilities.

 

AppArmor是Ubuntu的默认选择,但在默认情况下,系统自带安装的profile配置文件很少,通过命令:

1
sudo apt-get install apparmor-profiles

可以安装额外的AppArmor-profile文件。
在Ubuntu下通过命令sudo apparmor_status可以查看当前AppArmor的状态。

用法

检查加载的 profiles:

1
sudo aa-status

将配置文件置于complain 模式

1
2
3
4
sudo aa-complain /path/to/bin
 
Example:
sudo aa-complain /bin/ping

将配置文件置于enforce 模式

1
2
3
4
sudo aa-enforce /path/to/bin
 
Example:
sudo aa-enforce /bin/ping

禁用AppArmor框架

系统通常不需要完全禁用AppArmor。强烈建议用户启用AppArmor,并将有问题的配置文件设置为complain 模式(见上文),然后使用ecdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4K9h3E0A6i4K6u0W2N6h3u0#2L8Y4c8#2i4K6u0W2j5$3!0E0i4K6u0r3c8r3g2T1N6h3N6Y4K9h3&6Y4b7i4m8H3j5i4u0E0L8%4u0Q4c8e0c8Q4b7U0S2Q4b7f1c8Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0N6Q4b7e0S2Q4z5p5u0Q4c8e0g2Q4b7V1q4Q4z5p5k6Q4c8e0k6Q4z5p5k6Q4z5e0m8Q4c8e0c8Q4b7V1q4Q4b7e0c8T1N6h3N6Q4c8e0y4Q4z5o6m8Q4z5o6u0Q4c8e0g2Q4b7e0k6Q4z5o6u0Q4c8e0k6Q4z5f1g2Q4z5f1y4Q4c8e0g2Q4b7V1k6Q4z5o6g2Q4c8e0W2Q4b7e0q4Q4b7V1u0Q4c8e0N6Q4b7e0k6Q4z5o6q4Q4c8e0N6Q4z5e0c8Q4b7e0S2m8M7s2m8m8M7X3#2G2M7W2)9J5z5q4!0q4y4g2!0m8y4W2)9^5x3W2!0q4y4q4!0n7c8q4!0n7c8W2!0q4y4#2)9&6y4q4!0m8z5q4y4q4e0r3W2F1N6i4S2Q4c8e0c8Q4b7V1u0Q4b7e0y4Q4c8e0k6Q4z5f1u0Q4b7V1k6Q4x3U0W2Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0c8Q4b7V1c8Q4b7V1k6Q4c8e0N6Q4z5e0c8Q4b7e0S2Q4c8e0c8Q4b7V1u0Q4b7e0g2Q4c8e0c8Q4b7U0S2Q4z5p5u0Q4c8e0g2Q4z5e0q4Q4b7V1c8Q4c8e0c8Q4b7V1u0Q4b7e0c8Q4x3@1p5`.

1
2
sudo systemctl stop apparmor
sudo systemctl disable apparmor

在Ubuntu 16.04 LTS之前的Ubuntu系统上可以使用以下命令:

1
2
sudo invoke-rc.d apparmor stop
sudo update-rc.d -f apparmor remove

启用用AppArmor框架

1
2
sudo systemctl enable apparmor
sudo systemctl start apparmor

在Ubuntu 16.04 LTS之前的Ubuntu系统上可以使用以下命令:

1
2
sudo invoke-rc.d apparmor start
sudo update-rc.d apparmor start 37 S .

Reload all profiles

1
sudo service apparmor reload

Reload one profile

1
2
3
4
sudo apparmor_parser -r /etc/apparmor.d/profile.name
 
Example:
sudo apparmor_parser -r /etc/apparmor.d/bin.ping

Disable one profile

1
2
3
4
5
6
sudo ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/profile.name
 
Example:
sudo ln -s /etc/apparmor.d/bin.ping /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/bin.ping

Enable one profile

By default, profiles are enabled (ie loaded into the kernel and applied to processes).

1
2
3
4
5
6
sudo rm /etc/apparmor.d/disable/profile.name
sudo apparmor_parser -r /etc/apparmor.d/profile.name
 
Example:
sudo rm /etc/apparmor.d/disable/bin.ping
sudo apparmor_parser -r /etc/apparmor.d/bin.ping

The aa-enforce command can also be used to enable a profile:

1
sudo aa-enforce /etc/apparmor.d/bin.ping

定制Profiles

Apparmor的profile配置文件均保存在目录/etc/apparmor.d
这些都是简单的文本文件,可以用文本编辑器或使用aa-logprof进行编辑。
Some customization can be made in /etc/apparmor.d/tunables/. When updating profiles, it is important to use these when appropriate. For example, rather than using a rule like:

1
/home/*/ r,

use:

1
@{HOME}/ r,

After updating a profile, be sure to reload it (see above).

访问模式

1
2
3
4
5
6
7
8
9
10
11
12
13
r    - read
w    - write -- conflicts with append
a    - append -- conflicts with write
ux   - unconfined execute
Ux   - unconfined execute -- scrub the environment
px   - discrete profile execute
Px   - discrete profile execute -- scrub the environment
cx   - transition to subprofile on execute
Cx   - transition to subprofile on execute -- scrub the environment
ix   - inherit execute
m    - allow PROT_EXEC with mmap(2) calls
l    - link
k    - lock

一个profile样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# a variable definition in the preamble
@{HOME} = /home/*/ /root/
 
# a comment about foo.
/usr/bin/foo {
  /bin/mount          ux,
  /dev/{,u}random     r,
  /etc/ld.so.cache    r,
  /etc/foo.conf       r,
  /etc/foo/*          r,
  /lib/ld-*.so*       rmix,
  /lib/lib*.so*       r,
  /proc/[0-9]**       r,
  /usr/lib/**         r,
  /tmp/foo.pid        wr,
  /tmp/foo.*          lrw,
  /@{HOME}/.foo_file  rw,
  /usr/bin/baz        Cx -> baz,
 
  # a comment about foo's hat (subprofile), bar.
  ^bar {
    /lib/ld-*.so*       rmix,
    /usr/bin/bar        rmix,
    /var/spool/*        rwl,
  }
 
  # a comment about foo's subprofile, baz.
  profile baz {
    #include <abstractions/bash>
    owner /proc/[0-9]*/stat r,
    /bin/bash ixr,
    /var/lib/baz/ r,
    owner /var/lib/baz/* rw,
  }
}

小结

Apparmor使用内核标准安全文件系统机制(/sys/kernel/security)来加载和监控profiles文件。而虚拟文件/sys/kernel/security/apparmor/profiles里记录了当前加载的profiles文件。

Apparmor的profile配置文件均保存在目录/etc/apparmor.d,对应的日志文件记录在/var/log/messages
profile文件以它所对应的应用程序的完整路径来命名,当然,要去除对前面的根符号(/),然后把路径中间的/替换为.。如果是软连接,还必须转换到最终的应用程序。

 

一个profile文件定义好之后,当其对应的应用程序启动(比如firefox),它也就自动激活生效。有两种模式,分别为:

  • complain:应用程序发生了超过其权限之外的动作时,Apparmor会进行log记录,但是不会阻止应用程序相关动作的成功执行。
  • enforce:应用程序发生了超过其权限之外的动作时,Apparmor会进行log记录,并且会阻止应用程序相关动作的成功执行。

通过命令aa-complain或aa-enforce可以切换profile文件的状态。
做了这种修改后需要重启apparmor,Apparmor的启动、停止等操作的相关命令如下:

1
2
3
4
Start : sudo /etc/init.d/apparmor start
Stop : sudo /etc/init.d/apparmor stop
reload: sudo /etc/init.d/apparmor reload
Show status: sudo /etc/init.d/apparmor status

aa-genprof命令用来生成一个profile文件


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2021-6-24 16:57 被wx_堃编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回