首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用kornshell或Perl规避根用户所需的权限

使用kornshell或Perl规避根用户所需的权限
EN

Unix & Linux用户
提问于 2014-06-03 19:39:14
回答 1查看 446关注 0票数 1

我有一个问题,需要更改一个存在于200多台服务器上的文件的所有权和权限。我属于两个不同的组,需要将所有权从一个组改为另一个组。我还需要644的权限。如果我有根访问权限,这是很容易做到的,但我没有。因此,我需要将文件复制为一个用户,然后删除旧文件,然后将最近复制的文件重命名为旧文件的名称。这变得相当繁琐,所以我想创建一个脚本来自动化这些任务。我原以为kornshell能做到这一点,但我的剧本似乎什么也没做。以下是我到目前为止所拥有的:

lockhosts.sh

代码语言:javascript
复制
#!/usr/bin/ksh
sudo su - oradba
cd config
chmod 644 hostenv.cfg
chown orainst hostenv.cfg
exit
sudo su - orainst
cd config
cp -p hostenv.cfg hostenv.cfgnew
rm hostenv.cfg
mv hostenv.cfgnew hostenv.cfg

我认为这是因为我需要运行所有命令才能成功地更改文件的所有权/权限。

我所需要做的就是从下面更改hostenv.cfg文件:

代码语言:javascript
复制
-rwxrw---- 1 oradba  dba  4433 May  1 21:43 hostenv.cfg

到此

代码语言:javascript
复制
-rw-r--r-- 1 orainst dba  4433 May  1 21:43 hostenv.cfg

我能做些什么来修复我的脚本?另外,如果我需要在我的脚本中构建用户提示来请求密码,这是很好的,但我认为系统会要求我。

下面是当我试图运行我的脚本时所发生的事情:

代码语言:javascript
复制
lockhost.sh

我的用户变成了oradba,其他什么都没发生.直到我输入出口..。

代码语言:javascript
复制
exit

logout
chmod: changing permissions of `hostenv.cfg': Operation not permitted
chown: changing ownership of `hostenv.cfg': Operation not permitted
EN

回答 1

Unix & Linux用户

发布于 2014-06-03 19:49:19

问题是,您的sudo su ...生成了另一个shell,并且只有当您从它生成exit时,脚本才会继续运行。

假设您的sudo配置允许这样做,则可以这样做:

代码语言:javascript
复制
sudo -iu oradba 'cd ... && chmod ... && chown ... '
sudo -iu orainst '...'

&&的S可以被分号取代,只是这样,你保证chmod不会被尝试,除非cd是成功的等等。

如果您的sudo配置不允许这样做,您可以这样做:

代码语言:javascript
复制
sudo su -c 'cd ... & chmod ... && chown ... ' - oradba
sudo su -c '...' - orainst
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/134312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档