现在的位置: 首页 > 综合 > 正文

11G bug-sqlplus:cannot restore segment prot after reloc: Permission denied

2013年06月07日 ⁄ 综合 ⁄ 共 2699字 ⁄ 字号 评论关闭

前几天在64位RHEL 5.2上安装完11gr2后,sqlplus
登陆时出现

下面来自网络上的描述
http://hj8868163.blog.163.com/blog/static/2490348520108131115982/

sqlplus: error while loading shared libraries: /u01/app/oracle/product/11.1.0/db_1/lib/libnnz11.so: cannot restore segment prot after reloc: Permission denied

这个问题发生在ORACLE ENTERPRISE LINUX R5上,无论是32位还是64位都存在这个问题。

第一次在安装32位的ORACLE 11G for
Linux的时候也碰到了,当时没有记录下来,这次特意查询了一下Metalink,Oracle在metalink的文档:Doc ID: Note:454196.1中对于问题进行了详细的描述。

最简单的解决方法莫过于将SElinux设置位PERMISSIVE状态:

[root@enterprice64 ~]# getenforce

Enforcing

[root@enterprice64 ~]# setenforce 0

[root@enterprice64 ~]# getenforce

Permissive

 

配置 SELinux是很简单的。同样,一些简单配置可以通过改变配置文件 /etc/sysconfig/selinux 来完成。在配置文件中有三种指令,描述如下:

指令 <-------->描述

SELINUX <-------->SELinux工作状态,可以设置为 enforcing,permissive或disabled。

SELINUXTYPE <-------->指定保护级别。默认是 targeted,仅作用于daemons。另一个选择是 strict 使用 SELinux进行全面保护。

SELOCALDEFS <-------->支持本地 SELinux 策略。默认设置为 0(即关闭)

如果你想改变 SELinux的基本状态,改变 SELinux指令。重启后,改动生效。


http://www.ningoo.net/html/2007/encounter_first_oracle11g_bug.html

以root身份,通过以下命令查询SELinux的模式:getenforce 默认应当返回Enforcing

通过以下命令更改模式:setenforce 0

然后再次查询getenforce,应该返回permissive了

以上修改在系统重启前有效,重启后系统又会变回默认的enforcing模式。如果需要启动即为permissive模式,则需要在grub的启动项中增加enforcing=0,例如

title Red Hat Enterprise Linux ES (2.6.18-8.EL)

root (hd0,0)

kernel /vmlinuz-2.6.18-8.EL ro root=/dev/VolGroup00/LogVol00 rhgb quiet enforcing=0

initrd /initrd-2.6.18-8.EL.img

另外,也可以通过setupfirewall configuration来设置SELinux的模式。

 


Selinux简介

Security-Enhanced Linux 是一个在2.6核心中整合的一个新的安全构架

Linux security modules(LSM),是美国国家安全局(NAS)和SElinux社区的一个联合项目,经过NAS 和红帽子公司的努力 ,seliunx被整合进入了红帽子linux企业版

SElinux 在linux内核级别上提供了一个灵活的强制访问控制系统(MAC),这个强制访问控制系统是建立在自由访问控制系统(DAC)之上的。

DAC是指系统的安全访问控制都是由系统管理员root自由管理的,不是系统强制行为

MAC运行的时候,比如一个应用程序或者一个线程以某个用户UID或者SUID运行的时候同样对一些其他的对象拥有访问控制限制,比如文件,套接子(sockets)或者其他的线程

通过运行SElinux MAC内核可以保护系统不受到恶意程序的侵犯,或者系统本身的bug不会给系统带来致命影响(把影响限定在一定范围内)

SElinux为每一个用户,程序,进程,还有文件定义了访问还有传输的权限。然后管理所有这些对象之间的交互关系

对于SELinux设定的对象全限是可以根据需要在安装时候规定严格程度,或者完全禁用

在大多数情况下,SElinux对于用户来说是完全透明的,普通用户根本感觉不到Selinux的存在,只有系统管理员才需要对这些用户环境,以及策略进行考虑。这些策略可以按照需要宽松的部署或者应用严格的限制,Selinux提供了非常具体的控制策略,范围覆盖整个linux系统

比如,当一个对象如应用程序要访问一个文件对象,内核中的控制程序检查访问向量缓存(AVC),从这里寻找目标和对象的权限,如果在这里没有发现权限定义,则继续查询安全定义的上下关联,以及文件权限,然后作出准许访问以及拒绝访问的决定。如果在var/log/messages出现avc: denied信息,则表明访问拒绝。

目标和对象通过安装的策略来决定自身的安全关联,同时这些安装的策略也负责给系统产生安全列表提供信息。

除了运行强制模式以外,SELinux可以运行在许可模式,这时候,检查AVC之后,拒绝的情况被记录。Selinux不强制使用这种策略.

以下介绍一下SELinux相关的工具

/usr/bin/setenforce 修改SELinux的实时运行模式

setenforce 1 设置SELinux 成为enforcing模式

setenforce 0 设置SELinux 成为permissive模式

如果要彻底禁用SELinux 需要在/etc/sysconfig/selinux中设置参数selinux=0 ,或者在/etc/grub.conf【注:grub.conf -> ../boot/grub/grub.conf】中添加这个参数【注:哪个参数?】



/usr/bin/setstatus -v 【注:这个命令没找到

察看系统的状态

以下是运行输出,请参考

SELinux status: enabled

SELinuxfs mount: /selinux

Current mode: enforcing

Policy version: 18

转自:http://space.itpub.net/23650854/viewspace-683957

 

抱歉!评论已关闭.