您的位置:首页 > 运维架构 > Linux

解决asterisk下使用misdn时被SELinux干扰导致权限不足的问题

2010-09-15 17:08 615 查看
问题描述:

在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐