曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4645|回复: 0
打印 上一主题 下一主题

[SELinux] 被约束的进程(Confined Processes)

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2013-6-20 23:44:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在下面的描述中,Targeted Policy 会被称为“定向策略”,一个进程如果是 Targetd 的,那么称之为“定向的进程”。使用的是 CentOS6.4 操作系统。

在 RHEL/Fedora/CentOS 中 Targeted 策略是默认的 SELinux 策略。在使用 targeted 策略时,定向的进程运行在一个约束域中(confined domain);非定向进程运行在一个非约束域中(unconfined domain)。比如,在默认情况下,登录用户是运行在 unconfined_t 域中的;由 init 启动的系统进程是运行在 initrc_t 域中的;这两个域都是未约束域。

约束和未约束域都会经受内存的写与执行的检查。默认情况下,运行在未约束域的程序不会被分配可写内存及执行它,这样就会减少缓冲区溢出攻击的危险。这些内存检查可以通过设置相应的布尔值来禁止(
getsebool/setsebool) ,这个修改可以在运行时进行。


被约束的进程
几乎所有在网络上监听的服务都会被约束。大部分以 root 用户来运行的进程在为其它的用户执行任务时(如 passwd 为其它用户设置密码) 也是被约束的。当一个进程被约束时,它运行在自己的域中,比如 httpd 进程运行于 httpd_t 域。如果一个被约束的进程被黑客所攻击,那么在 SELinux 策略配置的保护下,攻击者所要访问的资源以及带来的损害都会在很大的程度上被约束。


下面的例子描述了 SELinux 是如何阻止 Apache HTTP 服务器 (httpd) 读取没有被正确标记的文件,比如一个原被 Samba 服务所用的文件。当然,这个例子不会用在生产环境中。这里假设 httpd, setroubleshoot-server, dbus 和 audit 软件包已经装上,并且 SELinux 定向策略也已经启用,以及 SELinux 运行在 enforcing 模式。


1. 可以先运行 sestatus 来查看一下 SELinux 是否已经开启,是否已经处于 enforcing 模式,是否采用了定向策略:
[root@groad.net ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted
从输出知道,上面的几点要求都已经满足。

2. 现在,我们以 root 用户身份在 /vaw/www/html 这个目录新建一个文件:
[root@groad.net ~]# echo "hello groad.net" > /var/www/html/index.html

3. 查看一下上面新建文件的 SELinux 上下文:
[root@groad.net ~]# ls -Z /var/www/html/index.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html
由上可见,在默认情况下,CentOS 里,Linux 用户是处于“无约束”状态的,也就是 index.html 文件在 SELinux 里的用户是 unconfined_u 用户。

需要注意的是,RBAC (基于角色控制的访问机制) 是用在进程身上的,而不是普通文件

角色(role) 的概念对文件来说没什么意义 。 object_r 这个角色通常都用在文件身上(磁盘上的和网络文件系统里的文件)。在 /proc 目录下与进程相关的文件(如在以数字形式命名的目录下的文件)通常使用的是 system_r 这个角色。

httpd_sys_content_t 类型表明它允许 httpd 这个进程访问该文件。

4. 现在可以使用下面的命令来启动 httpd 服务了:
# service httpd start

5. 接着在浏览器里浏览刚才所建立的网页,可以看到正常输出。

6. 接下来,用 chcon 命令来更改上面的 index.html 这个文件的标记,但是 chcon 修改的结果在服务器下次重启时不会被保存。永久改变应该使用 semanage 命令。运行下面命令进行更改:
[root@groad.net ~]# chcon -t samba_share_t /var/www/html/index.html
观察修改的结果:
[root@groad.net ~]# ls -Z /var/www/html/index.html
-rw-r--r--. root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/index.html
修改成功。现在再用浏览器浏览一下这个页面,看看会发生情况:


由上可见,访问被拒绝了。

在上面的例子中可以看到,尽管 DAC 机制允许 httpd 进程访问 index.html 文件,然而在修改了该文件的类型标记后,httpd 就没有权限访问了,这是因为 SElinux 的保护产生了作用。拒绝访问的错误会被记录在 /var/logmessages 文件中:
Jun 20 23:34:02 groad kernel: type=1400 audit(1371742442.556:79398): avc:  denied  { getattr } for  pid=21702 comm="httpd" path="/var/www/html/index.html" dev=dm-0 i
no=6162577 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
Jun 20 23:34:02 groad kernel: type=1400 audit(1371742442.557:79399): avc:  denied  { getattr } for  pid=21702 comm="httpd" path="/var/www/html/index.html" dev=dm-0 i
no=6162577 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file

类似的错误信息还会被记录在 /var/log/httpd/error_log 中:
[Thu Jun 20 23:34:02 2013] [error] [client 192.168.1.110] (13)Permission denied: access to /index.html denied

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-7 04:31 , Processed in 0.083396 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表