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

[转帖] AppArmor入门

2021-6-24 16:49
12864

简介

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 模式(见上文),然后使用https://wiki.ubuntu.com/DebuggingApparmor中的程序提交bug。如果必须禁用AppArmor(如使用SELinux代替),使用以下命令:

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文件


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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