-
-
[转帖] 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期)
赞赏
- [求助]Android auto 7454
- web渗透-清理痕迹 3835
- [求助]web渗透是找个师傅好还是自学好? 4961
- linux系统/etc/shadow文件密码项 14569
- 小端存储 3656