Chinaunix首页 | 论坛 | 博客
  • 博客访问: 147336
  • 博文数量: 31
  • 博客积分: 2075
  • 博客等级: 大尉
  • 技术积分: 340
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-29 10:06
文章分类

全部博文(31)

文章存档

2017年(3)

2014年(1)

2013年(1)

2011年(9)

2010年(14)

2009年(3)

我的朋友

分类: LINUX

2010-11-25 18:37:12

1、安全上下文

安全上下文包括了所有事情的属性的描述,包括文件, 目录, 进程, 等以上所有的东西。安全上下文包括了身份,角色和域类型。在SELinux系统上你可以用id 命令来查看你当前用户的安全上下文。

使用了SELinux的系统中,每一个进程的上下文都包含三个组成部分:一个ID(identity),一个角色(role)和一个域(domain)

一个安全上下文可以像 identity:role:domain 这样一种描述符的方式简明的表现出来。

2、identity(身份)

ID 是指这个进程的所有者,就是UNIX账户,但前提是这个账户必须被预先编译到SELinux策略中去使SELinux认识这个账户,不然的话 SELinux默认地将那些未知的系统进程ID记为 system_u ,将那些未知的用户进程ID记为 user_u;角色用来判断某个处于此角色的ID可以进入哪些域,还用来防止某个处于此角色的ID进入其它不该进入的域。比如, user_r角色就不允许进入 sysadm_t (重要的系统管理域)。换句话说就是,那些只有 user_u ID的进程只能扮演 user_r 这个角色,而 user_r 这个角色 永远不能被许可进入 sysadm_t 域。从而,那些只有 user_u 这个ID的人是别想进入 sysadm_t 域的

运行su 命令不会改变SELinux中的身份(identity)

[test@linuxas ~]$ id

uid=500(test) gid=500(test) groups=500(test) context=user_u:system_r:unconfined_t

[test@linuxas ~]$ su root

Password:

[root@linuxas test]# id

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t

一个无特权用户 test 运行 id 命令 (在启动SELinux的情况下) 可以看到用户的安全上下文:

context=user_u:system_r:unconfined_t

现在, 如果 使用su切换成 root 再运行id, 他将发现安全上下文仍然是:

context=user_u:system_r:unconfined_t

身份保持相同, 跟没切换到root时一样。

3、role(角色)

角色决定了那些域可以使用。 哪些域可以被哪些角色使用可以预先定义在策略的配置文件里。如果一个策略数据库中定义了一个角色不可以使用一个域, 它将被拒绝。

4、domain(域)

所有进程都在域中运行,域直接决定了进程的访问。 域基本上是一个进程允许做的操作的列表, 或者说它决定了一个进程可以对哪些类型进行操作。域就好像一个标准UNIX的uid的概念。在有SELinux的系统上, 如果一个正在执行的进程想要转换进入特权域执行时,如果这个进程的角色被设置成不允许进入特权域的话, 这个进程就不能执行。

常见的例子是sysadm_t是系统管理域, user_t 是无特权用户域。 Init运行在init_t 域, named 运行在 named_t 域。

5、类型

类型分配给一个对象并决定谁可以访问这个对象。 它的定义和域基本相同, 不同就是域是对进程的应用而类型是分配给目录,文件,和套接字的。

6、策略

策略就是可以设置的规则,决定了一个角色的用户可以访问什么; 哪个角色可以进入哪个域,哪个域可以访问哪个类型等这样的问题。 你可以根据你想要建立的系统的特点来决定设置什么样的策略。

7、

A) Selinux的启用与关闭

编辑/etc/selinux/conf文件

SELINUX=enforcing(强制:违反了策略,你就无法继续操作下去)

Permissive(有效,但不强制:违反了策略的话它让你继续操作,但是把你的违反的内容记录下来)

Disabled(禁用)

禁用的另一种方式:在启动的时候,通过传递参数selinux给内核来控制它

编辑/etc/grup.conf

title Red Hat Enterprise Linux Server (2.6.188.el5)

root (hd0,0)

kernel /vmlinuz2.6.188.el5 ro root=LABEL=/ rhgb quiet selinux=0

initrd /initrd2.6.188.el5.img

SELINUXTYPE=targeted (此参数可选项:targeted和strice ; targeted只控制关键网络服务,

strice控制所有的服务)

B) 查询selinux的状态

a、[root@linuxas ~]# /usr/sbin/getenforce

b、[root@linuxas ~]# sestatus bv

C)查看selinux加载的内核模块

[root@linuxas selinux]# semodule -l

D)查看selinux错误日志

[root@linuxas selinux]# sealert a /var/log/audit/audit.log

E)Selinux的基本操作

查看文件:ls –lZ

[root@linuxas selinux]# ls -lZ
drwxr-xr-x  root  root system_u:object_r:default_t      avatars
-rw-r--r--  root  root system_u:object_r:default_t      README
.......

[root@linuxas selinux]# ls --context README
-rw-r--r--  root root system_u:object_r:default_t      README

更改文件的标签: chcon
[root@python tmp]# ls --context test.txt
-rw-r--r-- root root root:object_r:staff_tmp_t test.txt

[root@python tmp]# chcon -t etc_t test.txt
[root@python tmp]# ls -lZ test.txt

-rw-r--r-- root root root:object_r:etc_t test.txt

进程domain的确认:

程序现在在那个domain里运行,我们可以在ps 命令后加 -Z
[root@python /]# ps -eZ
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 ksoftirqd/0

ROLE的确认和变更:
[root@python ~]# id

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:staff_r:staff_t

[root@python ~]# newrole -r sysadm_r

Authenticating root.
口令:
[root@python ~]# id

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:sysadm_r:sysadm_t

模式切换:

1)getenforce     得到当前的SELINUX值
[root@python bin]# getenforce
Permissive
2)setenforce     更改当前的SELINUX值 ,后面可以跟 enforcing,permissive 或者 1, 0。
[root@python bin]# setenforce permissive
3)sestatus       显示当前的 SELinux的信息
[root@python bin]# sestatus -v

恢复原来的文件标签: restorecon

[root@linuxas test]# restorecon aa.txt

[root@linuxas test]# ls -lZ aa.txt

rwrr root root user_u:object_r:user_home_t aa.txt

显示当前用户的Selinux context:

[root@linuxas ~]# id -Z

root:system_r:unconfined_t:SystemLowSystemHigh

runcon 使用特定的context来执行指令:

[root@linuxas ~]# runcon -t user_home_t cat /etc/passwd

root:system_r:user_home_t:SystemLowSystemHigh is not a valid context

查看某种服务是否受到SELinux的保护:

[root@linuxas ~]# getsebool -a

(RHEL4:inactive受保护,active不受保护;RHEL5:off受保护,on不受保护)

SELinux的配置相关文件都在/etc/selinux下,其中/etc/selinux/targeted目录里就包含了策略的详细配置和context定义,以下是主要文件及功用:

/etc/selinux/targeted/contexts/*_context 默认的context设置
/etc/selinux/targeted/contexts/files/* 精确的context类型划分
/etc/selinux/targeted/policy/* 策略文件

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