全部博文(467)
分类: LINUX
2008-12-25 00:57:17
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_help.txt描述了如何使用apol的详细帮助文档,说明了apol界面菜单的详细功能。
— dta_help.txt是域转移分析(domain transition analysis,DTA)的概述,说明了进程在特殊策略中域转移的机制。
— iflow_help.txt是信息分析的概述,它发现期望和不期望的路由信息,这些路由发生在一个策略的两个类型之间。
— types_relation_help.txt说明了分析两个类型之间的关系的方法,策略分析中信息流分析是基本的。
apol工具能分析源策略policy.conf和二进制策略policy.
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的策略配置、浏览、编辑和测试工具。这个工具提供了单个用户界面来查看策略的源代码,配置策略程序模块、编辑策略文件和编译测试策略。