在 Ubuntu 中应用 AppArmor 应用程序访问控制系统 简单说明
AppArmor 是一个类似于selinux 的东东,主要的作用是设置某个可执行程序的访问控制权限,可以限制程序 读/写某个目录/文件,打开/读/写网络端口等等。。
优盘没法卸载: sync;fuser -km /media/usbdisk
在 Ubuntu 中应用 AppArmor 应用程序访问控制系统 简单说明
windwiny.ubt#gmail.com 20071003 AppArmor 是一个类似于selinux 的东东,主要的作用是设置某个可执行程序的访问控制权限,可以限制程序 读/写某个目录/文件,打开/读/写网络端口等等。。 1.安装 Ubuntu 7.10里 2.启动服务 3.添加访问控制规则 代码:
#include <stdio.h>
#include <string.h> int main(int argc,char *argv[]) return 0; 保存为/home/n1/Desktop/testapp.c, 代码:
cd /home/n1/Desktop
gcc -Wall -o testapp testapp.c ./testapp abc "1abc" ./testapp abcd "2abcd" ./testapp abcde "3abcde" ls abc abcd abcde #/// <- 可看到文件 ./testapp abc ./testapp abcd ./testapp abcde #/// <- 可看到文件内容 rm abc abcd abcde 以上测试在用户家目录里,有完全的读写权限,写入读取文件一切正常。 代码:
cd /home/n1/Desktop
sudo genprof testapp #// 提示[(S)can system log for SubDomain events] / (F)inish 时按F 完成 ls /etc/apparmor.d/home.n1.* #// 可以看到有一个 /etc/apparmor.d/home.n1.Desktop.testapp 文件, #// 文件名就是文件的绝对路径,由/变为. 了 原始内容为 代码:
# Last Modified: Thu Oct 4 01:35:37 2007
#include <tunables/global> /home/n1/Desktop/testapp flags=(complain) { #include <abstractions/base> /home/n1/Desktop/testapp mr, 在文件大括号内加入 代码:
/home/n1/Desktop/abcde rwm,
/home/n1/Desktop/abcd w, /home/n1/Desktop/abc r, 一部分为文件名,第二部分为权限,rwxm 之类与文件系统的权限类似。 代码:
sudo /etc/init.d/apparmor reload // 重装读取
./testapp abc "1abc00" ./testapp abcd "2abcd00" ./testapp abcde "3abcde00" ls abc abcd abcde #/// <- 可看到文件 ./testapp abc ./testapp abcd ./testapp abcde #/// <- 可看到文件内容 gedit /var/log/syslog # 可以看到类似内容 # 可以看出 abc 文件在 写入时被“记帐”了,abcd 文件在读取时被“记帐”了。 因为在 /etc/apparmor.d/home.n1.Desktop.testapp 他们没有对应的权限 rm abc abcd abcde 再执行 代码:
sudo enforce /etc/apparmor.d/home.n1.Desktop.testapp // 启用“强制”
# 执行这个之后发现 /etc/apparmor.d/home.n1.Desktop.testapp 文件里 flags=(complain) 被去掉了 sudo /etc/init.d/apparmor reload ./testapp abc "1abc0011" # 写入出错 ./testapp abcd "2abcd0011" ./testapp abcde "3abcde0011" ./testapp otherfile "teststest" # 其它文件名,也是失败 ls abc abcd abcde #/// <- 看不到文件abc echo "i am test" > abc # 手工创建 ./testapp abc ./testapp abcd #读取出错 ./testapp abcde cat abcd # 内容为刚才加入的内容"2abcd0011" ## /var/log/syslog 里也有日记 rm abc abcd abcde 查看AppArmor在整个系统的状态 代码:
sudo apparmor_status # 在启动时应该有
----- apparmor module is loaded. 17 profiles are loaded. 4 profiles are in enforce mode. ..... /home/n1/Desktop/testapp 13 profiles are in complain mode. /usr/sbin/traceroute ..... 5 processes have profiles defined. 1 processes are in enforce mode : /usr/sbin/cupsd (4812) 4 processes are in complain mode. ..... /sbin/syslogd (4574) 0 processes are unconfined but have a profile defined. ------ 之类的, 以上是最简单的应用,通过 genprof 创建规则文件,只添加最少需要的文件读写权限规则, 其它自动化工具包括 logprof ,autodep,audit,complain,unconfined,查看状态 apparmor_status 等 要取消只要删除apparmor.d 里的文件,重启 apparmor 服务就行 有个问题就是把可执行文件复制到其它目录里就不能限制了 参考资料: |