暂无图片
暂无图片
16
暂无图片
暂无图片
暂无图片

什么,oracle 主机用户被删了?原来是虚惊一场!

原创 Lucifer三思而后行 2025-03-03
879

大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。

目录

前言

今天突然有个客户找我,说 /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 目录。

关于本文说的这个问题,大家感兴趣的可以做一个实验去重现验证一下:

useradd -u 54321 -g oinstall -G dba,oper oracle echo oracle | passwd --stdin oracle useradd -d /home/oracle -g dba tony userdel -rf tony

记得一定要在测试环境执行啊!

问题分析到这,基本就清楚了,那剩下就是如何还原 /home/oracle 目录咯。

解决方案

重建家目录

首先,需要重建一下家目录:

# root 用户下 mkdir /home/oracle chown -R oracle:oinstall /home/oracle

恢复环境变量

从节点 1 把 .bash 开头的隐藏文件都拷贝过来:

# oracle 用户下 scp .bash* <节点2 IP>:/home/oracle/

修改拷贝后的 .bash_profile 文件中的 ORACLE_SID 变量值。

恢复互信

由于是 RAC,所以 oracle 用户是需要互信的,所以需要从节点 1 将 .ssh 文件夹也拷贝到节点 2 :

# oracle 用户下 scp -R .ssh <节点2 IP>:/home/oracle/

拷贝完之后,测试互信:

# oracle 用户下 ssh <节点2 IP>

互信成功说明没有问题。

恢复计划任务

查看 crontab 是否存在计划任务:

# oracle 用户下 crontab -l

如果存在计划任务,需要根据节点 1 或者客户提供对应脚本进行重建。

写在最后

可以看到虽然 tony 本身是删除 tony 用户,但是对 Linux 知识的了解不够全面,所以导致了 oracle 用户家目录被删除的惨案,好在问题不是很严重。

但是如果执行的是下面这些命令:

## 切忌在生产环境执行 mv /soft/1.sh /oradata mv /oradata/* /dev/null rm -rf / 1.sh chmod -R 777 /

会有什么结果呢?

最后修改时间:2025-03-04 10:04:28
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论