代码改变世界

oracle的特殊权限s bit丢失

2016-11-18 13:54  AlfredZhao  阅读(...)  评论(...编辑  收藏

在SUN Cluster搭建过程中,主机工程师在配置集群资源组时报一个oracle的文件权限错误;
协助排查,发现报错很明确,直接指出说oracle的s bit 权限未设置。
直接去查看$ORACLE_HOME/bin/oracle的权限

cd $ORACLE_HOME/bin/
ls -l oracle

发现现状是:

-rwxr-x--x. 1 oracle oinstall 239626683 Nov  8 04:11 oracle

而正常安装软件后的权限应该是:

-rwsr-s--x. 1 oracle oinstall 239626683 Nov  8 04:11 oracle

很明显,的确少了s权限,解决该问题也十分简单,只需要赋予用户和所在组的s权限:

--setuid
chmod u+s oracle
--setgid
chmod g+s oracle

--或者直接一条命令同时设置setuid,setgid:
chmod ug+s oracle

那本次发生这样情况的原因是什么呢?
因为oracle软件不是安装的,通过tar -cvf打包然后scp传送到另一个节点,最后tar -xvf解包的。
这种方式发现其他文件权限都没问题,唯独oracle这个特殊的setuid,setgid权限丢失了,需要手工授予。
而正常情况下这种方式不应该丢失任何权限,我在自己的Linux测试环境测了下,并不会丢失s权限,所以初步判定是遭遇了早期tar版本的bug。