手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

什么是Security-Enhanced Linux

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

system_u:object_r:device_t dev
drwxr-xr-x root root system_u:object_r:etc_t
etc
drwxr-xr-x root root system_u:object_r:home_root_t home
drwxr-xr-x
root root system_u:object_r:root_t initrd
drwxr-xr-x root root
system_u:object_r:lib_t lib
drwx------ root root
system_u:object_r:lost_found_t lost found
drwxr-xr-x root root
system_u:object_r:default_t misc
drwxr-xr-x root root
system_u:object_r:mnt_t mnt
drwxr-xr-x root root system_u:object_r:usr_t opt

?--------- ? ? oracle
dr-xr-xr-x root root proc
drwxr-x--- root root
system_u:object_r:user_home_dir_t root
drwxr-xr-x root root
system_u:object_r:sbin_t sbin
drwxr-xr-x root root selinux
drwxr-xr-x
root root system_u:object_r:default_t srv
drwxr-xr-x root root sys

drwxrwxrwt root root system_u:object_r:tmp_t tmp
drwxr-xr-x root root
system_u:object_r:usr_t usr
drwxr-xr-x root root system_u:object_r:var_t var


Example 2. Example Output of ls -Z


值得注意的是:对于那些没有指定上下文的文档(一般是指那些不支持rwx标签的文档系统,如/sys、/proc、/selinux),ls命令就不会显示其上下文。对于不能用stat命令查看当前状态的那些文档系统。ls命令返回"?---------",其任何者和任何组也被标记为"?",同样的,他的上下文也不会显示。

如例三所示,id命令将返回当前shell的上下文
uid=0(root) gid=0(root)
groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
context=root:user_r:user_t
Example 3. Example Output of the id Command


假如您的SELinux系统使用了strict 策略,您会发现应用程式做一些不正常的事情是很容易发生的。您经常会发现某些程式中会有些bug,这些bug使程式做那些您的SELinux策略不允许其做的其他事情。

SELinux 需要进程的上下文只有在被执行的"那一刻"才允许改变。新进程的域和角色信息能够从exec系统函数的上下文和文档类型中自动获得。进程也能够在执行 exec之前被指明上下文。这些过程自然受SELinux策略的控制,因为ID,角色和域都受SELinux策略的控制。


Fedora中策略的实现:

从 Fedora Core 3
开始,SELinux的策略数据存储于/etc/security/selinux/X/src/policy/目录下(X指您选则的策略,能够是 "strict"
或 "targeted")。在这个目录中,您能够使用"make load"来编译并装在策略。也就是用那个命令将策略编译成二进制格式并装在到内核中,并立即生效。除了装如内核,该命令还将策略的二进制格式存储到
/etc/selinux/X/policy/policy.YY 文档中,这里X指您选则的策略,能够是"strict" 或"targeted",YY是策略的版本号(Fedora Core 3支持最新的版本是18)。这是为了在系统开机的第一时间,init能够迅速装载策略到内核。/etc/selinux/config这个配置文档用来告诉init那些策略需要装载。


当您启动一个SELinux时,init所做的第一件事就是挂载/proc文档系统,并判断 SELinux是否被激活。init通过selinuxfs文档系统类型来判断内核中是否有SELinux,假如内核中没有SELinux或内核参数中 selinux=0 这一项,那么系统就会以一种叫做non-SE的状态被继续引导启动。假如发现了SELinux,那么/selinux虚拟文档系统将被创建,然后, init通过/selinux/policyvers来检查内核所支持的SELinux版本。最后,相应的策略数据 /etc/selinux/X/policy/policy.YY就会被装在到内核中去了。


当策略被装载完之后,任何正在运行着的进程(指的就是init和内核的任何线程)都将被指定 system_u:system_r:kernel_t这样一种上下文(内核线程其实无论在什么时间被创建,其上下文都是system_u: system_r:kernel_t )。当init装载完策略之后,他还要重新执行自己。策略中有一个规则叫domain_auto_trans(kernel_t, init_exec_t, init_t)。他的意思就是当 kernel_t 域执行了一个据有 init_exec_t 类型的可执行文档(如/sbin/init),那么该执行文档对应的进程的域就会自动过渡到 init_t
域(这是/sbin/init正确的所在域)。当这些都完成之后,init就继续完成那些通常的任务来完成机器的启动。内核线程自始至终都以 kernel_t 这个类型运行。

文档和目录的上下文存储于扩展属性当中 (XATTRs)。更多关于XATTRs的信息请参考attr(5), getfattr(1)
和 setfattr(1)的manpage。

简单的说,一个XATTR就是硬盘上某个文档的任何权,他由文档名和其他一些信息组成。对于每个 persistent 文档系统来说,他的每个文档或目录的SELinux上下文就存储在 security.selinux属性当中。虽然/proc文档系统不是persistent 文档系统,但SELinux还是在幕后为其文档和目录做了上下文标记,只是不能用getxattr获得罢了。和他对比,devpts文档系统(应用于 /dev/pts Unix98伪终端)中各个文档(各个伪终端)的上下文是能够通过getxattr来获得的,并能够通过 setxattr来更改每个设备的上下文(以便sshd等类似程式能够更改tty设备的上下文)。对于那些拥有固定存储的文档系统(ext2, ext3, Reiserfs, XFS,
vfat, 等等) 有两种选择用于设定文档上下文:
第一种:文档系统的类型就规定了其内部每一个文档英据有统一的上下文;
第二种:使用 XATTRs
为每个文档标记不同上下文。例如,在iso9660(CD-ROM)文档系统中的每一个文档的上下文都是system_u:object_r:iso9660_t
,这被称做 genfs标记。

Ext2, ext3 和XFS支持 XATTRs 而且 Fedora 系统也支持安全标记名字空间,所以Fedora默认使用 XATTRs 来标记文档的上下文,但这也是可选方法之一。因为 直到 Reiser4发布之前 ,Hans Reiser对支持XATTR没多大兴趣,所以Fedora的 ReiserFS 文档系统不能很好的支持SELinux标记操作。也就是说,使用 ReiserFS

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!