Chinaunix首页 | 论坛 | 博客
  • 博客访问: 536560
  • 博文数量: 63
  • 博客积分: 1194
  • 博客等级: 中士
  • 技术积分: 761
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 12:44
个人简介

得之坦然,失之淡然,争其必然,顺其自然!

文章分类

全部博文(63)

文章存档

2014年(2)

2013年(22)

2012年(39)

分类:

2012-11-06 15:29:17

原文地址:SELinux指南 作者:liwei_593431525

一、SELinux

RedHat Enterprise Linux AS 3.0/4.0中安全方面的最大化就在 于集成了SELinux的支持。SELinux的全称是Security-Enhanced Linux,是由美国国家安全局NSA访问控制体制。SELinux可以最大限度地保Linux的安全。

至于它的作用到底有多大,一个简单的例子可以明:没有SELinuxLinux的安全级别Windows,是C2,但经过SELinuxLinux,安全级别则可以达到B1。如:我/tmp下的所有文件和目录权0777这样在没有SELinux的情况下,任何人都可以访问/tmp 下的内容。而在SELinux境下,尽管目录权限允访问/tmp下的内容,但SELinux的安全策略会继续检查你是否可以访问

NSA推出的SELinux安全体系构称 Flask,在构中,安全性策略的逻辑和通用接口一起封装在与操作系独立的件中,独的件称安全服器。SELinux的安全服器定了一种混合的安全性策略,由 (TE)、基于角色的访问控制 (RBAC) 和多安全(MLS) 成。通安全服器,可以支持不同的安全策略。SELinux使用策略配置言定安全策略,然后通checkpolicy 编译成二制形式,存在文件(如目策略/etc/selinux/targeted/policy/policy.18)中,在内核引导时读到内核空意味着安全性策略在每次系导时都会有所不同。

SELinux的策略分两种,一个是目(targeted)策略,另一个是(strict)策略。有限策略仅针对部分系SELinux策略,而严厉策略是行全局的NSA策略。有限策略模式下,9个(可能更多)系SELinux控,几乎所有的网都受控。

配置文件是/etc/selinux/config, 一般测试过程中使用“permissive”模 式,这样仅会在SELinux规则时发出警告,然后修改规则,最后由用户觉得是否“enforcing”的策略,禁止规则策 略的行规则决 定SELinux的工作行和方式,策略决定具体的安全细节如文件系,文件一致性。

 

二、使用设置

GUI 形界面模式下,要更改 SELinux 的策略使用方式,只需依次点用程序统设安全级别;然后在安全级别配置对话框的“SELinux”标签页中即可简单进置。或者直接在控制台窗口“system-config-securitylevel”来打开安全级别置窗口。在“SELinux”选项页中,我不但可以启用或者禁用”SELinux,而且可以内置的SELinux策略行修改。

命令行模式下如何更改 SELinux 的策略使用方式呢?它并没有像防火方便而直“system-config-securitylevel-tui”工具可用。

1)    看当前模式:

# getenforce

permissive

2)    Permissive

或者更详细些,包含配置文件中的

# sestatus | grep -i mode

Current mode:           permissive

Mode from config file:  permissive

3)    当前模式(立即生效),但重启后又回到配置文件中的定模式。

设为强制模式

# setenforce 1

# sestatus | grep -i mode

Current mode:           enforcing

Mode from config file:  permissive

设为警告模式

# setenforce 0

# sestatus | grep -i mode

Current mode:           permissive

Mode from config file:  permissive

4)    当系统重启后,为了使 SELinux 的模式为自己所期望的值,需要编辑配置文件。

比如,要将 Enforcing制) warn(警告)模式,可编辑

# vi /etc/selinux/config

将其中的

SELINUX=enforcing

SELINUX=permissive

如果当前 SELinux 已启用,要禁用 SELinux,你需要编辑 /etc/selinux/config,并重启系统。反之亦然,但是要注意,启用时 SELINUX 的值是 enforcing permissive 而不是 enabled

5)    禁用 SELinux:

# vi /etc/selinux/config

SELINUX=disabled

 

那 要如何才能知道当前的状呢?行下面的命令:

# selinuxenabled;echo $?

果返回0,表示启用;返回-256, 表示禁用。

6)    文件相关命令:

ls -Z

ps -Z

id -Z

可以看到文件,程 和用SELinux属性。

chcon 文件的SELinux属性。

 

、案例分析

案例:运行程序时报告“/opt/AssetSuite/Agent/bin/libasacrypt.so: cannot restore segment prot after reloc: Permission denied

问题分析:SeLinux禁止了so库的调用。

解决方法:

       关闭SeLinux

       改变库文件的上下文

chcon -t texrel_shlib_t /opt/AssetSuite/Agent/bin/libasacrypt.so

 

案例2Apache - "Document root must be a directory" 问题

有可能和问题问题还 403 Forbidden 禁止访问问题

       象描述:

不使用系 /var/www/htmlDocument Root,自己新建一个目后修改/etc/httpd/conf/httpd.conf 中的配置,然后重起ApacheDaemon发现Apache无法起,系统报错Document root must be a directory。但是,我们设置的DocumentRoot 的确是一个目,而且apache具有可读权限。

另一种情况:新建一个虚或文件后,无法访问 Forbidden, 403 Error,但文件或目有可读权限。

 

       问题产生的原因:

一开始想来想去想不出什么,但是我感限的问题,用传统Linux的思方式来看,绝对没有问题但是仔一想,SELinux是不是会有其他安全的定?

检查 avcmessage /var/log/messages文 件,发现似以下内容的这样一段:

Dec 24 17:54:59 hostname kernel: audit(1098222899.827:0): avc:

denied{ getattr } forpid=19029 exe=/usr/sbin/httpd

path=/var/www/html/about.html dev=dm-0 ino=373900

scontext=root:system_r:httpd_t tcontext=user_u:object_r:user_home_t

tclass=file

问题找到了,果然是SELinux的新特性搞的鬼。我把目或文件成了user_home_t型,因此apache程没有限,无法访问针对Apache程所使用的SELinux target policy定了apache程只能访问httpd_sys_content_t型的目或文件。

 

       解决办法:

把目录或文件的策略类型改成 httpd_sys_content_t 就可以了。

# chcon -t httpd_sys_content_t [file_name | dir_name]

然后可以用 ls -laZ 命令看文件目的策略型。
阅读(906) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~