解决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
在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
相关文章推荐
- 使用vagrant因用户权限导致文件不可写问题的解决
- php 使用 casperjs,解决 权限不足问题
- 解决linux普通用户使用Wireshark的权限不足问题
- 解决“远程会话已断开连接,因为访问被拒绝导致许可证存储的创建失败,请使用提升的权限运行远程桌面客户端”问题
- 使用网络目录映射虚拟目录出现 500.19 权限不足问题的一个解决办法
- 解决linux系统下因分区目录划分过小,导致tomcat使用系统临时文件夹(/tmp)没有足够空间而报错的问题
- 装zookeeper集群的时候修改了etc/profile的export Path后导致命令行不能使用了问题解决
- iOS --- 使用runtime解决3D Touch导致UIImagePicker崩溃的问题
- 解决IIS7虚拟目录出现HTTP 错误 500.19(由于权限不足而无法读取配置文件)的问题
- iOS 解决iOS10相册、相机、麦克风等权限使用问题
- oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题
- tomcat服务器内存不足导致的无法连接服务器问题解决方法
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- 使用slice方法进行js对象拷贝 得到新的对象 不再互相干扰 解决引用变量的指向问题
- 因修改/etc/sudoers权限导致sudo和su不能使用的解决方法
- Jenkins使用jenkins-cli.jar进行远程调用时出现“ERROR: No such job 'test'”或者权限不够等问题解决(Windows)
- 虚拟主机上asp.net运行权限不足问题及解决(转)
- 使用Glide导致内存泄漏最终OOM的问题解决
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- 记录Mac下使用Docker部署gitlab权限问题的解决