linux配置selinux为许可模式,Selinux配置详解

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

启动后,确认策略的适用情况, 现在的版本是20。

[fu@python ~]$ /usr/sbin/sestatus

SELinux status: enabled

SELinuxfs mount: /selinux

Current mode: permissive

Mode from config file: permissive

Policy version: 20

Policy from config file: refpolicy

5.2给程序定制domain

开发程序策略的一般步骤

1.给文件,端口之类的object赋予type 标签

2.设置 Type Enforcement (Domain 迁移,访问许可)

3.策略加载

4.permissive模式下运行程序

5.确认日志,用audit2allow生成访问许可

6.重复1,2,3,4,5动作,直到没有违反的日志出现

7.切换到enforcing模式,正式运用

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

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

[fu@python azureus]$ ps -efZ|grep azureus

user_u:user_r:user_t fu 1751 1732 0 22:28 pts/3 00:00:00 /bin/bash ./azureus

接下来我们在追加3个文件。

1)azureus.fc

在这里我只定义一个文件,实际要是真的用的,还要定义azureus_t能写的目录等。

[root@python apps]# more azureus.fc

/home/fu/azureus -- gen_context(user_u:object_r:azureus_exec_t,s0)

2)azureus.te

[root@python apps]# more azureus.te

policy_module(azureus,1.0.0)

type azureus_t;

type azureus_exec_t;

role user_r types azureus_t;

require {

type user_t;

};

domain_type(azureus_t)

domain_entry_file(azureus_t, azureus_exec_t)

domain_auto_trans(user_t, azureus_exec_t, azureus_t)

3)azureus.if

实际上没有别的模块要调用azureus,所以这个文件就是空文件也不要紧。

[root@python apps]# more azureus.if

# policy/modules/apps/azureus.if

## Myapp example policy

##

## Execute a domain transition to run azureus.

##

##

## Domain allowed to transition.

##

interface(`azureus_domtrans',`

gen_requires(`

type azureus_t, azureus_exec_t;

')

domain_auto_trans($1,azureus_exec_t,azureus_t)

allow $1 azureus_t:fd use;

allow azureus_t $1:fd use;

allow $1 azureus_t:fifo_file rw_file_perms;

allow $1 azureus_t:process sigchld;

')

在/etc/selinux/refpolicy/src/policy/policy/module.conf 里加入下面一行

[root@python policy]# tail -1 modules.conf

azureus = module

确认/etc/selinux/refpolicy/src/policy里MONOLITHIC=n

最后make , make load

[root@python policy]# pwd

/etc/selinux/refpolicy/src/policy

[root@python policy]# make;make load

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

[root@python policy]# semodule -l |grep azureus

azureus 1.0.0

看样子是没有问题。好了我们再看看 /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命令来改标签。

[root@python azureus]# chcon -t azureus_exec_t azureus

再看看这次的新标签,果然如我们期望的,变成azureus_exec_t了。

[root@python policy]# ls -lZ /home/fu/azureus/

-rwxr-xr-x fu fu user_u:object_r:azureus_exec_t azureus

-rw-r--r-- fu fu user_u:object_r:user_home_t Azureus2.jar

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

[root@python azureus]# ps -efZ|grep azureus

user_u:user_r:azureus_t fu 8703 8647 0 23:23 pts/1 00:00:00 /bin/bash ./azureus

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

user_u:user_r:user_t root 9347 1956 0 23:59 pts/2 00:00:00 grep azureus

高兴吧! 成功了。

在这里我只是演示如何让domain迁移,至于azureus的严格的access vector的设置我都忽略了。

5.3 给自己增加个专用的ROLE

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

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

1) kernel.te

[root@python kernel]# vi kernel.te

在role user_r 的下面加上一行

role madia_r;

2) domain.te

[root@python kernel]# vi domain.te

在 role user_r types domain; 的下面加上一行

role madia_r type domain;

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

[root@python system]# vi userdomain.te

在第5行追加madia_r,如下所示:

role sysadm_r, staff_r, user_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 policy]# vi users

gen_user(madia, madia, madia_r, s0, s0)

2)rolemap

[root@python policy]# vi rolemap

在user_r user user_t下面加上一行

madia_r madia madia_t

5.3.4 重新make 策略

[root@python policy]# make load

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

Seusers是系统一般用户和SELinux的用户映射。

[root@python refpolicy]# vi seusers

madia:madia

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

1)default_type

决定用户登录时的默认ROLE。

[root@python refpolicy]# vi contexts/default_type

madia_r:madia_t

2)default_contexts

决定用户登录时的默认security context

[root@python refpolicy]# vi contexts/default_contexts

system_r:local_login_t madia_r:madia_t staff_r:staff_t user_r:user_t sysadm_r:sysadm_t

5.3.7 以madia用户重新登录

最后以用户madia登录,查看是不是 进入madia_t了。

[madia@python ~]$ id

uid=501(madia) gid=501(madia) groups=501(madia) context=madia:madia_r:madia_t

以上我们可以看出,madia用户确实是进入了madia_t 运行了。

我们在以上的操作中,实际上还有修改遗漏的地方,每当重新make的时候,seusers都会回到原来的设定,有兴趣的朋友可以自己找出哪里还需要修改。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值