linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > article > linux网络与应用 > 网络安全 >
栏目导栏
资料搜索
热门文章
·Linux系统下使用aMsn(MSN)详解
·使用Snort规则.doc
·构建一个RADIUS服务器
·Netscreen防火墙简单配置实例
·IPTABLES配置方法
·SELinux 入门
·常用log4j配置
·如何利用嗅探器TcpDump分析网络
·ssh工具scp使用示例
·LINUX iptable应用手册(一)
·linux安全设置手册
·防火牆與ShoreWall使用方法
·snort 模块详讲
·LRP架构Linux路由器/防火墙
·Linux下防火墙设置
最新文章
·认识Linux操作系统下三大便利开
·Linux操作系统如何限制SSH密码
·Linux Iptables 内核2.6.18添加
·实用技巧:让Linux系统有效防御
·SELinux拒绝vsftpd上传文件到用
·解决SUSE Linux下SSH无法使用密
·关于Linux操作系统防火墙的进程
·OpenSSH实现Windows和Linux文件
·Linux防火墙示例 用简单规则集
·如何防范Linux操作系统下缓冲区
·Linux系统开防火墙时自动开启相
·Linux操作系统下防范黑客的一些
·Linux操作系统防火墙进程查看的
·Linux主机服务器被入侵后需要采
·通过监控Linux的运行进程来保证
Google
 
SELinux 入门
[ 作者:  加入时间:2007-04-03 10:40:59  来自:Linux联盟收集整理 ]
1.背景 H8KLinux联盟
SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」 和SCC(Secure Computing Corporation)开发的 Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的,2000年以 GNU GPL 发布。 H8KLinux联盟
H8KLinux联盟
现在以Linux作为因特网服务器是越来越普遍的事了。在我这几年作过的项目里,WEB的开发基本都是基于Linux的,这里有给大公司做的,也给政府部门做的,当然更多的是中小企业做的。这其中给政府做的,我们把SELinux作为一个卖点,接受了不少项目。 H8KLinux联盟
H8KLinux联盟
2.我们需要安全操作系统的理由 H8KLinux联盟
现在不论是政府还是民间企业,大家对信息安全问题是越来越关心了,因为企业的业务平台的服务器上存储着大量的商务机密,个人资料,个人资料它直接关系到个人的隐私问题。特别是我们政府的网站,作为信息公开的平台,它的安全就更显得重要了。这些连到互联网的服务器,不可避免的要受到来自世界各地的各种威胁。最坏的时候我们的服务器被入侵,主页文件被替换,机密文件被盗走。除了来自外部的威胁外,内部人员的不法访问,攻击也是不可忽视的。对于这些攻击或者说是威胁,当然有很多的办法,有防火墙,入侵检测系统,打补丁等等。因为Linux也和其他的商用UNIX一样,不断有各类的安全漏洞被发现。我们对付这些漏洞不得不花很多的人力来堵住它。在这些手段之中,提高OS系统自身的牢固性就显得非常的重要。 H8KLinux联盟
2.1传统的Linux OS的不足之处 H8KLinux联盟
虽然Linux 比起 Windows 来说,它的可靠性,稳定定要好得多,但是他也是和其他的UNIX 一样,有以下这些不足之处。 H8KLinux联盟
1)存在特权用户root H8KLinux联盟
  任何人只要得到root的权限,对于整个系统都可以为所欲为。这一点Windows也一样。 H8KLinux联盟
2)对于文件的访问权的划分不够细 H8KLinux联盟
  在linux系统里,对于文件的操作,只有「所有者」,「所有组」,「其他」这3类的划分。 H8KLinux联盟
  对于「其他」这一类里的用户再细细的划分的话就没有办法了。 H8KLinux联盟
3)SUID程序的权限升级 H8KLinux联盟
  如果设置了SUID权限的程序有了漏洞的话,很容易被攻击者所利用。 H8KLinux联盟
4)DAC(Discretionary Access Control)问题 H8KLinux联盟
  文件目录的所有者可以对文件进行所有的操作,这给系统整体的管理带来不便。 H8KLinux联盟
H8KLinux联盟
对于以上这些的不足,防火墙,入侵检测系统都是无能为力的。 H8KLinux联盟
在这种背景下,对于访问权限大幅强化的OS SELinux来说,它的魅力的无穷的。 H8KLinux联盟
2.2 SELinux的优点 H8KLinux联盟
SELinux系统比起通常的Linux系统来,安全性能要高的多,它通过对于用户,进程权限的最小化,即使受到攻击,进程或者用户权限被夺去,也不会对整个系统造成重大影响。 H8KLinux联盟
H8KLinux联盟
接下来我来介绍SELinux的一些特点。 H8KLinux联盟
H8KLinux联盟
特点1:MAC(Mandatory Access Control)―――对访问的控制彻底化 H8KLinux联盟
对于所有的文件,目录,端口这类的资源的访问,都可以是基于策略设定的,这些策略是由管理员定制的、一般用户是没有权限更改的。 H8KLinux联盟
H8KLinux联盟
特点2: TE (Type Enforcement)――― 对于进程只付与最小的权限 H8KLinux联盟
Te概念在 SELinux里非常的重要。它的特点是对所有的文件都赋予一个叫type的文件类型标签,对于所有的进程也赋予各自的一个叫 domain的 标签。Domain标签能够执行的操作也是由access vector在策略里定好的。 H8KLinux联盟
我们熟悉的apache服务器,httpd进程只能在httpd_t 里运行,这个httpd_t 的domain能执行的操作,比如能读网页内容文件赋予httpd_sys_content_t, 密码文件赋予shadow_t, TCP的80端口赋予 http_port_t等等。如果在access vector里我们不允许 http_t来对http_port_t进行操作的花,Apache启动都启动不了。反过来说,我们只允许80端口,只允许读取被标为httpd_sys_content_t的文件,httpd_t就不能用别的端口,也不能更改那些被标为httpd_sys_content_t的文件(read only)。 H8KLinux联盟
H8KLinux联盟
特点3: domain迁移 ―― 防止权限升级 H8KLinux联盟
在用户环境里运行点对点下载软件azureus,你当前的domain是fu_t, 但是,你考虑到安全问题,你打算让他在azureus_t里运行,你要是在terminal里用命令启动azureus的话,它的进程的domain就会默认继承你实行的shell的fu_t。 H8KLinux联盟
有了domain迁移的话,我们就可以让azureus在我们指定的azureus_t里运行,在安全上面,这种做法更可取,它不会影响到你的fu_t。 H8KLinux联盟
下面是domain迁移指示的例子: H8KLinux联盟
domain_auto_trans(fu_t, azureus_exec_t, azureus_t) H8KLinux联盟
意思就是,当在 fu_t domain里,实行了 被标为 azureus_exec_t的文件时,domain 从fu_t迁移到 azureus_t 。下面是Apache启动的迁移图。注意了,因为从哪一个domain能迁移到httpd_t是在策略里定好了,所以要是我们手动(/etc/init.d/httpd start)启动apache的话,可能仍然留在sysadm_t里,这样就不能完成正确的迁移。要用run_init命令来手动启动。 H8KLinux联盟
H8KLinux联盟
H8KLinux联盟
特点4: RBAC(role base access control) ――――― 对于用户只付与最小的权限 H8KLinux联盟
对于用户来说,被划分成一些ROLE,即使是ROOT用户,你要是不在sysadm_r里,也还是不能实行sysadm_t管理操作的。因为,那些ROLE可以执行那些domain也是在策略里设定的。ROLE也是可以迁移的,但是也只能安策略规定的迁移。 H8KLinux联盟
H8KLinux联盟
3. 控制切换 H8KLinux联盟
从fedora core 2开始, 2.6内核的版本都支持selinux.我们看看 Fedora core 5 里的/etc/sysconfig/selinux标准设定吧。 H8KLinux联盟
# This file controls the state of SELinux on the system. H8KLinux联盟
# SELINUX= can take one of these three values: H8KLinux联盟
# enforcing - SELinux security policy is enforced. H8KLinux联盟
# permissive - SELinux prints warnings instead of enforcing. H8KLinux联盟
# disabled - SELinux is fully disabled. H8KLinux联盟
SELINUX=enforcing H8KLinux联盟
#SELINUX=disabled H8KLinux联盟
# SELINUXTYPE= type of policy in use. Possible values are: H8KLinux联盟
# targeted - Only targeted network daemons are protected. H8KLinux联盟
# strict - Full SELinux protection. H8KLinux联盟
SELINUXTYPE=targeted H8KLinux联盟
H8KLinux联盟
SELINUX有「disabled」「permissive」,「enforcing」3种选择。 H8KLinux联盟
H8KLinux联盟
Disabled就不用说了,permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来。在我们开发策略的时候非常的有用。 H8KLinux联盟
相当于Debug模式。 H8KLinux联盟
Enforcing就是你违反了策略,你就无法继续操作下去。 H8KLinux联盟
H8KLinux联盟
SELINUXTYPE呢,现在主要有2大类,一类就是红帽子开发的targeted,它只是对于,主要的网络服务进行保护,比如 apache ,sendmail, bind,postgresql等,不属于那些domain的就都让他们在unconfined_t里,可导入性高,可用性好但是不能对整体进行保护。 H8KLinux联盟
另一类是Strict,是NAS开发的,能对整个系统进行保护,但是设定复杂,我认为虽然它复杂,但是一些基本的会了,还是可以玩得动的。 H8KLinux联盟
H8KLinux联盟
我们除了在/etc/sysconfig/selinux设它有效无效外,在启动的时候,也可以通过传递参数selinux给内核来控制它。(Fedora 5默认是有效) H8KLinux联盟
H8KLinux联盟
kernel /boot/vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet selinux=0 H8KLinux联盟
上面的变更可以让它无效。 H8KLinux联盟
H8KLinux联盟
[root@python sysconfig]# /usr/sbin/getenforce H8KLinux联盟
Enforcing H8KLinux联盟
确认有效后重新对文件系统赋予标签: H8KLinux联盟
[root@python sysconfig]# /sbin/fixfiles relabel H8KLinux联盟
或者 H8KLinux联盟
[root@python /]# touch /.autorelabel H8KLinux联盟
然后 reboot ,你就在secure的Linux环境下工作了。 H8KLinux联盟
4. SELinux的基本操作 H8KLinux联盟
SELinux是个经过安全强化的Linux操作系统,实际上,基本上原来的运用软件没有必要修改就能在它上面运行。真正做了特别修改的RPM包只要50多个。像文件系统EXT3都是经过了扩展。对于一些原有的命令也进行了扩展,另外还增加了一些新的命令,接下来我们就来看看这些命令。 H8KLinux联盟
4.1 文件操作 H8KLinux联盟
1)ls命令 H8KLinux联盟
在命令后加个 -Z 或者加 –context H8KLinux联盟
[root@python azureus]# ls -Z H8KLinux联盟
-rwxr-xr-x fu fu user_u:object_r:user_home_t azureus H8KLinux联盟
-rw-r--r-- fu fu user_u:object_r:user_home_t Azureus2.jar H8KLinux联盟
-rw-r--r-- fu fu user_u:object_r:user_home_t Azureus.png H8KLinux联盟
H8KLinux联盟
2)chcon H8KLinux联盟
更改文件的标签 H8KLinux联盟
[root@python tmp]# ls --context test.txt H8KLinux联盟
-rw-r--r-- root root root:object_r:staff_tmp_t test.txt H8KLinux联盟
H8KLinux联盟
[root@python tmp]# chcon -t etc_t test.txt H8KLinux联盟
[root@python tmp]# ls -lZ test.txt H8KLinux联盟
-rw-r--r-- root root root:object_r:etc_t test.txt H8KLinux联盟
H8KLinux联盟
3)restorecon H8KLinux联盟
当这个文件在策略里有定义是,可以恢复原来的 文件标签。 H8KLinux联盟
H8KLinux联盟
4)setfiles H8KLinux联盟
跟chcon一样可以更改一部分文件的标签,不需要对整个文件系统重新设定标签。 H8KLinux联盟
H8KLinux联盟
5)fixfiles H8KLinux联盟
一般是对整个文件系统的, 后面一般跟 relabel,对整个系统 relabel后,一般我们都重新启动。如果,在根目录下有.autorelabel空文件的话,每次重新启动时都调用 fixfiles relabel H8KLinux联盟
H8KLinux联盟
6)star H8KLinux联盟
就是tar在SELinux下的互换命令,能把文件的标签也一起备份起来。 H8KLinux联盟
H8KLinux联盟
7)cp H8KLinux联盟
可以跟 -Z, --context=CONTEXT 在拷贝的时候指定目的地文件的security context H8KLinux联盟
H8KLinux联盟
8)find H8KLinux联盟
可以跟 –context 查特定的type的文件。 H8KLinux联盟
例子: H8KLinux联盟
find /home/fu/ --context fu:fu_r:amule_t -exec ls -Z {} \: H8KLinux联盟
H8KLinux联盟
9)run_init H8KLinux联盟
在sysadm_t里手动启动一些如Apache之类的程序,也可以让它正常进行,domain迁移。 H8KLinux联盟
4.2进程domain的确认 H8KLinux联盟
程序现在在那个domain里运行,我们可以在ps 命令后加 -Z H8KLinux联盟
[root@python /]# ps -eZ H8KLinux联盟
LABEL PID TTY TIME CMD H8KLinux联盟
system_u:system_r:init_t 1 ? 00:00:00 init H8KLinux联盟
system_u:system_r:kernel_t 2 ? 00:00:00 ksoftirqd/0 H8KLinux联盟
system_u:system_r:kernel_t 3 ? 00:00:00 watchdog/0 H8KLinux联盟
4.3ROLE的确认和变更 H8KLinux联盟
命令id能用来确认自己的 security context H8KLinux联盟
[root@python ~]# id H8KLinux联盟
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 H8KLinux联盟
这里,虽然是ROOT用户,但也只是在一般的ROLE和staff_t里运行,如果在enforcing模式下,这时的ROOT对于系统管理工作来说,是什么也干不了。 H8KLinux联盟
H8KLinux联盟
[root@python ~]# newrole -r sysadm_r H8KLinux联盟
Authenticating root. H8KLinux联盟
口令: H8KLinux联盟
[root@python ~]# id H8KLinux联盟
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 H8KLinux联盟
4.4模式切换 H8KLinux联盟
1)getenforce H8KLinux联盟
得到当前的SELINUX值 H8KLinux联盟
[root@python bin]# getenforce H8KLinux联盟
Permissive H8KLinux联盟
2)setenforce H8KLinux联盟
更改当前的SELINUX值 ,后面可以跟 enforcing,permissive 或者 1, 0。 H8KLinux联盟
[root@python bin]# setenforce permissive H8KLinux联盟
H8KLinux联盟
3)sestatus H8KLinux联盟
显示当前的 SELinux的信息 H8KLinux联盟
[root@python bin]# sestatus -v H8KLinux联盟
SELinux status: enabled H8KLinux联盟
SELinuxfs mount: /selinux H8KLinux联盟
Current mode: permissive H8KLinux联盟
Mode from config file: permissive H8KLinux联盟
Policy version: 20 H8KLinux联盟
Policy from config file: refpolicy H8KLinux联盟
H8KLinux联盟
Process contexts: H8KLinux联盟
Current context: user_u:user_r:user_t H8KLinux联盟
Init context: system_u:system_r:init_t H8KLinux联盟
/sbin/mingetty system_u:system_r:getty_t H8KLinux联盟
/usr/sbin/sshd system_u:system_r:sshd_t H8KLinux联盟
H8KLinux联盟
File contexts: H8KLinux联盟
Controlling term: user_u:object_r:user_devpts_t H8KLinux联盟
/etc/passwd system_u:object_r:etc_t H8KLinux联盟
/etc/shadow system_u:object_r:shadow_t H8KLinux联盟
/bin/bash system_u:object_r:shell_exec_t H8KLinux联盟
/bin/login system_u:object_r:login_exec_t H8KLinux联盟
/bin/sh system_u:object_r:bin_t -> system_u:object_r:shell_exec_t H8KLinux联盟
/sbin/agetty system_u:object_r:getty_exec_t H8KLinux联盟
/sbin/init system_u:object_r:init_exec_t H8KLinux联盟
/sbin/mingetty system_u:object_r:getty_exec_t H8KLinux联盟
4.5其他重要命令 H8KLinux联盟
1)Audit2allow H8KLinux联盟
很重要的一个以python写的命令,主要用来处理日志,把日志中的违反策略的动作的记录,转换成 access vector,对开发安全策略非常有用。在refpolicy里,它的功能比以前有了很大的扩展。 H8KLinux联盟
[root@python log]# cat dmesg | audit2allow -m local > local.te H8KLinux联盟
H8KLinux联盟
2)checkmodule -m -o local.mod local.te H8KLinux联盟
编译模块 H8KLinux联盟
[root@python log]# checkmodule -m -o local.mod local.te H8KLinux联盟
checkmodule: loading policy configuration from local.te H8KLinux联盟
checkmodule: policy configuration loaded H8KLinux联盟
checkmodule: writing binary representation (version 5) to local.mod H8KLinux联盟
H8KLinux联盟
3)semodule_package H8KLinux联盟
创建新的模块 H8KLinux联盟
[root@python log]# semodule_package -o local.pp -m local.mod H8KLinux联盟
H8KLinux联盟
4)semodule H8KLinux联盟
可以显示,加载,删除 模块 H8KLinux联盟
加载的例子: H8KLinux联盟
[root@python log]# semodule -i local.pp H8KLinux联盟
H8KLinux联盟
5)semanage H8KLinux联盟
这是一个功能强大的策略管理工具,有了它即使没有策略的源代码,也是可以管理安全策略的。因为我主要是介绍用源代码来修改策略的,详细用法大家可以参考它的man页。 H8KLinux联盟
5. 定制策略 H8KLinux联盟
FC4,RHEL4等都是采用策略1.X版本的,并且是提供策略源代码的RPM包。从FC5开始策略的版本从1.X 升级到2.X。2.X版本的refpolicy(reference policy)最大的一个变化就是引进模块(module)这个概念, 同一套策略源代码就可以支持Multi-LevelSecurity(MLS)和non-MLS。 H8KLinux联盟
http://serefpolicy.sf.net/ H8KLinux联盟
标准的FC5里不提供源代码的RPM包。FC5提供的audit2allow,semanage,semodule也是可以开发一些简单的策略模块的。但是,要是作策略模块的开发,增加一个ROLE之类的,最好还是下载refpolicy的源代码。 H8KLinux联盟
5.1策略源文件的安装 H8KLinux联盟
从CVS服务器下载的源代码是最新的,如果遇到象make的时候出错,那么最好就是把你系统里和SELinux有关的那些包更新到最新的状态。 H8KLinux联盟
从source Forge的CVS服务器下载源代码 H8KLinux联盟
H8KLinux联盟
[root@python src]# cd /usr/local/src H8KLinux联盟
[root@python src]# cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/serefpolicy login H8KLinux联盟
[root@python src]# cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/serefpolicy co -P refpolicy H8KLinux联盟
H8KLinux联盟
[root@python src]# cd refpolicy/ H8KLinux联盟
H8KLinux联盟
[root@python src]# make install-src H8KLinux联盟
H8KLinux联盟
安装好了的源代码目录结构如下图所示: H8KLinux联盟
H8KLinux联盟
H8KLinux联盟
H8KLinux联盟
每一个模块有3个文件构成,比如上图的sudo.fc 就是和 命令sudo相关的文件的定义标签,(file context rabel),sudo.te是Type Enforcement定义,包括TE访问规则等,sudo.if是一个外部模块调用这个模块的接口定义。 H8KLinux联盟
H8KLinux联盟
[root@python src]# cd /etc/selinux/refpolicy/src/policy H8KLinux联盟
[root@python policy]# cp build.conf build.conf.org H8KLinux联盟
[root@python policy]# vi build.conf H8KLinux联盟
[root@python policy]# diff build.conf build.conf.org H8KLinux联盟
32c32 H8KLinux联盟
< DISTRO = redhat H8KLinux联盟
--- H8KLinux联盟
> #DISTRO = redhat H8KLinux联盟
43c43 H8KLinux联盟
< MONOLITHIC=n H8KLinux联盟
--- H8KLinux联盟
> MONOLITHIC=y H8KLinux联盟
[root@python src]# make conf H8KLinux联盟
[root@python src]# make H8KLinux联盟
H8KLinux联盟
这样,在/etc/selinux/refpolicy/src/policy下生成很多的以pp为后缀的文件,这些就是SELinux模块。接下来我们修改/etc/sysconfig/selinux,设成SELINUXTYPE=refpolicy,然后reboot. H8KLinux联盟
H8KLinux联盟
启动后,确认策略的适用情况, 现在的版本是20。 H8KLinux联盟
[fu@python ~]$ /usr/sbin/sestatus H8KLinux联盟
SELinux status: enabled H8KLinux联盟
SELinuxfs mount: /selinux H8KLinux联盟
Current mode: permissive H8KLinux联盟
Mode from config file: permissive H8KLinux联盟
Policy version: 20 H8KLinux联盟
Policy from config file: refpolicy H8KLinux联盟
5.2给程序定制domain H8KLinux联盟
开发程序策略的一般步骤 H8KLinux联盟
1.给文件,端口之类的object赋予type 标签 H8KLinux联盟
2.设置 Type Enforcement (Domain 迁移,访问许可) H8KLinux联盟
3.策略加载 H8KLinux联盟
4.permissive模式下运行程序 H8KLinux联盟
5.确认日志,用audit2allow生成访问许可 H8KLinux联盟
6.重复1,2,3,4,5动作,直到没有违反的日志出现 H8KLinux联盟
7.切换到enforcing模式,正式运用 H8KLinux联盟
因为我们所常用的那些服务的策略模块都已经有了,修改的时候也比较简单。在这里我就举个一般的例子。用点对点下载的朋友估计都跟我一样,在Linux上用 azureus,Amule来下载东西吧。 H8KLinux联盟
接下来以azureus为例,介召如何在FC5里追加一个azureus.pp模块。我们在追加azureus.pp模块之前,azureus是在系统给用户设好的user_t domain里运行。 H8KLinux联盟
[fu@python azureus]$ ps -efZ|grep azureus H8KLinux联盟
user_u:user_r:user_t fu 1751 1732 0 22:28 pts/3 00:00:00 /bin/bash ./azureus H8KLinux联盟
接下来我们在追加3个文件。 H8KLinux联盟
1)azureus.fc H8KLinux联盟
在这里我只定义一个文件,实际要是真的用的,还要定义azureus_t能写的目录等。 H8KLinux联盟
[root@python apps]# more azureus.fc H8KLinux联盟
/home/fu/azureus -- gen_context(user_u:object_r:azureus_exec_t,s0) H8KLinux联盟
H8KLinux联盟
2)azureus.te H8KLinux联盟
[root@python apps]# more azureus.te H8KLinux联盟
policy_module(azureus,1.0.0) H8KLinux联盟
type azureus_t; H8KLinux联盟
type azureus_exec_t; H8KLinux联盟
role user_r types azureus_t; H8KLinux联盟
require { H8KLinux联盟
type user_t; H8KLinux联盟
}; H8KLinux联盟
domain_type(azureus_t) H8KLinux联盟
domain_entry_file(azureus_t, azureus_exec_t) H8KLinux联盟
domain_auto_trans(user_t, azureus_exec_t, azureus_t) H8KLinux联盟
H8KLinux联盟
H8KLinux联盟
3)azureus.if H8KLinux联盟
实际上没有别的模块要调用azureus,所以这个文件就是空文件也不要紧。 H8KLinux联盟
[root@python apps]# more azureus.if H8KLinux联盟
# policy/modules/apps/azureus.if H8KLinux联盟
## <summary>Myapp example policy</summary> H8KLinux联盟
## <summary> H8KLinux联盟
## Execute a domain transition to run azureus. H8KLinux联盟
## </summary> H8KLinux联盟
## <param name="domain"> H8KLinux联盟
## Domain allowed to transition. H8KLinux联盟
## </param> H8KLinux联盟
interface(`azureus_domtrans',` H8KLinux联盟
gen_requires(` H8KLinux联盟
type azureus_t, azureus_exec_t; H8KLinux联盟
') H8KLinux联盟
domain_auto_trans($1,azureus_exec_t,azureus_t) H8KLinux联盟
allow $1 azureus_t:fd use; H8KLinux联盟
allow azureus_t $1:fd use; H8KLinux联盟
allow $1 azureus_t:fifo_file rw_file_perms; H8KLinux联盟
allow $1 azureus_t:process sigchld; H8KLinux联盟
') H8KLinux联盟
在/etc/selinux/refpolicy/src/policy/policy/module.conf 里加入下面一行 H8KLinux联盟
[root@python policy]# tail -1 modules.conf H8KLinux联盟
azureus = module H8KLinux联盟
H8KLinux联盟
确认/etc/selinux/refpolicy/src/policy里MONOLITHIC=n H8KLinux联盟
最后make , make load H8KLinux联盟
[root@python policy]# pwd H8KLinux联盟
/etc/selinux/refpolicy/src/policy H8KLinux联盟
[root@python policy]# make;make load H8KLinux联盟
正常终了后,我们可以用 semodule命令来确认 azureus.pp下载下去了没有。 H8KLinux联盟
[root@python policy]# semodule -l |grep azureus H8KLinux联盟
azureus 1.0.0 H8KLinux联盟
看样子是没有问题。好了我们再看看 /home/fu/azureus/azureus的security context,我们刚才在azureus.fc里是期望它是 user_u:object_r:azureus_exec_t ,可是它这个时候还是继承了默认的 user_u:object_r:user_home_t , 如果不是我们期望的文件标签的话,domain是无法从user_t迁移到azureus_t的,因为relabel的话,会对整个文件系统进行重新设标签,很花时间,所以我们用在上面介绍过文件标签更改的命令chcon命令来改标签。 H8KLinux联盟
[root@python azureus]# chcon -t azureus_exec_t azureus H8KLinux联盟
再看看这次的新标签,果然如我们期望的,变成azureus_exec_t了。 H8KLinux联盟
[root@python policy]# ls -lZ /home/fu/azureus/ H8KLinux联盟
-rwxr-xr-x fu fu user_u:object_r:azureus_exec_t azureus H8KLinux联盟
-rw-r--r-- fu fu user_u:object_r:user_home_t Azureus2.jar H8KLinux联盟
接下来退出ROOT用户,以用户fu登录,运行azureus命令。 H8KLinux联盟
[root@python azureus]# ps -efZ|grep azureus H8KLinux联盟
user_u:user_r:azureus_t fu 8703 8647 0 23:23 pts/1 00:00:00 /bin/bash ./azureus H8KLinux联盟
user_u:user_r:azureus_t fu 8717 8703 4 23:24 pts/1 00:01:29 java -Djava.ext.dirs=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/lib/ext -Xms16m -Xmx128m -cp /home/fu/azureus/Azureus2.jar:/home/fu/azureus/swt.jar -Djava.library.path=/home/fu/azureus -Dazureus.install.path=/home/fu/azureus org.gudy.azureus2.ui.swt.Main H8KLinux联盟
user_u:user_r:user_t root 9347 1956 0 23:59 pts/2 00:00:00 grep azureus H8KLinux联盟
H8KLinux联盟
高兴吧! 成功了。 H8KLinux联盟
在这里我只是演示如何让domain迁移,至于azureus的严格的access vector的设置我都忽略了。 H8KLinux联盟
5.3 给自己增加个专用的ROLE H8KLinux联盟
在这里我们要增加一个叫madia的ROLE,在追加时要对一些文件进行修改。 H8KLinux联盟
5.3.1 /etc/selinux/refpolicy/src/policy/policy/modules/kernel下的文件修改 H8KLinux联盟
1) kernel.te H8KLinux联盟
[root@python kernel]# vi kernel.te H8KLinux联盟
在role user_r 的下面加上一行 H8KLinux联盟
role madia_r; H8KLinux联盟
2) domain.te H8KLinux联盟
[root@python kernel]# vi domain.te H8KLinux联盟
在 role user_r types domain; 的下面加上一行 H8KLinux联盟
role madia_r type domain; H8KLinux联盟
5.3.2 /etc/selinux/refpolicy/src/policy/policy/modules/system下的文件修改 H8KLinux联盟
[root@python system]# vi userdomain.te H8KLinux联盟
在第5行追加madia_r,如下所示: H8KLinux联盟
role sysadm_r, staff_r, user_r,madia_r; H8KLinux联盟
在unpriv_user_template(user)下面加上下面的一行。 H8KLinux联盟
unpriv_user_template(madia) H8KLinux联盟
5.3.3 /etc/selinux/refpolicy/src/policy/policy下的文件修改 H8KLinux联盟
1)user H8KLinux联盟
users和策略1.X里的users差不多。定义用户能利用的ROLE。 H8KLinux联盟
[root@python policy]# vi users H8KLinux联盟
gen_user(madia, madia, madia_r, s0, s0) H8KLinux联盟
2)rolemap H8KLinux联盟
[root@python policy]# vi rolemap H8KLinux联盟
在user_r user user_t下面加上一行 H8KLinux联盟
madia_r madia madia_t H8KLinux联盟
5.3.4 重新make 策略 H8KLinux联盟
[root@python policy]# make load H8KLinux联盟
5.3.5 /etc/selinux/refpolicy/seusers 文件的修改 H8KLinux联盟
Seusers是系统一般用户和SELinux的用户映射。 H8KLinux联盟
[root@python refpolicy]# vi seusers H8KLinux联盟
madia:madia H8KLinux联盟
5.3.6 /etc/selinux/refpolicy/contexts下的文件修改 H8KLinux联盟
1)default_type H8KLinux联盟
决定用户登录时的默认ROLE。 H8KLinux联盟
[root@python refpolicy]# vi contexts/default_type H8KLinux联盟
madia_r:madia_t H8KLinux联盟
2)default_contexts H8KLinux联盟
决定用户登录时的默认security context H8KLinux联盟
[root@python refpolicy]# vi contexts/default_contexts H8KLinux联盟
system_r:local_login_t madia_r:madia_t staff_r:staff_t user_r:user_t sysadm_r:sysadm_t H8KLinux联盟
5.3.7 以madia用户重新登录 H8KLinux联盟
最后以用户madia登录,查看是不是 进入madia_t了。 H8KLinux联盟
[madia@python ~]$ id H8KLinux联盟
uid=501(madia) gid=501(madia) groups=501(madia) context=madia:madia_r:madia_t H8KLinux联盟
以上我们可以看出,madia用户确实是进入了madia_t 运行了。 H8KLinux联盟
我们在以上的操作中,实际上还有修改遗漏的地方,每当重新make的时候,seusers都会回到原来的设定,有兴趣的朋友可以自己找出哪里还需要修改。 H8KLinux联盟
6.最后 H8KLinux联盟
我们现在主要还是targeted策略,因为我们的服务器,基本上也就跑apache,postgresql,tomcat,bind,postfix这几个服务。Targeted能够保护它。我们的目标是将一些影响比较小的,服务比较单一的服务器移植到能运行strict策略的服务器上。当然,即使我们用SELinux,对于系统的安全也不能掉以轻心,认为有了SELinux就100%安全。 H8KLinux联盟
比如targeted里有unconfined_t,任何在这个domain里运行的都是不被保护的。还有,系统管理员对TE的设置错误造成不能很好的保护,还内核的漏洞,Dos攻击等,SELinux也是无能为力的。 H8KLinux联盟
除了SELinux外,还有LIDS ,TOMOYO LINUX,AppArmor等安全操作系统。大家对LIDS和AppArmor有可能比较熟悉,TOMOYO是 日本NTT数据公司开发的。也许有朋友在选择的时候不知道该用那个好。 H8KLinux联盟
安全级别高<----------------------------------->易用性高 H8KLinux联盟
SELINUX >> TOMOYO >> LIDS >> AppArmor H8KLinux联盟
H8KLinux联盟
个人觉得,SELinux虽然配置起来麻烦了点,但是能达到军事安全级别,要玩的就话,还是SELinux有魅力。 H8KLinux联盟
现在也有人在开发策略的GUI编辑器,如SEEDIT,是日本日立软件工程公司的一个叫中村雄一为中心开发的。有了这些GUI的工具,将来定制策略会越来越容易的。 H8KLinux联盟
H8KLinux联盟
本人近10年没用中文写东西了,有不对的地方请多多包涵! H8KLinux联盟
<参考> H8KLinux联盟
1.http://danwalsh.livejournal.com/ H8KLinux联盟
2.http://d.hatena.ne.jp/himainu/ H8KLinux联盟
3.http://seedit.sourceforge.net/ H8KLinux联盟
4.http://www.linuxtopia.org/online_books/linux_security_index.html H8KLinux联盟

 原文地址 http://www.linuxforum.net/docnew/showflat.php?Board=new&Number=1009
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·SELinux中的Apache和MySQL设定  (2006-08-15 10:12:02)
 ·从头开始生成 SELinux  (2006-07-05 16:18:12)
 ·解决新的SELinux安全级别产生问题  (2005-12-24 11:51:36)
 ·从安装好的gentoo转换到gentoo selinux  (2005-12-24 11:48:18)
 ·SELinux Introduce - SELinux技术简介  (2005-12-24 11:47:41)