ideallorn

统计

最新评论

svn: error while loading shared libraries: /usr/local/lib/libsvn_ra_dav-1.so.0: cannot restore segment port after reloc: Permission denied

http://wiki.yfang.cn/bin/view/MyTroubleShooting/Svn:ErrorWhileLoadingSharedLibraries:Libsvn_ra_dav-1_so_0:CannotRestoreSegmentPortAfterReloc:PermissionDenied

最简单的方法就是关闭 SELinux

问题描述

  • 时间 2008.10.14
  • 环境 CentOS5
  • 症状 正常安装svn后执行不能
# 执行svn命令,会提示
[root@localhost lib]# svn
svn: error while loading shared libraries: /usr/local/svn-1.4.0/lib/libsvn_ra_dav-1.so.0:
cannot restore segment prot after reloc: Permission denied

问题原因和解决方案

  • 非常快的排除了系统文件权限(就是那个chmod能改的lrwxrwxrwx)可能,因为这是一个符号链接,一直追过去权限没有问题
  • 不卖关子,这个问题的原因是因为SELinux被Enable但是没有配置过libsvn_ra_dav-1.so.0文件的security context的原因,为了检查这个问题,你可以执行下面的命令来确认
# sestatus [-v] 
# 注意里面 SELinux status: enabled 部分

# 其他方法也可以查看,比如
cat /selinux/enforce
1 代表 enforcing 状态, 0 代表 permissive 状态

# 或者下面这个更直观
getenforce
  • 通常有两种解决方案
    • 方案一:避开问题,如果你提出了这个问题并为之困惑,我基本上可以判断你并不熟悉SElinux的工作性质,甚至从来没有注意过它的存在。基于这种考虑, 如果你联系你们的服务器管理员后确认SElinux不是你们系统中必须的,那么把它干掉吧。具体方法是执行setenforce disabled来禁用selinux,或者至少setenforce permissive来用warning代替禁止你工作的error级错误,这样Selinux就不再强悍的把你挡掉了。同样的配置实现在CentOS5 或者RHEL5中可以通过system-config-securitylevel-tui来设定,它包装了这个小功能。
    • 方案二:继续Enable SElinux的情况下,你需要针对这件事做的操作也很简单,执行下面的命令更改security context就可以了,问题是,你可能今后亦然遇到这种类似的问题,你需要比较了解SElinux的机制和你的应用程序的底层调用。
chcon -t texrel_shlib_t /usr/local/svn-1.4.0/lib/libsvn_ra_dav-1.so.0

多说两句

  • SElinux对于Linux新手来说可能是一个比较难于理解的工具,对于一般的新手系统管理员来说,你可以先跳过这个工具,简单的disable掉它。
  • SElinux很大程度上解决了简单的权限认证不能够保证系统真正安全的问题,是美国军方提出的。所以对于系统复杂,分工详细,安全要求比较高的系统来 说,这是一个好东西,不过同时带来的是较为复杂的设置(一般非常强大的可定制工具都是这样),要求管理员对系统和程序比较了解,否则可能把自己希望的服务 挡掉继而出现本文提到的类似问题。
  • 感兴趣的朋友可以直接查看SElinux的官方文档,来获取更多消息。

SElinux可能涉及到的命令

# 查看SElinux Enable情况
sestatus
getenforce

# 设定SElinux是否启用
setenforce

# 防火墙管理的TUI,可以设定Selinux状态
system-config-securitylevel-tui

# 查看当前用户security context
id -Z

# 查看文件security context
ls -Z
ls --lcontext
ls --scontext

# 查看运行进程的security context
ps -eZ

# 更改文件security context
chcon

# 重置文件security context
restorecon

# 根据已有的挡掉的log生成允许的规则,可以帮助你调试当前规则
cat /var/log/message | audit2allow
audit2allow -d #这个是从dmesg里读

posted on 2009-03-04 13:20 releng 阅读(1679) 评论(0)  编辑 收藏 引用 所属分类: Linux/FreeBSD Sys Admin

只有注册用户登录后才能发表评论。