运维管理5 分钟阅读
什么,oracle 主机用户被删了?原来是虚惊一场!
大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。 @TOC目录 今天突然有个客户找我,说 /home/oracle 家目录不见了: 好家伙,我咋一看猜测是 oracle 用户被删了,这是个大
2025年3月3日
oraclerac
DBA 实战课程
系统学习 Oracle DBA
- 2738+ 篇实战文章
- 1500+ 步骤截图
- 10 大核心模块
开通会员 ¥128/月起
查看完整课程在知识库中专注阅读,并随时返回相关工具与课程
大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。
本章目标:掌握本章核心知识点 前置要求:完成前序章节学习 预计时长:60 分钟
今天突然有个客户找我,说 /home/oracle 家目录不见了:

好家伙,我咋一看猜测是 oracle 用户被删了,这是个大动作啊,赶忙连上远程看看,好在最后 5 分钟解决战斗。本文分享一下问题处理过程。
一套 Oracle 11GR2 两节点的 rac 数据库,客户说节点 2 的 /home/oracle 目录没了,连上主机一看先看看用户在不在:

还好,用户还在,那应该就是目录被删了,切换一下用户试试:

可以看到可以成功切换用户,只不过家目录没了,那还好办。所以,为什么家目录没了呢?
首先想到的是看 history 记录,入眼只看到一个删除用户 tony 的命令:

这也没啥关系啊,再往上看了一会儿,突然看到创建 tony 的命令:

好家伙,是个人才,这下就理顺了嘛。
可以看到,tony 在创建 tony 用户的时候,将家目录指定到了 /home/oracle 目录,也就是说,tony 和 oracle 这两个用户共用同一个家目录:/home/oracle,这虽然违反了规范,但是其实没什么大的影响。
这里我先插播一下 userdel 这个命令的语法:
- -f:强制删除用户,即使用户当前已登录;
- -r:删除用户的同时,删除与用户相关的所有文件。 可以看到当我们使用
userdel命令时,如果不加任何参数,则只会删除用户本身,不会级联删除用户相关的文件。而如果加上-r选项,则会删除与用户相关的所有文件。
接着看,问题出在 tony 把 tony 用户删掉的时候加了 -rf,众所周知(当然不包括 tony),那么自然 tony 用户在被删除时,也就级联删除了 /home/oracle 目录。
关于本文说的这个问题,大家感兴趣的可以做一个实验去重现验证一下:
1useradd -u 54321 -g oinstall -G dba,oper oracle2echo oracle | passwd --stdin oracle34useradd -d /home/oracle -g dba tony5userdel -rf tony记得一定要在测试环境执行啊!
问题分析到这,基本就清楚了,那剩下就是如何还原 /home/oracle 目录咯。
首先,需要重建一下家目录:
1# root 用户下2mkdir /home/oracle3chown -R oracle:oinstall /home/oracle从节点 1 把 .bash 开头的隐藏文件都拷贝过来:
1# oracle 用户下2scp .bash* <节点2 IP>:/home/oracle/修改拷贝后的 .bash_profile 文件中的 ORACLE_SID 变量值。
由于是 RAC,所以 oracle 用户是需要互信的,所以需要从节点 1 将 .ssh 文件夹也拷贝到节点 2 :
1# oracle 用户下2scp -R .ssh <节点2 IP>:/home/oracle/拷贝完之后,测试互信:
1# oracle 用户下2ssh <节点2 IP>互信成功说明没有问题。
查看 crontab 是否存在计划任务:
1# oracle 用户下2crontab -l如果存在计划任务,需要根据节点 1 或者客户提供对应脚本进行重建。
可以看到虽然 tony 本身是删除 tony 用户,但是对 Linux 知识的了解不够全面,所以导致了 oracle 用户家目录被删除的惨案,好在问题不是很严重。
但是如果执行的是下面这些命令:
1## 切忌在生产环境执行2mv /soft/1.sh /oradata3mv /oradata/* /dev/null4rm -rf / 1.sh5chmod -R 777 /会有什么结果呢?