0
回答
SELinux 入门
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

本文 讲述的系统安全模块SeLinux,为初学者详细介绍了SeLinux的特点以及配置过程。

1.背景

SELinux是 「Security-Enhanced&nbspLinux」的简称,是美国国家安全局 「NSA=The&nbspNational&nbspSecurity&nbspAgency」 和 SCC(Secure&nbspComputing&nbspCorporation)开发的&nbspLinux的一个扩张强 制访问控制安全模块。原先是在Fluke上开发的,2000年以&nbspGNU&nbspGPL 发布。

现在以 Linux作为因特网服务器是越来越普遍的事了。在我这几年作过的项目里,WEB的开发基本都是基于Linux的,这里有给大公司做的,也给政府部门做 的,当然更多的是中小企业做的。这其中给政府做的,我们把SELinux作为一个卖点,接受了不少项目。

2.我们需要安全操作系统的理由

现 在不论是政府还是民间企业,大家对信息安全问题是越来越关心了,因为企业的业务平台的服务器上存储着大量的商务机密,个人资料,个人资料它直接关系到个人 的隐私问题。特别是我们政府的网站,作为信息公开的平台,它的安全就更显得重要了。这些连到互联网的服务器,不可避免的要受到来自世界各地的各种威胁。最 坏的时候我们的服务器被入侵,主页文件被替换,机密文件被盗走。除了来自外部的威胁外,内部人员的不法访问,攻击也是不可忽视的。对于这些攻击或者说是威 胁,当然有很多的办法,有防火墙,入侵检测系统,打补丁等等。因为Linux也和其他的商用UNIX一样,不断有各类的安全漏洞被发现。我们对付这些漏洞 不得不花很多的人力来堵住它。在这些手段之中,提高OS系统自身的牢固性就显得非常的重要。

2.1传统的 Linux&nbspOS的不足之处

虽然Linux 比起&nbspWindows 来说,它的可靠性,稳定定要好得 多,但是他也是和其他的UNIX 一样,有以下这些不足之处。
1)存在特权用户root
任何人只要得到root的权限,对于整个系统 都可以为所欲为。这一点Windows也一样。
2)对于文件的访问权的划分不够细
在linux系统里,对于文件的操作,只有「所有 者」,「所有组」,「其他」这3类的划分。
对于「其他」这一类里的用户再细细的划分的话就没有办法了。
3)SUID程序的权限升级
如果设置了SUID权限的程序有了漏洞的话,很容易被攻击者所利用。
4)DAC(Discretionary&nbspAccess&nbspControl) 问题
文件目录的所有者可以对文件进行所有的操作,这给系统整体的管理带来不便。

对于以上这些的不足,防火墙,入侵检测系统都 是无能为力的。
在这种背景下,对于访问权限大幅强化的OS&nbspSELinux来说,它的魅力的无穷的。

2.2&nbspSELinux 的优点

SELinux系统比起通常的Linux系统来,安全性能要高的多,它通过对于用户,进程权限的最小化,即使受到攻击,进程或者用 户权限被夺去,也不会对整个系统造成重大影响。

接下来我来介绍SELinux的一些特点。

特点 1:MAC(Mandatory&nbspAccess&nbspControl)―――对访问的控制彻底化

对于所有的 文件,目录,端口这类的资源的访问,都可以是基于策略设定的,这些策略是由管理员定制的、一般用户是没有权限更改的。

特点 2:&nbspTE (Type&nbspEnforcement)――― 对于进程只付与最小的权限

Te概念 在&nbspSELinux里非常的重要。它的特点是对所有的文件都赋予一个叫type的文件类型标签,对于所有的进程也赋予各自的一个 叫&nbspdomain的 标签。Domain标签能够执行的操作也是由access&nbspvector在策略里定好的。
我 们熟悉的apache服务器,httpd进程只能在httpd_t 里运行,这个httpd_t 的domain能执行的操作,比如能读网页内容文件赋予 httpd_sys_content_t, 密码文件赋予shadow_t,&nbspTCP的80端口赋 予&nbsphttp_port_t等等。如果在access&nbspvector里我们不允许&nbsphttp_t来对 http_port_t进行操作的花,Apache启动都启动不了。反过来说,我们只允许80端口,只允许读取被标 为&nbsphttpd_sys_content_t的文件,httpd_t就不能用别的端口,也不能更改那些被标为 httpd_sys_content_t的文件(read&nbsponly)。

特点3: domain迁移 ―― 防止权限升 级

在用户环境里运行点对点下载软件azureus,你当前的domain是fu_t, 但是,你考虑到安全问题,你打算让他在 azureus_t里运行,你要是在terminal里用命令启动azureus的话,它的进程的domain就会默认继承你实行的shell的 fu_t。
有了domain迁移的话,我们就可以让azureus在我们指定的azureus_t里运行,在安全上面,这种做法更可取,它不会影 响到你的fu_t。

下面是domain迁移指示的例子:
domain_auto_trans(fu_t,&nbspazureus_exec_t,&nbspazureus_t)

意 思就是,当在&nbspfu_t&nbspdomain里,实行了 被标为&nbspazureus_exec_t的文件 时,domain 从fu_t迁移到&nbspazureus_t 。下面是Apache启动的迁移图。注意了,因为从哪一个domain能迁移 到httpd_t是在策略里定好了,所以要是我们手动 (/etc/init.d/httpd&nbspstart)启动apache的话,可能 仍然留在sysadm_t里,这样就不能完成正确的迁移。要用run_init命令来手动启动。

特点 4:&nbspRBAC(role&nbspbase&nbspaccess&nbspcontrol) ――――― 对 于用户只付与最小的权限

对于用户来说,被划分成一些ROLE,即使是ROOT用户,你要是不在sysadm_r里,也还是不能实行 sysadm_t管理操作的。因为,那些ROLE可以执行那些domain也是在策略里设定的。ROLE也是可以迁移的,但是也只能安策略规定的迁移。

3. 控 制切换

从fedora&nbspcore&nbsp2开始,&nbsp2.6内核的版本都支持selinux. 我们看看&nbspFedora&nbspcore&nbsp5 里的/etc/sysconfig/selinux标准设定 吧。

#&nbspThis&nbspfile&nbspcontrols&nbspthe&nbspstate&nbspof&nbspSELinux&nbspon&nbspthe&nbspsystem.
#&nbspSELINUX=&nbspcan&nbsptake&nbspone&nbspof&nbspthese&nbspthree values:
#&nbspenforcing&nbsp-&nbspSELinux&nbspsecurity&nbsppolicy&nbspis&nbspenforced.
#&nbsppermissive&nbsp-&nbspSELinux&nbspprints&nbspwarnings&nbspinstead&nbspof&nbspenforcing.
#&nbspdisabled&nbsp-&nbspSELinux&nbspis&nbspfully&nbspdisabled.
SELINUX=enforcing
#SELINUX=disabled
#&nbspSELINUXTYPE=&nbsptype&nbspof&nbsppolicy&nbspin&nbspuse.&nbspPossible values&nbspare:
#&nbsptargeted&nbsp-&nbspOnly&nbsptargeted&nbspnetwork&nbspdaemons&nbspare&nbspprotected.
#&nbspstrict&nbsp-&nbspFull&nbspSELinux&nbspprotection.
SELINUXTYPE=targeted

SELINUX 有「disabled」「permissive」,「enforcing」3种选择。

Disabled就不用说了,permissive 就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来。在我们开发策略的时候非常的有用。相当于Debug模 式。
Enforcing就是你违反了策略,你就无法继续操作下去。

SELINUXTYPE呢,现在主要有2大类,一类就是红帽子 开发的targeted,它只是对于,主要的网络服务进行保护,比 如&nbspapache ,sendmail,&nbspbind,postgresql等,不属于那些domain的就都让他们在 unconfined_t里,可导入性高,可用性好但是不能对整体进行保护。
另一类是Strict,是NAS开发的,能对整个系统进行保护,但是 设定复杂,我认为虽然它复杂,但是一些基本的会了,还是可以玩得动的。

我们除了在/etc/sysconfig/selinux设它有效 无效外,在启动的时候,也可以通过传递参数selinux给内核来控制它。(Fedora&nbsp5默认是有效)

kernel /boot/vmlinuz-2.6.15-1.2054_FC5&nbspro&nbsproot=LABEL=/&nbsprhgb&nbspquiet&nbspselinux=0
上 面的变更可以让它无效。

[root@python&nbspsysconfig]# /usr/sbin/getenforce
Enforcing
确 认有效后重新对文件系统赋予标签:
[root@python&nbspsysconfig]# /sbin/fixfiles&nbsprelabel
或 者
[root@python /]#&nbsptouch /.autorelabel
然后&nbspreboot , 你就在secure的Linux环境下工作了。

4.&nbspSELinux的基本操作

SELinux是个经过 安全强化的Linux操作系统,实际上,基本上原来的运用软件没有必要修改就能在它上面运行。真正做了特别修改的RPM包只要50多个。像文件系统 EXT3都是经过了扩展。对于一些原有的命令也进行了扩展,另外还增加了一些新的命令,接下来我们就来看看这些命令。

4.1 文件操作

1)ls 命令
在命令后加个 -Z 或者加 –context
[root@python&nbspazureus]#&nbspls&nbsp-Z
-rwxr-xr-x&nbspfu&nbspfu&nbspuser_u:object_r:user_home_t&nbspazureus
-rw-r--r--&nbspfu&nbspfu&nbspuser_u:object_r:user_home_t&nbspAzureus2.jar
-rw-r--r--&nbspfu&nbspfu&nbspuser_u:object_r:user_home_t&nbspAzureus.png

2)chcon
更 改文件的标签
[root@python&nbsptmp]#&nbspls&nbsp--context&nbsptest.txt
-rw-r--r--&nbsproot&nbsproot&nbsproot:object_r:staff_tmp_t&nbsptest.txt

[root@python&nbsptmp]#&nbspchcon&nbsp-t&nbspetc_t&nbsptest.txt
[root@python&nbsptmp]#&nbspls&nbsp-lZ&nbsptest.txt
-rw-r--r--&nbsproot&nbsproot&nbsproot:object_r:etc_t&nbsptest.txt

3)restorecon
当 这个文件在策略里有定义是,可以恢复原来的 文件标签。

4)setfiles
跟chcon一样可以更改一部分文件的标签,不需要 对整个文件系统重新设定标签。

5)fixfiles
一般是对整个文件系统的, 后面一般跟&nbsprelabel,对 整个系统&nbsprelabel后,一般我们都重新启动。如果,在根目录下有.autorelabel空文件的话,每次重新启动时都调 用&nbspfixfiles&nbsprelabel

6)star
就是tar在SELinux下的互换命令, 能把文件的标签也一起备份起来。

7)cp
可以跟&nbsp-Z,&nbsp-- context=CONTEXT 在拷贝的时候指定目的地文件的security&nbspcontext

8)find
可 以跟 –context 查特定的type的文件。
例子:
find /home/fu/&nbsp--context&nbspfu:fu_r:amule_t&nbsp-exec&nbspls&nbsp-Z {} :

9)run_init
在 sysadm_t里手动启动一些如Apache之类的程序,也可以让它正常进行,domain迁移。

4.2 进程domain的确认

程 序现在在那个domain里运行,我们可以在ps 命令后加 -Z

[root@python /]#&nbspps&nbsp-eZ
LABEL&nbspPID&nbspTTY&nbspTIME&nbspCMD
system_u:system_r:init_t&nbsp1 ?&nbsp00:00:00&nbspinit
system_u:system_r:kernel_t&nbsp2 ?&nbsp00:00:00&nbspksoftirqd/0
system_u:system_r:kernel_t&nbsp3 ?&nbsp00:00:00&nbspwatchdog/0

4.3&nbspROLE 的确认和变更

命令id能用来确认自己的&nbspsecurity&nbspcontext

[root@python ~]#&nbspid
uid=0(root)&nbspgid=0(root)&nbspgroups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)&nbspcontext=root:staff_r:staff_t
这 里,虽然是ROOT用户,但也只是在一般的ROLE和staff_t里运行,如果在enforcing模式下,这时的ROOT对于系统管理工作来说,是什 么也干不了。

[root@python ~]#&nbspnewrole&nbsp-r&nbspsysadm_r
Authenticating&nbsproot.
口 令:
[root@python ~]#&nbspid
uid=0(root)&nbspgid=0(root)&nbspgroups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)&nbspcontext=root:sysadm_r:sysadm_t

4.4 模 式切换

1)getenforce
得到当前的SELINUX值
[root@python&nbspbin]#&nbspgetenforce
Permissive

2)setenforce
更 改当前的SELINUX值 ,后面可以跟&nbspenforcing,permissive 或 者&nbsp1,&nbsp0。
[root@python&nbspbin]#&nbspsetenforce&nbsppermissive

3)sestatus
显 示当前的&nbspSELinux的信息

[root@python&nbspbin]#&nbspsestatus&nbsp-v
SELinux&nbspstatus:&nbspenabled
SELinuxfs&nbspmount: /selinux
Current&nbspmode:&nbsppermissive
Mode&nbspfrom&nbspconfig&nbspfile:&nbsppermissive
Policy&nbspversion:&nbsp20
Policy&nbspfrom&nbspconfig&nbspfile:&nbsprefpolicy

Process&nbspcontexts:
Current&nbspcontext:&nbspuser_u:user_r:user_t
Init&nbspcontext:&nbspsystem_u:system_r:init_t
/sbin/mingetty&nbspsystem_u:system_r:getty_t
/usr/sbin/sshd&nbspsystem_u:system_r:sshd_t

File&nbspcontexts:
Controlling&nbspterm:&nbspuser_u:object_r:user_devpts_t
/etc/passwd&nbspsystem_u:object_r:etc_t
/etc/shadow&nbspsystem_u:object_r:shadow_t
/bin/bash&nbspsystem_u:object_r:shell_exec_t
/bin/login&nbspsystem_u:object_r:login_exec_t
/bin/sh&nbspsystem_u:object_r:bin_t&nbsp->&nbspsystem_u:object_r:shell_exec_t
/sbin/agetty&nbspsystem_u:object_r:getty_exec_t
/sbin/init&nbspsystem_u:object_r:init_exec_t
/sbin/mingetty&nbspsystem_u:object_r:getty_exec_t

4.5 其 他重要命令

1)Audit2allow
很重要的一个以python写的命令,主要用来处理日志,把日志中的违反策略的动作的记 录,转换成&nbspaccess&nbspvector,对开发安全策略非常有用。在refpolicy里,它的功能比以前有了很大的 扩展。
[root@python&nbsplog]#&nbspcat&nbspdmesg |&nbspaudit2allow&nbsp-m&nbsplocal >&nbsplocal.te

2)checkmodule&nbsp- m&nbsp-o&nbsplocal.mod&nbsplocal.te
编译模块
[root@python&nbsplog]#&nbspcheckmodule&nbsp-m&nbsp-o&nbsplocal.mod&nbsplocal.te
checkmodule:&nbsploading&nbsppolicy&nbspconfiguration&nbspfrom&nbsplocal.te
checkmodule:&nbsppolicy&nbspconfiguration&nbsploaded
checkmodule:&nbspwriting&nbspbinary&nbsprepresentation (version&nbsp5)&nbspto&nbsplocal.mod

3)semodule_package
创 建新的模块
[root@python&nbsplog]#&nbspsemodule_package&nbsp-o&nbsplocal.pp&nbsp-m&nbsplocal.mod

4)semodule
可 以显示,加载,删除 模块
加载的例子:
[root@python&nbsplog]#&nbspsemodule&nbsp-i&nbsplocal.pp

5)semanage
这 是一个功能强大的策略管理工具,有了它即使没有策略的源代码,也是可以管理安全策略的。因为我主要是介绍用源代码来修改策略的,详细用法大家可以参考它的 man页。

5. 定制策略

FC4,RHEL4等都是采用策略1.X版本的,并且是提供策略源代码的RPM包。从FC5开 始策略的版本从1.X 升级到2.X。2.X版本的refpolicy(reference&nbsppolicy)最大的一个变化就是引进模块 (module)这个概念, 同一套策略源代码就可以支持Multi-LevelSecurity(MLS)和non-MLS。

http://serefpolicy.sf.net/
标准的 FC5里不提供源代码的RPM包。FC5提供的audit2allow,semanage,semodule也是可以开发一些简单的策略模块的。但是,要 是作策略模块的开发,增加一个ROLE之类的,最好还是下载refpolicy的源代码。

5.1 策略源文件的安装

从 CVS服务器下载的源代码是最新的,如果遇到象make的时候出错,那么最好就是把你系统里和SELinux有关的那些包更新到最新的状态。
从 source&nbspForge的CVS服务器下载源代码

[root@python&nbspsrc]#&nbspcd /usr/local/src
[root@python&nbspsrc]#&nbspcvs&nbsp-d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/serefpolicy&nbsplogin
[root@python&nbspsrc]#&nbspcvs&nbsp-z3&nbsp-d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/serefpolicy&nbspco&nbsp-P&nbsprefpolicy

[root@python&nbspsrc]#&nbspcd&nbsprefpolicy/

[root@python&nbspsrc]#&nbspmake&nbspinstall-src

安 装好了的源代码目录结构如下图所示:

每一个模块有3个文件构成,比如上图的sudo.fc 就是和 命令sudo相关的文件的定义标签, (file&nbspcontext&nbsprabel),sudo.te是Type&nbspEnforcement定义, 包括TE访问规则等,sudo.if是一个外部模块调用这个模块的接口定义。

[root@python&nbspsrc]#&nbspcd /etc/selinux/refpolicy/src/policy
[root@python&nbsppolicy]#&nbspcp&nbspbuild.conf&nbspbuild.conf.org
[root@python&nbsppolicy]#&nbspvi&nbspbuild.conf
[root@python&nbsppolicy]#&nbspdiff&nbspbuild.conf&nbspbuild.conf.org
32c32
<&nbspDISTRO =&nbspredhat
---
> #DISTRO =&nbspredhat
43c43
<&nbspMONOLITHIC=n
---
>&nbspMONOLITHIC=y
[root@python&nbspsrc]#&nbspmake&nbspconf
[root@python&nbspsrc]#&nbspmake

这 样,在/etc/selinux/refpolicy/src/policy下生成很多的以pp为后缀的文件,这些就是SELinux模块。接下来我们修 改/etc/sysconfig/selinux,设成SELINUXTYPE=refpolicy,然后reboot.

启动后,确认策 略的适用情况, 现在的版本是20。
[fu@python ~]$ /usr/sbin/sestatus
SELinux&nbspstatus:&nbspenabled
SELinuxfs&nbspmount: /selinux
Current&nbspmode:&nbsppermissive
Mode&nbspfrom&nbspconfig&nbspfile:&nbsppermissive
Policy&nbspversion:&nbsp20
Policy&nbspfrom&nbspconfig&nbspfile:&nbsprefpolicy

5.2 给 程序定制domain

开发程序策略的一般步骤
1.给文件,端口之类的object赋予type 标签
2.设 置&nbspType&nbspEnforcement (Domain 迁移,访问许可)
3.策略加载
4.permissive 模式下运行程序
5.确认日志,用audit2allow生成访问许可
6.重复1,2,3,4,5动作,直到没有违反的日志出现
7. 切换到enforcing模式,正式运用

因为我们所常用的那些服务的策略模块都已经有了,修改的时候也比较简单。在这里我就举个一般的例 子。用点对点下载的朋友估计都跟我一样,在Linux上用&nbspazureus,Amule来下载东西吧。

接下来以 azureus为例,介召如何在FC5里追加一个azureus.pp模块。我们在追加azureus.pp模块之前,azureus是在系统给用户设好 的user_t&nbspdomain里运行。

[fu@python&nbspazureus]$&nbspps&nbsp-efZ|grep&nbspazureus
user_u:user_r:user_t&nbspfu&nbsp1751&nbsp1732&nbsp0&nbsp22:28&nbsppts/3&nbsp00:00:00 /bin/bash&nbsp./azureus
接 下来我们在追加3个文件。

1)azureus.fc
在这里我只定义一个文件,实际要是真的用的,还要定义azureus_t能写 的目录等。
[root@python&nbspapps]#&nbspmore&nbspazureus.fc
/home/fu/azureus&nbsp--&nbspgen_context(user_u:object_r:azureus_exec_t,s0)

2)azureus.te
[root@python&nbspapps]#&nbspmore&nbspazureus.te
policy_module(azureus,1.0.0)
type&nbspazureus_t;
type&nbspazureus_exec_t;
role&nbspuser_r&nbsptypes&nbspazureus_t;
require {
type&nbspuser_t;
};
domain_type(azureus_t)
domain_entry_file(azureus_t,&nbspazureus_exec_t)
domain_auto_trans(user_t,&nbspazureus_exec_t,&nbspazureus_t)

3)azureus.if
实 际上没有别的模块要调用azureus,所以这个文件就是空文件也不要紧。
[root@python&nbspapps]#&nbspmore&nbspazureus.if
#&nbsppolicy/modules/apps/azureus.if
##&nbspMyapp&nbspexample&nbsppolicy
##
##&nbspExecute&nbspa&nbspdomain&nbsptransition&nbspto&nbsprun&nbspazureus.
##
##
##&nbspDomain&nbspallowed&nbspto&nbsptransition.
##
interface(`azureus_domtrans',`
gen_requires(`
type&nbspazureus_t,&nbspazureus_exec_t;
')
domain_auto_trans($1,azureus_exec_t,azureus_t)
allow $1&nbspazureus_t:fd&nbspuse;
allow&nbspazureus_t $1:fd&nbspuse;
allow $1&nbspazureus_t:fifo_file&nbsprw_file_perms;
allow $1&nbspazureus_t:process&nbspsigchld;
')
在 /etc/selinux/refpolicy/src/policy/policy/module.conf 里加入下面一行
[root@python&nbsppolicy]#&nbsptail&nbsp-1&nbspmodules.conf
azureus =&nbspmodule

确 认/etc/selinux/refpolicy/src/policy里MONOLITHIC=n
最后 make ,&nbspmake&nbspload

[root@python&nbsppolicy]#&nbsppwd
/etc/selinux/refpolicy/src/policy
[root@python&nbsppolicy]#&nbspmake;make&nbspload

正 常终了后,我们可以用&nbspsemodule命令来确认&nbspazureus.pp下载下去了没有。

[root@python&nbsppolicy]#&nbspsemodule&nbsp-l |grep&nbspazureus
azureus&nbsp1.0.0

看 样子是没有问题。好了我们再看看 /home/fu/azureus/azureus的security&nbspcontext,我们刚才在 azureus.fc里是期望它是&nbspuser_u:object_r:azureus_exec_t ,可是它这个时候还是继承了默认 的&nbspuser_u:object_r:user_home_t ,如果不是我们期望的文件标签的话,domain是无法从user_t迁 移到azureus_t的,因为relabel的话,会对整个文件系统进行重新设标签,很花时间,所以我们用在上面介绍过文件标签更改的命令chcon命 令来改标签。

[root@python&nbspazureus]#&nbspchcon&nbsp-t&nbspazureus_exec_t&nbspazureus
再 看看这次的新标签,果然如我们期望的,变成azureus_exec_t了。

[root@python&nbsppolicy]#&nbspls&nbsp-lZ /home/fu/azureus/
-rwxr-xr-x&nbspfu&nbspfu&nbspuser_u:object_r:azureus_exec_t&nbspazureus
-rw-r--r--&nbspfu&nbspfu&nbspuser_u:object_r:user_home_t&nbspAzureus2.jar

接 下来退出ROOT用户,以用户fu登录,运行azureus命令。

[root@python&nbspazureus]#&nbspps&nbsp-efZ|grep&nbspazureus
user_u:user_r:azureus_t&nbspfu&nbsp8703&nbsp8647&nbsp0&nbsp23:23&nbsppts/1&nbsp00:00:00 /bin/bash&nbsp./azureus
user_u:user_r:azureus_t&nbspfu&nbsp8717&nbsp8703&nbsp4&nbsp23:24&nbsppts/1&nbsp00:01:29&nbspjava&nbsp-Djava.ext.dirs=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/lib/ext&nbsp-Xms16m&nbsp-Xmx128m&nbsp-cp /home/fu/azureus/Azureus2.jar:/home/fu/azureus/swt.jar&nbsp-Djava.library.path=/home/fu/azureus&nbsp-Dazureus.install.path=/home/fu/azureus&nbsporg.gudy.azureus2.ui.swt.Main
user_u:user_r:user_t&nbsproot&nbsp9347&nbsp1956&nbsp0&nbsp23:59&nbsppts/2&nbsp00:00:00&nbspgrep&nbspazureus

高 兴吧! 成功了。
在这里我只是演示如何让domain迁移,至于azureus的严格的access&nbspvector的设置我都忽 略了。

5.3 给自己增加个专用的ROLE

在这里我们要增加一个叫madia的ROLE,在追加时要对一些文件进行修 改。

5.3.1 /etc/selinux/refpolicy/src/policy/policy/modules/kernel下 的文件修改

1)&nbspkernel.te
[root@python&nbspkernel]#&nbspvi&nbspkernel.te
在 role&nbspuser_r 的下面加上一行
role&nbspmadia_r;

2)&nbspdomain.te
[root@python&nbspkernel]#&nbspvi&nbspdomain.te
在&nbsprole&nbspuser_r&nbsptypes&nbspdomain; 的 下面加上一行
role&nbspmadia_r&nbsptype&nbspdomain;

5.3.2 /etc /selinux/refpolicy/src/policy/policy/modules/system下的文件修改

[root@python&nbspsystem]#&nbspvi&nbspuserdomain.te
在 第5行追加madia_r,如下所示:
role&nbspsysadm_r,&nbspstaff_r,&nbspuser_r,madia_r;
在 unpriv_user_template(user)下面加上下面的一行。
unpriv_user_template(madia)

5.3.3 /etc /selinux/refpolicy/src/policy/policy下的文件修改

1)user
users和策略1.X里 的users差不多。定义用户能利用的ROLE。
[root@python&nbsppolicy]#&nbspvi&nbspusers
gen_user(madia,&nbspmadia,&nbspmadia_r,&nbsps0,&nbsps0)

2)rolemap
[root@python&nbsppolicy]#&nbspvi&nbsprolemap
在 user_r&nbspuser&nbspuser_t下面加上一行
madia_r&nbspmadia&nbspmadia_t

5.3.4 重 新make 策略

[root@python&nbsppolicy]#&nbspmake&nbspload

5.3.5 /etc /selinux/refpolicy/seusers 文件的修改

Seusers是系统一般用户和SELinux的用户映射。
[root@python&nbsprefpolicy]#&nbspvi&nbspseusers
madia:madia

5.3.6 /etc /selinux/refpolicy/contexts下的文件修改

1)default_type
决定用户登录时的默认 ROLE。
[root@python&nbsprefpolicy]#&nbspvi&nbspcontexts/default_type
madia_r:madia_t

2)default_contexts
决 定用户登录时的默认security&nbspcontext
[root@python&nbsprefpolicy]#&nbspvi&nbspcontexts/default_contexts
system_r:local_login_t&nbspmadia_r:madia_t&nbspstaff_r:staff_t&nbspuser_r:user_t&nbspsysadm_r:sysadm_t

5.3.7 以 madia用户重新登录

最后以用户madia登录,查看是不是 进入madia_t了。
[madia@python ~]$&nbspid
uid=501(madia)&nbspgid=501(madia)&nbspgroups=501(madia)&nbspcontext=madia:madia_r:madia_t
以 上我们可以看出,madia用户确实是进入了madia_t 运行了。
我们在以上的操作中,实际上还有修改遗漏的地方,每当重新make的时 候,seusers都会回到原来的设定,有兴趣的朋友可以自己找出哪里还需要修改。

6.最后

我们现在主要还是 targeted策略,因为我们的服务器,基本上也就跑apache,postgresql,tomcat,bind,postfix这几个服务。 Targeted能够保护它。我们的目标是将一些影响比较小的,服务比较单一的服务器移植到能运行strict策略的服务器上。当然,即使我们用 SELinux,对于系统的安全也不能掉以轻心,认为有了SELinux就100%安全。

比如targeted里有 unconfined_t,任何在这个domain里运行的都是不被保护的。还有,系统管理员对TE的设置错误造成不能很好的保护,还内核的漏洞,Dos 攻击等,SELinux也是无能为力的。

除了SELinux外,还有 LIDS ,TOMOYO&nbspLINUX,AppArmor等安全操作系统。大家对LIDS和AppArmor有可能比较熟 悉,TOMOYO是 日本NTT数据公司开发的。也许有朋友在选择的时候不知道该用那个好。

安全级别 高<----------------------------------->易用性高

SELINUX >>&nbspTOMOYO >>&nbspLIDS >>&nbspAppArmor

个 人觉得,SELinux虽然配置起来麻烦了点,但是能达到军事安全级别,要玩的就话,还是SELinux有魅力。
现在也有人在开发策略的GUI编 辑器,如SEEDIT,是日本日立软件工程公司的一个叫中村雄一为中心开发的。有了这些GUI的工具,将来定制策略会越来越容易的。

举报
红薯
发帖于9年前 0回/889阅
顶部