chmod: changing permissions of ?u01/app/oracle/product/12.2.0/dbhome_1/bin/extjobO? Operation not pe

RDBMS 12.2.0.1 

redhad 7.6

PSU 200714

在安装PSU的时候,提示有个小错误:

OPatch found the word "error" in the stderr of the make command.
Please look at this stderr. You can re-run this make command.
Stderr output:
chmod: changing permissions of ?u01/app/oracle/product/12.2.0/dbhome_1/bin/extjobO? Operation not permitted
make: [iextjob] Error 1 (ignored)


Patch 31312468 successfully applied.
Sub-set patch [29314339] has become inactive due to the application of a super-set patch [31312468].
Please refer to Doc ID 2161861.1 for any possible further required actions.
OPatch Session completed with warnings.
Log file location: /u01/app/oracle/product/12.2.0/dbhome_1/cfgtoollogs/opatch/opatch2020-09-02_14-10-19PM_1.log

OPatch completed with warnings.
[oracle@wls10306-01 31312468]$ 

查看该文件的权限:

[oracle@wls10306-01 bin]$ ll ext*
-rwxr-xr-x 1 oracle oinstall 2241520 Sep  2 14:15 extjob
-rwx------ 1 oracle oinstall 2241520 Sep  2 14:15 extjobo
-rwsr-x--- 1 root   oinstall 2241464 Jan 17  2020 extjobO
-rw------- 1 oracle oinstall 2241464 Jan 17  2020 extjoboO
-rwxr-x--x 1 oracle oinstall  199128 Sep  2 14:15 extproc
-rw------- 1 oracle oinstall  199128 Jul 30 08:28 extprocO
-rwxr-x--- 1 oracle oinstall     361 Jan 17  2020 extusrupgrade

查询MOS:这是一个bug,可以忽略

安装Proactive Bundle / PSU Patch报错 "chmod: changing permissions of `$ORACLE_HOME/bin/extjobO': Operation not permitted" (Doc ID 2668094.1)

原因

这是由于一个内部Bug导致的。

 

解决方案


这个问题/警告"chmod: changing permissions of '$ORACLE_HOME/bin/extjobO'': Operation not permitted" 可以被安全的忽略。

这点在Proactive Bundle Patches 的readme中也有提及,如下

ReadMe: (of Patch 24968615 - Database Proactive Bundle Patch 12.1.0.2.170117) 的第3部分 Known Issues

https://updates.oracle.com/Orion/Services/download?type=readme&aru=20775452
 


或者,

在RDBMS HOME 上执行root.sh脚本来解决权限问题。

当你运行root.sh extjob,可执行程序的权限会被改成root。

---

另外,在安装补丁的时候,提示Doc ID 2161861.1

对应中文版为:Opatch:从Opatch 12.2.0.1.5 和 11.2.0.3.14 版本开始的行为改变 (Doc ID 2331528.1)

从 Opatch 12.2.0.1.7 和 11.2.0.3.15 版本开始,会返回如下消息

在应用过程中禁用子集补丁之后:

Sub-set patch [22674709] has become inactive due to the application of a super-set patch [23177536].
Please refer to Doc ID 2161861.1 for any possible further required actions.

在回滚过程中重新激活子集补丁之后:

Inactive sub-set patch [22674709] has become active due to the rolling back of a super-set patch [23177536].
Please refer to Doc ID 2161861.1 for any possible further required actions.

 

另外,新版本的Opatch,可以通过 ./opatch lsinv -inactive命令,列出所有被超级取代,并禁用的补丁。

Local Machine Information::
Hostname: wls10306-01
ARU platform id: 226
ARU platform description:: Linux x86-64

Installed Top-level Products (1): 

Oracle Database 12c                                                  12.2.0.1.0
There are 1 products installed in this Oracle Home.


Inactive patches (1) :

Patch  29314339     : applied on Thu Jul 30 08:28:34 CST 2020
Unique Patch ID:  22821655
Patch description:  "Database Apr 2019 Release Update : 12.2.0.1.190416 (29314339)"
   Created on 24 Mar 2019, 03:28:52 hrs PST8PDT
   Bugs fixed:

END

<think>我们正在解决在更改/var/log/nginx文件夹权限时出现"chmod:changingpermissionsof‘/var/log/nginx’:Operationnotpermitted"错误的问题。这个错误通常发生在没有足够权限的情况下,即使使用了sudo,也可能因为文件系统保护机制(如SELinux)或文件/目录的不可变属性(immutable)而导致。根据引用[1]中提到的类似问题(虽然引用[1]是关于rpm冲突,但其中提到了操作不允许的解决方法),我们可以考虑以下几个步骤:###可能的原因及解决方案1.**检查文件系统挂载选项**:如果文件系统以只读方式挂载,则无法修改权限。使用`mount`命令检查挂载选项。-解决方案:重新挂载为可读写(如果确实是以只读方式挂载),例如:`mount-oremount,rw/`2.**检查SELinux状态**:SELinux可能会阻止权限更改。-检查SELinux状态:`sestatus`-临时禁用SELinux(不推荐,仅用于测试):`setenforce0`-如果问题由SELinux引起,应调整策略,例如使用`chcon`命令更改安全上下文或添加SELinux规则。3.**检查文件/目录的不可变属性(immutable)**:如果文件或目录被设置了不可变属性(通过`chattr`命令设置),则无法修改权限。-使用`lsattr`命令检查:`lsattr/var/log/nginx`-如果输出中包含`i`(immutable)或`a`(appendonly),则需要去除该属性:`sudochattr-i/var/log/nginx`(如果目录下有文件,可能需要递归处理)4.**父目录权限问题**:确保父目录(/var/log)的权限允许修改子目录。-检查父目录权限:`ls-ld/var/log`-需要写权限和执行权限(wx)才能修改子目录。5.**使用正确的所有权**:如果目录属于root,而您使用非root用户(即使使用sudo)操作,也要确保sudo配置正确。-尝试使用`sudo`:`sudochmod...`-或者直接切换到root用户操作。6.**磁盘空间或inode耗尽**:虽然较少见,但磁盘空间不足或inode用尽也可能导致操作失败。-检查磁盘空间:`df-h/var`-检查inode使用情况:`df-i/var`7.**AppArmor或其他安全模块**:类似SELinux,AppArmor也可能限制操作。-检查AppArmor状态:`sudoapparmor_status`-暂时禁用AppArmor:`sudosystemctlstopapparmor`(不推荐生产环境)###针对/var/log/nginx目录的特别说明根据引用[2]和[3]的上下文,我们注意到nginx的日志目录通常由nginx服务写入。如果使用Docker运行nginx(如引用[3]),则宿主机上的/var/log/nginx目录实际上是通过卷挂载映射到容器内的。此时,修改宿主机上的目录权限可能会受到限制,因为容器内的用户权限映射到宿主机上可能不同。-**如果使用Docker**:在宿主机上修改挂载点(如`/var/nginx/logs`)的权限,而不是容器内部的路径(容器内部路径为`/var/log/nginx`)。确保宿主机上的挂载目录(例如`/var/nginx/logs`)有适当的权限允许容器内的nginx用户(通常是www-data)写入。###具体操作步骤根据以上分析,我们按以下步骤解决:1.**确认当前用户权限**:```bashsudochmod-v755/var/log/nginx```使用`-v`参数查看详细输出。2.**检查不可变属性**:```bashlsattr/var/log/nginx```如果输出中包含`i`,则去除:```bashsudochattr-i/var/log/nginx```3.**检查SELinux**:```bashsestatus```如果SELinux处于`Enforcing`模式,尝试暂时设置为`Permissive`:```bashsudosetenforce0```然后再次尝试修改权限。如果成功,则需要永久调整SELinux策略(或禁用SELinux)或设置正确的安全上下文:```bashsudochcon-R-thttpd_log_t/var/log/nginx#对于nginx,安全上下文可能是httpd_log_t或nginx_log_t,具体取决于系统```4.**检查挂载选项**:```bashmount|grep'/var'```如果发现挂载选项有`ro`(只读),则重新挂载为读写:```bashsudomount-oremount,rw/var```5.**检查父目录权限**:```bashls-ld/var/log```确保用户有写权限(至少root有rwx权限)。6.**如果使用Docker**:确保在宿主机上修改的是挂载点目录(如`/var/nginx/logs`)的权限,而不是容器内部路径。7.**如果以上都无效**:考虑重启系统后再次尝试(可能某些临时锁导致)。###示例解决方案假设问题是由于不可变属性导致的:```bash$lsattr/var/log/nginx----i---------e----/var/log/nginx$sudochattr-i/var/log/nginx$sudochmod755/var/log/nginx```或者由于SELinux:```bash$sestatusSELinuxstatus:enabledSELinuxfsmount:/sys/fs/selinuxSELinuxrootdirectory:/etc/selinuxLoadedpolicyname:targetedCurrentmode:enforcingModefromconfigfile:enforcing$sudosetenforce0$sudochmod755/var/log/nginx#此时成功$sudosetenforce1#改回enforcing模式后,需要设置正确的安全上下文$sudosemanagefcontext-a-thttpd_log_t"/var/log/nginx(/.*)?"$sudorestorecon-Rv/var/log/nginx```###注意事项-修改系统目录权限需谨慎,特别是日志目录,错误的权限可能导致服务无法写入日志。-在Docker环境中,推荐通过挂载卷时设置正确的权限(例如在宿主机上创建目录并设置权限为777,或者设置正确的用户组)来避免容器内的权限问题。###相关问题§§相关问题§§1.如何检查并修改SELinux安全上下文?2.Docker容器中如何正确设置挂载目录的权限?3.如何永久修改Linux系统的打开文件数限制(解决nginx的toomanyopenfiles问题)?4.Linux中chattr和lsattr命令的详细用法是什么?</think>### 解决 `/var/log/nginx` 权限修改报错 "Operation not permitted" 的完整方案 #### 常见原因及解决方案(按优先级排序) 1. **SELinux 安全机制拦截**(最常见原因) - 检查 SELinux 状态: ```bash sestatus ``` - 若显示 `Enforcing`,说明已启用安全拦截 - **临时解决方案**(测试用): ```bash sudo setenforce 0 # 切换为宽松模式 sudo chmod 755 /var/log/nginx # 重试修改权限 ``` - **永久解决方案**(推荐): ```bash sudo semanage fcontext -a -t httpd_log_t "/var/log/nginx(/.*)?" # 添加 SELinux 规则 sudo restorecon -Rv /var/log/nginx # 应用新规则 ``` 2. **文件系统挂载属性限制** - 检查挂载属性: ```bash mount | grep ' /var' ``` - 若包含 `noexec` 或 `nosuid` 属性: ```bash sudo mount -o remount,exec /var # 重新挂载允许执行权限 ``` 3. **目录被锁定(不可变属性)** - 检查特殊属性: ```bash lsattr /var/log/nginx ``` - 若输出含 `i`(immutable): ```bash sudo chattr -i /var/log/nginx # 解除不可变属性 sudo chmod 755 /var/log/nginx # 修改权限 ``` 4. **Docker 卷挂载冲突**(参考引用[3]) - 当使用 `-v /host/path:/container/path` 挂载时: ```bash # 应在宿主机修改挂载点权限,而非容器内路径 sudo chmod 755 /host/path/nginx_logs # 修改宿主机的挂载目录 ``` 5. **父目录权限限制** - 检查父目录权限: ```bash ls -ld /var/log ``` - 若父目录无写权限: ```bash sudo chmod g+w /var/log # 添加组写权限 ``` 6. **系统保护机制(如 systemd-tmpfiles)** - 检查系统配置: ```bash grep nginx /usr/lib/tmpfiles.d/*.conf ``` - 若存在覆盖规则,修改配置文件后执行: ```bash sudo systemd-tmpfiles --apply ``` #### 操作验证流程 ```mermaid graph TD A[执行 sudo chmod ...] -->|报错| B{检查 SELinux} B -->|Enforcing| C[添加 httpd_log_t 规则] B -->|Disabled| D{检查 lsattr} D -->|含 'i' 属性| E[chattr -i] D -->|无特殊属性| F{检查挂载属性} F -->|noexec/nosuid| G[remount exec] F -->|正常| H{检查 Docker} H -->|使用卷挂载| I[修改宿主机目录] H -->|未使用| J[检查父目录权限] ``` #### 典型应用场景(Nginx 日志目录) 1. **正确权限配置**(参考初始问题描述): ```bash sudo chown -R nginx:adm /var/log/nginx # 设置所有者 sudo chmod 2750 /var/log/nginx # 设置权限 (drwxr-s---) ``` - `2750` 含义: - `2`: SETGID(继承父目录组) - `750`: 所有者rwx/组r-x/其他人无权限 2. **验证 Nginx 写入能力**: ```bash sudo -u nginx touch /var/log/nginx/test.log ``` > **重要提示**:修改系统目录权限后需重启 Nginx:`sudo systemctl restart nginx` ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值