当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 在 Ubuntu 中应用 AppArmor 应用程序访问控制系统 简单说明
帖子发表于 : 2007-10-04 2:54 
头像

注册: 2007-03-13 17:26
帖子: 2254
送出感谢: 0 次
接收感谢: 1
在 Ubuntu 中应用 AppArmor 应用程序访问控制系统 简单说明
windwiny.ubt#gmail.com 20071003

AppArmor 是一个类似于selinux 的东东,主要的作用是设置某个可执行程序的访问控制权限,可以限制程序 读/写某个目录/文件,打开/读/写网络端口等等。。

1.安装 Ubuntu 7.10里
sudo apt-get install apparmor apparmor-profiles apparmor-docs apparmor-utils

2.启动服务
sudo /etc/init.d/apparmor restart

3.添加访问控制规则
3.1 先试编写一个小程序
代码:
#include <stdio.h>
#include <string.h>

int main(int argc,char *argv[])
{
   FILE * f;
   int nn,i;
   char ch;
   if (argc == 3){
      f = fopen(argv[1],"w");
      if (f ==NULL) {
         printf ("Open file \"%s\" with w ERROR\n",argv[1]);
         return 2;
      }
      nn = strlen(argv[2]);
      i=0;
      while (i<nn)
      {
         fputc(argv[2][i],f);
         ++i;
      }
      fclose(f);
   } else if (argc == 2){
      f = fopen(argv[1],"r");
      if (f == NULL) {
         printf ("Open file \"%s\" with r ERROR\n",argv[1]);
         return 2;
      }
      while ( (ch=fgetc(f)) != EOF )
      {
         printf("%c",ch);
      }
      fclose(f);
   } else {
      printf("Usage: testapp file \"string\"     // write string to file \n"
            "       testapp file              // read file and print it \n");
      return 3;
   }

   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

以上测试在用户家目录里,有完全的读写权限,写入读取文件一切正常。
3.2 创建规则
代码:
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 之类与文件系统的权限类似。
4. 测试
执行下列命令
代码:
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  # 可以看到类似内容
kernel: [140321.028000] audit(1191433716.584:1578):  type=1502 operation="inode_create" requested_mask="w" denied_mask="w" name="/home/n1/Desktop/abc" pid=4864 profile="/home/n1/Desktop/testapp"
kernel: [140362.236000] audit(1191433758.086:1579):  type=1502 operation="inode_permission" requested_mask="r" denied_mask="r" name="/home/n1/Desktop/abcd" pid=4877 profile="/home/n1/Desktop/testapp"

#  可以看出 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 服务就行

有个问题就是把可执行文件复制到其它目录里就不能限制了

参考资料:
Novell AppArmor《apparmor-admin-guide_zh_CN.pdf》
http://www.gtlib.gatech.edu/pub/opensus ... _zh_CN.pdf


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-11-03 19:31 
头像

注册: 2007-01-15 17:15
帖子: 3766
送出感谢: 0 次
接收感谢: 0 次
代码:
                    _
  __ _  ___   ___   __| |
 / _` |/ _ \ / _ \ / _` |
| (_| | (_) | (_) | (_| |
 \__, |\___/ \___/ \__,_|
 |___/   


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-12-05 2:50 
头像

注册: 2006-05-13 4:02
帖子: 10606
送出感谢: 0 次
接收感谢: 7
这个gutsy自带了。


_________________
HP Pavilion DV6-2064CA: AMD Turion II Ultra Dual-Core Mobile M640, HD4650, 2GBx2 DDR2-800, Seagate 500GB 7200RPM SATA, BD-ROM
DELL UltraSharp 2209WA
Arch64, Testing repo


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 在 Ubuntu 中应用 AppArmor 应用程序访问控制系统 简单说明
帖子发表于 : 2009-04-08 11:26 
头像

注册: 2008-07-27 8:51
帖子: 711
地址: 广西玉林|广东深圳
系统: Ubuntu/Windows
送出感谢: 1
接收感谢: 3
mark


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 在 Ubuntu 中应用 AppArmor 应用程序访问控制系统 简单说明
帖子发表于 : 2010-11-26 11:08 

注册: 2010-01-11 17:11
帖子: 31
地址: 柳州
送出感谢: 0 次
接收感谢: 0 次
想用快车,又不想让它乱读硬盘,找到此帖,感谢楼主了!


_________________
twitter:@radaiming


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 在 Ubuntu 中应用 AppArmor 应用程序访问控制系统 简单说明
帖子发表于 : 2011-05-11 13:29 

注册: 2009-08-31 17:21
帖子: 122
送出感谢: 7
接收感谢: 2
解决一个大问题。 :em05
http://forum.ubuntu.org.cn/viewtopic.php?f=54&t=330413


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译