Chinaunix首页 | 论坛 | 博客
  • 博客访问: 677132
  • 博文数量: 467
  • 博客积分: 8050
  • 博客等级: 中将
  • 技术积分: 14825
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-18 11:00
文章分类

全部博文(467)

文章存档

2009年(8)

2008年(459)

分类: LINUX

2008-12-25 00:57:17

http://blog.chinaunix.net/u/26978/showart_465063.html
 
SELinux设置分析工具

1.文件的安全上下文与文件操作

shell命令中对文件的操作命令存在如何处理文件的安全上下文的问题,一般通过选项“-Z”可对文件安全上下文进行特殊处理。如:ls -Z可以显示文件的安全上下文,ps -Z可以查看进程的安全上下文,cp -Z可以给拷贝的文件指定安全上下文等。

默认下,mv操作保持安全上下文不变,创建和拷贝的文件继承父目录的安全上下文。默认操作下,操作后的文件可以因文件安全上下文的变化造成无法运行,此时,还可以通过选项“-Z”指定文件的安全上下文。

在targeted策略下,进程的域类型数量较少,内核线程的安全上下文一般为system_u:system_ r:kernel_t,用户进程一般为user_u:system_r:unconfined_t,后台进程一般有特殊的安全上下文。从这里可以看出,targeted策略对后台进程进行严格的权限限制,而对用户进程进行一般的限制。使用命令ps -AZ可以看到进程的安全上下文,列出如下:

^-^$ ps -AZ
LABEL                             PID TTY     TIME CMD
system_u:system_r:init_t            1 ?    00:00:00 init
system_u:system_r:kernel_t          2 ?   00:00:00 migration/0
system_u:system_r:kernel_t          3 ?     00:00:00 ksoftirqd/0
......
system_u:system_r:kernel_t        426 ?   00:00:00 kjournald
system_u:system_r:kernel_t        452 ?    00:00:00 kauditd
system_u:system_r:udev_t:SystemLow-SystemHigh 478 ? 00:00:00 udevd
system_u:system_r:kernel_t        829 ?        00:00:00 kedac
system_u:system_r:kernel_t       1503 ?        00:00:00 kmpathd/0
system_u:system_r:kernel_t       1527 ?        00:00:00 kjournald
......
system_u:system_r:initrc_t       2161 ?         00:00:00 pcscd
system_u:system_r:bluetooth_t    2179 ?        00:00:00 hidd
......
system_u:system_r:getty_t        3030 tty6     00:00:00 mingetty
system_u:system_r:init_t         3031 ?         00:00:00 prefdm
system_u:system_r:xdm_t:SystemLow-SystemHigh 3036 ? 00:00:00 gdm-binary
......
root:system_r:unconfined_t:SystemLow-SystemHigh 3391 ? 00:00:00 notification-da
system_u:system_r:cupsd_t:SystemLow-SystemHigh 3979 ? 00:00:00 cupsd
system_u:system_r:telnetd_t     10476 ?        00:00:00 in.telnetd
system_u:system_r:remote_login_t 10477 ?       00:00:00 login
user_u:system_r:unconfined_t    10480 pts/1    00:00:00 bash
user_u:system_r:unconfined_t    10690 pts/1    00:00:00 su
user_u:system_r:unconfined_t    10692 pts/1    00:00:00 bash
system_u:system_r:kernel_t      10792 ?        00:00:00 kjournald
......
system_u:system_r:remote_login_t 10834 ?       00:00:00 login
user_u:system_r:unconfined_t    10835 pts/2     00:00:00 bash
......
user_u:system_r:unconfined_t    30329 pts/6    00:00:00 bash
user_u:system_r:unconfined_t    30916 pts/1    00:00:00 ps

2.policycoreutil工具包

policycoreutil工具包提供了设置或得到SELinux的状态信息的命令,这些命令应用程序通过封闭libselinux库的函数实现对内核SELinux中策略的控制。Federa Linux操作系统在默认时不安装policycoreutil工具包中的命令,需要用户自己安装。它的命令说明如下:

1)sestatus

命令sestatus可查询SELinux的状态,如:是否激活、selinuxfs的挂接状态、当前的策略模式和版本等。命令sestatus执行结果列出如下:

^-^$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:        permissive
Policy version:                 21
Policy from config file:    targeted

2)fixfiles

当切换不同的策略或者使用一个新文件系统时,需要标识整个文件系统。切换策略时,应该重启动机器让init进程完成重标识工作,因为不重启动机器,很难让所有的进程得到正确的标识,特别是后台进程。

可以使用fixfiles命令重标识文件系统或目标,还可恢复RPM包的安全上下文,方法如下:

fixfiles relabel
fixfiles -R packagename restore

3)load_policy

可以通过将新的二进制策略文件替换/etc/selinux/targeted/policy/policy.21文件,重启动机器,从而更换了内核的安全策略。还可以用命令load_policy直接装载或替换新的二进制策略到内核中,命令load_policy更换内核中的安全策略,保持使用当前的Boolean值。

4)getsebool和setbool

可能通过命令getsebool和setbool得到或设置Boolean值。设置Boolean值的例子如下:

setsebool -P httpd_disable_trans=0 mysqld_disable_trans=0 \
ntpd_disable_trans=0

5)用指定的安全上下文运行命令runcon

命令runcon可以用指定的域运行程序,如:指定安全上下文运行contexttext程序的方法如下:

$runcon user_u:system_r:httpd_t ~/bin/contexttest

6)newrole

命令newrole表示用指定的类型或角色运行新的shell脚本,在targeted策略中,角色一般都为system_r,角色切换的意义不大,而在strict策略中角色较多,角色切换作用较大。如果开发测试新类型,切换角色也是很有用的。命令newrole的语法如下:

newrole  [-r|--role]  ROLE  [-t|--type]  TYPE  [-l|--level]  LEVEL  [--[ARGS]...]

其中,[ARGS]直接传递给shell。

新的shell是指在/etc/passwd文件中的用户条目的shell定义,一般为bash。文件passwd存储了用户的账户信息,如:passwd文件中用户usertest的信息条目列出如下:

usertest:x:500:500:nijili:/home/usertest:/bin/bash

7)其他一些脚本命令

policycoreutil工具包还提供了一些命令访问SELinux信息,这些命令说明如下:

getenforce 返回SELinux的强制模式,如:Permissive模式。
setenforce [ Enforcing | Permissive | 1 | 0 ]设置SELinux的强制模式。
selinuxenabled令返回SELinux激活状态,如果激活返回0,否则返回-256。
getsebool [-a] [boolean_name]  显示Boolean值。
setsebool [-P] boolean_name value | bool1=val1 bool2=val2 ...  设置Boolean值。
togglesebool boolean ...  切换内核中Boolean值到它的反方向值,如:从1到0。
它不改变/etc/selinux/targeted/booleans文件中的值。

3.setools工具包

setools工具包包括分析和调整SELinux的策略、分析log信息、策略检查、策略比较等工具。在policy.conf文件中targeted策略超过2000连续的行。policy.conf文件从超过150的宏定义和数千条TE规则以及文件安全上下文产生。

setools工具软件包提供了图形界面和命令行形式的应用程序,方便用户查看和修改安全策略。它主要的应用程序有:apol、seaudit、seaudit-report、secmds等。

setools工具包的源代码大多是用TCL语言编写,用户可从网址下载源代码。下面分别说明这些工具。

1)avcstat

命令avcstat提供了从启动以来的访问向量缓存(access vector cache,AVC)的统计信息,可以指定时间间隔实时查看AVC的信息。AVC信息存在于文件/selinux/avc/cache_stats中,可以使用命令cat /selinux/avc/cache_stats查看文件内容,或者使用命令avcstat直接查看AVC信息。

使用命令avcstat查找当前和每隔2秒的AVC信息的方法如下:

^-^$ avcstat
   lookups       hits     misses     allocs   reclaims      frees
  96424116   96415301       8815       9088       8288       8576

^-^$ avcstat 2
   lookups       hits     misses     allocs   reclaims      frees
  96462045   96453227       8818       9091       8304       8592
       776        776          0          0          0          0
       817        817          0          0          0          0
       762        762          0          0          0          0
       746        746          0          0          0          0

2)seinfo

命令seinfo从规则policy.conf或二进制规则policy.21中提取策略的规则数量统计信息,命令seinfo运行后显示的信息列出如下:

^-^$ seinfo

Statistics for policy file: /etc/selinux/targeted/policy/policy.21
Policy Version & Type: v.21 (binary, MLS)

   Classes:            58    Permissions:       212
   Types:            1420    Attributes:        140
   Users:               3    Roles:                  6
   Booleans:         166    Cond. Expr.:       174
   Sensitivities:     1    Categories:       1024
   Allow:          62308    Neverallow:           0
   Auditallow:        23    Dontaudit:        4198
   Role allow:         5    Role trans:           0
   Type_trans:     1230    Type_change:         17
   Type_member:        0    Range_trans:         10
   Constraints:       47    Validatetrans:       0
   Fs_use:             15    Genfscon:             55
   Portcon:          243    Netifcon:               0
   Nodecon:             8    Initial SIDs:        27

3)sesearch

命令sesearch搜索policy.conf或二进制策略中特殊的类型,例如:搜索类型httpd_sys_content_t的方法及部分显示列出如下:

^-^$ sesearch -a -t httpd_sys_content_t
Found 57 av rules:
   allow restorecond_t httpd_sys_content_t : file { ioctl read getattr lock rela
belfrom relabelto };
   allow httpd_sys_script_t httpd_sys_content_t : dir { getattr search };
   allow restorecond_t httpd_sys_content_t : dir { ioctl read getattr lock relab
elfrom relabelto search };
   allow restorecond_t httpd_sys_content_t : lnk_file { getattr relabelfrom rela
belto };
   allow restorecond_t httpd_sys_content_t : chr_file { getattr relabelfrom };
   allow restorecond_t httpd_sys_content_t : blk_file { getattr relabelfrom };
   allow restorecond_t httpd_sys_content_t : sock_file { getattr relabelfrom rel
abelto };
  ……
   allow nfsd_t httpd_sys_content_t : dir search ;
   allow nfsd_t httpd_sys_content_t : lnk_file 
{ read create getattr setattr unlink link rename };
   allow nfsd_t httpd_sys_content_t : sock_file 
{ ioctl read write create getattr setattr lock append unlink       
   link rename };
   allow nfsd_t httpd_sys_content_t : fifo_file 
{ ioctl read write create getattr setattr lock append unlink 
   link rename };

Found 2 te rules:
   type_transition httpd_t httpd_sys_content_t : process httpd_sys_script_t;
   type_transition httpd_suexec_t httpd_sys_content_t : process httpd_sys_script_t;

Found 5 role allow rules:
   allow system_r sysadm_r ;
   allow user_r sysadm_r ;
   allow user_r system_r ;
   allow sysadm_r user_r ;
   allow sysadm_r system_r ;

4)seaudit

基于GUI图形界面的工具seaudit是SELinux的log信息分析工具,它可让用户排序和过滤log信息,或输出规范格式的报告,方便用户阅读或分析log信息。它还可查阅策略文件policy.conf, policy.conf是编译后的策略源代码。

log信息的产生方式与规则的设置有关系。通常当有一个违反策略的操作发生时,将产生log信息记录在log文件中。通过log信息可帮助用户了解操作失败的原因,找出解决问题的方法。运行seaudit需要有超级用户权限。可以将/usr/bin/seaudit与/usr/bin/consolehelper进行符号连接,或直接使用root权限启动seaudit应用程序。consolehelper会借助/usr/sbin/userhelper询问用户的口令。

工具seaudit运行的图形界面如图3-4所示。打开的log文件一般是/var/log/message,seaudit违反策略的操作信息。

图3-4 工具seaudit运行的图形界面

5)apol

apol是基于GUI图形界面的策略分析工具。它分析SELinux策略,帮助发现策略中类型之间的关系。策略分析是设计策略的重要环节。在策略装载到内核之前,apol能帮助发现策略决策将产生的不期望的结果。它还可帮助显示不同版本或种类的策略之间的差异。

使用apol工具进行策略分析是个复杂的操作,/usr/share/doc/setools-下提供了apol工具的使用说明,这几个帮助文件说明如下:

—  apol_help.txt描述了如何使用apol的详细帮助文档,说明了apol界面菜单的详细功能。

—  dta_help.txt是域转移分析(domain transition analysis,DTA)的概述,说明了进程在特殊策略中域转移的机制。

—  iflow_help.txt是信息分析的概述,它发现期望和不期望的路由信息,这些路由发生在一个策略的两个类型之间。

—  types_relation_help.txt说明了分析两个类型之间的关系的方法,策略分析中信息流分析是基本的。

apol工具能分析源策略policy.conf和二进制策略policy.文件,分析的结果大部分类似。区别在于二进制策略过滤掉了属性,如:初始的SID,对策略分析最大的影响是缺乏属性。

apol工具打开文件policy.conf后显示如图3-5所示。

图3-5 apol工具的图形界面

apol工具的功能说明如下:

策略构件分析(Policy Component Analysis)

策略构件包括Types(类型)、Classes/Perms(类别/操作许可)、Roles(角色)、Users(用户)、Booleans和Initial SIDs(初始SID)几个部分组成,策略文件中分散使用它们,在apol工具中可以按构件类型查找它们,方便查询。Boolean用来动态设置策略的开关,apol工具可以设置Boolean值来测试策略的开关,但Boolean值对策略本身不产生影响,仅用于测试。

TE规则分析(TE Rule Analysis)

TE规则是域与客体类型之间的关系描述,apol工具可以显示不同的域与不同的客体类型之间的各种规则描述,以及在Boolean值影响下的规则描述。

域转移分析(Domain Transition Analysis)

域转移是TE的重要方面,因为新的域常由源域操作客体类型转移产生,特定的域是控制域派生类型的关键。

apol向前查找一个源类型可以转移到的所有目标类型,或者向后查找一个目标类型由哪些源类型转移而来。

域转移必须有3条特定的allow规则。这些规则控制源域转移到目标域。第1条规则允许进程转移,第2条规则允许源域访问目标域的可执行文件,第3条规则允许目标域自己执行文件。域转移分析的核心围绕识别这3条规则。

直接的和转移的信息流(Direct and Transitive Information Flow)

信息流分析是策略分析的核心和有挑战性的部分。信息流分析可以找到非期望的或危险的信息流。例如:如果你想/home目录(user_home_dir_t类型)是否像你配置的那样流入httpd_t domain域,apol工具搜索策略文件找到这两个类型间的所有的信息流。

策略文件含有几百个类型,类型之间的相互操作需要几千条规则,理解类型间的信息流是对策略的基本阅读。

6)seuser

seuser是基于GUI和命令行的用户管理工具,是管理策略运行的接口。当提交策略变化时,用户空间的策略库将被永久更新,同时存储策略文件及SELinux策略信息。但还没更新内核中的策略库。在工具退出(或按更新策略按钮)处将变化的策略装载到内核策略库中。

7)Seaudit-report

seaudit-report工具以text或HTML格式产生SELinux审计报告。报告的格式可由用户设置。

8)Secmds

secmds是SELinux命令行工具,用来策略处理和SELinux系统管理。

9)Sepcut

sepcut是基于GUI的策略配置、浏览、编辑和测试工具。这个工具提供了单个用户界面来查看策略的源代码,配置策略程序模块、编辑策略文件和编译测试策略。

 
阅读(4047) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~