文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>解决asterisk下使用misdn时被SELinu..

解决asterisk下使用misdn时被SELinu..

时间:2010-09-15  来源:salomi

问题描述:

在CentOS5.5下安装Asterisk-1.4.35, mISDN-1.1.9, chan_misdn后,Asterisk启动时,message中提示:

[Sep 15 13:33:54] WARNING[9792] loader.c: Error loading module 'chan_misdn.so': /usr/lib/libsuppserv.so:cannot restore segment prot after reloc: Permission denied
 

看看文件权限,也不作无谓尝试了,先把selinux改为宽容模式:

setenforce 0

再次尝试,发现chan_misdn正常装载,定位是SELinux的问题,恢复强制模式

setenforce 1

常规做法是禁用SELinux,但这样太没技术含量了,经过研究,按以下方法分析和操作:

1.运行audit2why  < /var/log/audit/audit.log

输出

type=AVC msg=audit(1284526550.664:61): avc:  denied  { execmod } for  pid=9269 comm="asterisk" path="/usr/lib/libsuppserv.so" dev=md1 ino=2172848 scontext=user_u:system_r:initrc_t:s0 tcontext=system_u:object_r:lib_t:s0 tclass=file
        Was caused by:
                Missing or disabled TE allow rule.
                Allow rules may exist but be disabled by boolean settings; check boolean settings.
                You can see the necessary allow rules by running audit2allow with this audit message as input.

再结合ps aux -Z | grep asterisk 可以确定asterisk的主体标识是initrc_t

2.运行sesearch -a | grep initrc | grep execmod

一般会得到以下的结果:

   allow initrc_t textrel_shlib_t : file { ioctl read getattr lock execute execmod };

对比上面红字,会有结论就是:

initrc_t lib_t {execmod}这规则是不存在的,所以会加载失败。

3.对策

修改libsuppserv.so的安全上下文(Security Context),让它符合步骤2的查询结果

chcon -t texrel_shlib_t /usr/lib/libsuppserv.so

或者

按照命令 audit2allow   < /var/log/audit/audit.log 的执行结果处理,增加execmod(但个人感觉这个影响太大)

 

尾声:按照上面的分析步骤,在CLI中运行若干次module load chan_misdn后,共有三个文件需要处理:

chcon -t texrel_shlib_t /usr/lib/libsuppserv.so
chcon -t texrel_shlib_t /usr/lib/libmISDN.so
chcon -t texrel_shlib_t /usr/lib/libisdnnet.so

 

完全搞定~~~

参考链接:

鸟哥的...强烈推荐

http://linux.vbird.org/linux_basic/0440processcontrol.php

杂文,有类似做法但没分析,而且好象会弹窗,自己决定点不点

http://www.phpfans.net/article/htmls/201006/Mjg5MDc2.html

相关阅读 更多 +
排行榜 更多 +
别惹神枪手安卓版

别惹神枪手安卓版

冒险解谜 下载
坦克战争世界

坦克战争世界

模拟经营 下载
丛林反击战

丛林反击战

飞行射击 下载