分类: 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/* 策略文件