SU:尽管在 Oracle 容器中是根用户,但权限被拒绝



运行基于官方dockerfile的oracle容器。容器在 EC2 实例 (Amazon Linux 2( 上运行,该实例是 RHEL 衍生产品,我得到:

Configuring Oracle Listener.
su: cannot open session: Permission denied
Listener configuration failed. Check log '/opt/oracle/cfgtoollogs/netca/netca_configure_out.log' for more details.
su: cannot open session: Permission denied

容器以以下方式启动:

docker run --name=oracledb -p 1521:1521  
-e ORACLE_SID=XE -e ORACLE_PDB=foo -e ORACLE_PWD=bar 
oracle/database:18.4.0-x

通过更改入口点并作为根放入 shell 中,并执行su oracle确实给了我被拒绝的权限。为什么会这样?

我正在使用docker和oraclelinux:7-slim来安装Oracle数据库。安装 oracle-database-preinstall-19c 软件包后,我无法"su -"进入 oracle 帐户。许多人说这是因为limits.conf中的"nofile unlimited",其他人说在/etc/pam.d/su中评论"会话包含系统身份验证"行(顺便说一下,最后一个工作(。但是,在我安装软件包之前,配置都是一样的,我能够做"su - oracle"。即使我创建了一个属于同一组"su -"的新用户,也可以工作。所以它必须是包装改变的东西。

经过一些调查,我发现软件包在/etc/security/limits.d/中安装了"oracle-database-preinstall-19c.conf",并且该文件具有所有oracle限制配置。因为我们正在与 docker 合作,所以您必须注释以下行才能工作:

#oracle 硬门锁134217728

问题是limits.conf中的设置不合适。更改运行命令以包含 --ulimit 选项,其中增加了 nofile 修复了该问题:

docker run --name=oracledb --ulimit nofile=1048576:1048576 
-p 1521:1521  
-e ORACLE_SID=XE -e ORACLE_PDB=foo -e ORACLE_PWD=bar 
oracle/database:18.4.0-x

请注意--ulimit nofile=1048576:1048576

对于那些由于某种原因仍然需要运行 Oracle 18 的用户,您可以将--privileged添加到 Docker 命令中:

docker run --name oracle18 --privileged -p 1521:1521 -v /opt/oracle18/oradata:/opt/oracle/oradata -e ORACLE_PWD=abcd1234 container-registry.oracle.com/database/express:18.4.0-xe

最新更新